Vagrant is a tool which helps us create reproducible development environments. By scripting a virtual machine, Vagrant allows us to share a development machine by sharing a simple script. Other developers can then launch an identical machine by running the vagrant up command. PhpStorm comes with support for Vagrant within the IDE.
- 1. Ensure Vagrant and Oracle VirtualBox are on your system
- 2. Configure Vagrant project settings
- 3. Initialize VagrantFile
- 4. Vagrant up
- 5. (optional) Using the built-in SSH terminal to connect to the Vagrant Box
- 6. (optional) Working with shared folders
1. Ensure Vagrant and Oracle VirtualBox are on your system
To be able to work with Vagrant in PhpStorm, both Vagrant and Oracle VirtualBox have to be installed on your system.
1.1. Download and install Vagrant
Download and install Vagrant from their official website.
1.2. Download and install Oracle VirtualBox
From the VirtualBox website, download and install the latest version of VirtualBox.
2. Configure Vagrant project settings
From the Settings | Project Settings | Vagrant window, specify the required parameters for Vagrant integration. The path to the Vagrant executable must be provided, as well as the instance folder (can be empty to use the project directory).
Using the Add button, we can add our first Vagrant Box. PhpStorm will provide the name and URL to the lucid32 box by default; other boxes can be specified as well.
3. Initialize VagrantFile
The VagrantFile contains all information about the virtual machine. It contains details about the virtual machine such as the virtual IP address, port mappings and memory to assign. Next to that, it can specify which folders are shared and which third-party software should be installed on the machine.
The VagrantFile can be created manually or by using the Tools | Vagrant | Init in Project Root menu.
This will trigger creation of a default VagrantFile.
4. Vagrant up
The Vagrant Box can be started from the Tools | Vagrant | Up menu. This will configure the virtual machine in VirtualBox if this hasn't been done yet, as well as boot it.
Progress can be seen from the Run tool window.
Once completed, the Vagrant Box will be ready for use.
5. (optional) Using the built-in SSH terminal to connect to the Vagrant Box
PhpStorm features a built-in SSH terminal which can be used to connect to a remote machine.
5.1.Start a connection
From the Tools | Start SSH session... menu, we can connect to the Vagrant Box.
This will open a list of hosts we can connect to.
Our Vagrant box should automatically be added to this list. Clicking it will open a connection to the SSH endpoint exposed by our Vagrant box.
The Edit credentials... item allows us to provide connection information manually.
5.2. (optional) Provide connection information
Next, we have to provide connection information. For the default lucid32 box, we can use the following values. Note that for other Vargrant Boxes this information may be different.
- Host: localhost
- Port: 2222 (which is forwarded to the Vagrant Box)
- User name: vagrant
- Password: vagrant
5.3. Working with SSH
After we click OK, PhpStorm will connect to the Vagrant Box using SSH server and show us a terminal to work with.
In the SSH terminal, we can run commands remotely as well as copy/paste data back and forth.
6. (optional) Working with shared folders
Vagrant allows sharing folders between the host machine and the Vagrant Box. They can be used, for example, to automatically provide web root contents from the current PhpStorm project to the Apache virtual host directory on the Vagrant Box.
6.1. Add a path mapping
From the VagrantFile, we can add path mappings by adding a configuration entry for it:
6.2. Vagrant reload
Reloading the VagrantFile can be done using the Tools | Vagrant | Reload menu. Once the Vagrant Box has been reloaded, a new path mapping will be available.
For example, when connecting to the Vagrant Box using the built-in SSH terminal, we can see the contents of the /vagrant folder which map to the PhpStorm local project folder. Be careful: deleting files from this folder will delete files on both ends!