Multiple Laravel Homestead Installations
UPDATE : Laravel Homestead now provides the possibility to use older versions of the vagrant box by changing the configuration file : see the documentation
Since I maintain some older Laravel applications that are not compatible with the latest PHP version, I need a way to use a different Laravel Homestead installations for different projects.
Here is a solution to install different Homestead Composer packages and Homestead Vagrant boxes on Mac Os X. I will be using an older Homestead installation with PHP 5.6 for an old project and the latest Homestead installation that comes with PHP 7 for a new project.
This article uses information from the laravel Homestead documentation and from a great article by Juliån Gutiérrez.
Install the vagrant boxes
I assume you have VirtualBox and Vagrant installed on a Mac Os X system.
We have to install multiple Homestead vagrant boxes to be able to use a different installation for different laravel projects.
As an example, we will be using an older Homestead box (version 0.2.7) that uses PHP 5.6 and the most recent Homestead box. (version 0.5.0 at the time of this writing)
Run the following commands to install the two vagrant boxes :
vagrant box add laravel/homestead vagrant box add laravel/homestead --box-version 0.2.7
We can check the different vagrant boxes that are installed by running the following command :
vagrant box list
If, at a later date, we wish to remove the older Homestead box we can do so by running this command :
vagrant box remove laravel/homestead --box-version=0.2.7
Install the Homestead package per project
Follow the steps on the laravel documentation page to install the Homestead package locally for every project.
For the new project this means executing these commands in the project directory :
composer require laravel/homestead --dev php vendor/bin/homestead make
For the older project, where we want to use an older Homestead Vagrant box, we have to execute the following commands in the project directory to install an older version of the Homestead composer package :
composer require laravel/homestead:^2.0 --dev --no-scripts php vendor/bin/homestead make
Configure the Homestead installation
The Homestead make command will automatically configure the sites and folders directives in the Homestead.yaml file. Check this configuration to make sure it meets your needs and remember to update the /etc/hosts file entry for Homestead.app or the domain of your choice. See the laravel Homestead documentation for more information.
To make sure the older project uses the older Homestead vagrant box, we will use the technique described by Juliån Gutiérrez.
We have to change the VagrantFile generated by the Homestead make command in the directory of the older project.
Replace this code block :
if File.exists? homesteadYamlPath then Homestead.configure(config, YAML::load(File.read(homesteadYamlPath))) elsif File.exists? homesteadJsonPath then Homestead.configure(config, JSON.parse(File.read(homesteadJsonPath))) end
with the following code :
settings = nil if File.exists? homesteadYamlPath then Homestead.configure(config, YAML::load(File.read(homesteadYamlPath))) elsif File.exists? homesteadJsonPath then Homestead.configure(config, JSON.parse(File.read(homesteadJsonPath))) end if settings != nil then config.vm.box_version = settings["version"] ||= ">= 0" Homestead.configure(config, settings) end
This will allow us to define the Homestead Vagrant box version in our Homestead.yaml file for the older project so that this project uses the 0.2.7 version.
Add the following line to the Homestead.yaml file of the older project to instruct Vagrant to use the older Homestead Vagrant box :
version: "~> 0.2.0"
Use Homestead
You can now use the Homestead installation in every project by running the following command from the project directory :
vagrant up
If you wish to connect to the virtual machine, you can run this command :
vagrant ssh
And when you wish to power down the virtual machine, execute this command :
vagrant halt
The older project should now use the older Homestead Vagrant box and the recent project should use the latest Homestead Vagrant box.











