85 lines
3.4 KiB
Markdown
85 lines
3.4 KiB
Markdown
---
|
|
layout: getting_started
|
|
title: Getting Started - Packaging
|
|
---
|
|
# Packaging
|
|
|
|
With the virtual machine working and ready, we're ready to get to work.
|
|
But let's assume in this situation that you have other team members, and
|
|
you want to share the same virtual environment with them. Let's package this
|
|
new environment into a box for them so they can get up and running
|
|
with just a few keystrokes.
|
|
|
|
Packages are tar files ending in the suffix 'box' (hence known as box files)
|
|
containing the exported virtual machine and optionally
|
|
additional files specified on the command line. A common file also included
|
|
with boxes is a Vagrantfile. If a Vagrantfile exists in a box, it will be
|
|
added to the configuration load chain. Boxes can use a Vagrantfile to specify
|
|
default forwarded ports, SSH information, etc. Note, however, that a Vagrantfile
|
|
is not required to be packaged with a box, and boxes will work just fine
|
|
without one.
|
|
|
|
Before working through the rest of this page, make sure the virtual environment
|
|
is built by running `vagrant up`.
|
|
|
|
## Creating the Vagrantfile
|
|
|
|
First, we're going to create a basic Vagrantfile we'll package with the
|
|
box which will forward the web port. This way, users of the box can simply
|
|
add the box, do a `vagrant up`, and have everything working, including HTTP!
|
|
First, backup your old Vagrantfile by copying it to something like
|
|
`Vagrantfile.bak`. Then, create a new Vagrantfile which simply forwards the
|
|
web port. The resulting Vagrantfile should look like the following:
|
|
|
|
{% highlight ruby %}
|
|
Vagrant::Config.run do |config|
|
|
# Forward apache
|
|
config.vm.forward_port("web", 80, 8080)
|
|
end
|
|
{% endhighlight %}
|
|
|
|
## Packaging the Project
|
|
|
|
Run the following code to package the environment up:
|
|
|
|
{% highlight bash %}
|
|
$ vagrant halt
|
|
$ vagrant package --include Vagrantfile
|
|
{% endhighlight %}
|
|
|
|
The first command simply halts the running virtual machine (if its running).
|
|
This is basically equivalent to pulling the plug on our machine and is not
|
|
recommended in general. In this case, it shouldn't really cause any damage.
|
|
|
|
The second command is where the meat is. `vagrant package` takes the virtual
|
|
environment from the current project and packages it into a `package.box`
|
|
file in the same directory. The additional options passed to the command tell
|
|
it to include the newly created Vagrantfile with it, so that the users of
|
|
the box will already have port forwarding setup.
|
|
|
|
## Distributing the Box
|
|
|
|
Vagrant currently supports installing boxes from local file path or from
|
|
HTTP. If the box you're distributing has private data on it (such as a
|
|
company's web application or client work for freelancers), then you should
|
|
keep the box on a secure filesystem where the public cannot access it.
|
|
|
|
If the box you're distributing is meant to be public, HTTP is the best
|
|
resource to upload to, so that anyone can easily download it.
|
|
|
|
Once the box is in place, other developers can add it and use it just
|
|
like any other box. The example below is from the point of view of a new
|
|
developer on your team using your newly packaged box:
|
|
|
|
{% highlight bash %}
|
|
$ vagrant box add my_box /path/to/the/package.box
|
|
$ vagrant init my_box
|
|
$ vagrant up
|
|
{% endhighlight %}
|
|
|
|
At this point, they should have a fully functional environment which exactly
|
|
mirrors the environment set up in previous steps of the guide. Notice that
|
|
they didn't have to do do provisioning, or set up anything on their system
|
|
(other than Vagrant), etc. Distributing development environments has never
|
|
been so easy.
|