Homestead is Laravel's officially pre-packaged Vagrant box that is already set up with everything needed to run a Laravel project.
Virtual Machine setup
Install Vagrant
Install Virtualbox
Add the Homestead Virtualbox:
vagrant box add laravel/homestead
Homestead source files setup
Now, from here there are two ways of getting a box running. There is no need to do both.
I prefer cloning the Github repository, which is also the officially documented way at the time of this writing for Laravel 5.0. My reason is that if you "dirty" your Homestead repository, it really doesn't take a lot of effort to just remove the dirty/broken/outdated Homestead VM, reclone it afresh, and reimport your settings file. We will just clone the Github repo:
git clone https://github.com/laravel/homestead.git Homestead
cd Homestead
bash init.sh
This will create a
Homestead.yaml
file, placed in your ~/.homestead
directory. This settings file can easily be re-initialized by running the init.sh
script again, as above.The alternate way is using Composer to globally install Homestead. This was previously the officially documented approach, at least back during Laravel 4.2. I am not sure I like this approach, but there are articles out there evangelizing the merits of doing this. I would rather modularize my development environments as done the first way, instead of globally invoking Homestead anywhere in my system (how often do you really need to create a new Laravel box, when a single box can capably manage all of your local Laravel projects? Capriciously, running
homestead up
is annoying when vagrant up
is already so ingrained!):
composer global require "laravel/homestead=~2.0"
homestead init
This will create a
Homestead.yaml
file, placed in your ~/.homestead
directory.SSH key setup
The
~/.homestead/Homestead.yaml
file already sets a sane default location for your SSH key; if yours is different then update it. See here to create a key from scratch if it doesn't yet exist.Shared folders/sites setup
In the
~/.homestead/Homestead.yaml
file, map out the path you want access to in your Homestead VM. I keep all my projects and VMs (including this Homestead VM) in a Projects folder, so let's update the `folders` variable using relative paths, and also the sites (of which you can have as many as you want) with the specific Laravel projects you want to access:
folders:
- map: ../../Projects
to: /home/vagrant/Projects
sites:
- map: mylaravel5project.dev
to: /home/vagrant/Projects/mylaravel5project/public
Hosts file setup
If you want to access your project in the browser with a pretty name instead of Homestead's default IP, http://192.168.10.10/, be sure to define some hosts for easier access.
Alias setup
To add Bash aliases to your Homestead box, simply add to the aliases file in the root of the
~/.homestead
directory.Create a Laravel Project
composer create-project laravel/laravel projectname
Launch!
Simply run:
vagrant up
To destroy the VM and start fresh, run: vagrant destroy --force
To SSH into Homestead when it is running, from the Homestead cloned directory, run: vagrant ssh
Now we are set to visit http://192.168.10.10/ and will see the first mapped Laravel project's main page. If several apps were specified in the
Homestead.yaml
file's sites, and hosts file definitions were set for all of them, you can access each of them individually via those mapped URLs (i.e. mylaravel5project.dev). Enjoy!