ITDCMS strives to make the entire PHP development experience delightful, including your local development environment. Vagrant provides a simple, elegant way to manage and provision Virtual Machines.
ITDCMS Fourstead is an official, pre-packaged Vagrant box that provides you a wonderful development environment without requiring you to install PHP, HHVM, a web server, and any other server software on your local machine. No more worrying about messing up your operating system! Vagrant boxes are completely disposable. If something goes wrong, you can destroy and re-create the box in minutes!
Fourstead runs on any Windows, Mac, or Linux system, and includes the Nginx web server, PHP 5.6, MySQL, Postgres, Redis, Memcached, Node, and all of the other goodies you need to develop amazing web applications.
Note: If you are using Windows, you may need to enable hardware virtualization (VT-x). It can usually be enabled via your BIOS.
- Ubuntu Server 14.04 LTS
- Git
- PHP 5.6
- Nginx
- MySQL
- Sqlite3
- Postgres
- Composer
- Node (With PM2, Bower, Grunt, and Gulp)
- Redis
- Memcached
Before launching your Fourstead environment, you must install VirtualBox 5.x or VMWare as well as Vagrant. All of these software packages provide easy-to-use visual installers for all popular operating systems.
To use the VMware provider, you will need to purchase both VMware Fusion / Workstation and the VMware Vagrant plug-in. Though it is not free, VMware can provide faster shared folder performance out of the box.
Once VirtualBox / VMware and Vagrant have been installed, you should add the itdc/fourstead
box to your Vagrant installation using the following command in your terminal. It will take a few minutes to download the box, depending on your Internet connection speed:
vagrant box add itdc/fourstead
If this command fails, make sure your Vagrant installation is up to date.
You may install Fourstead by simply cloning the repository. Consider cloning the repository into a Fourstead
folder within your "home" directory, as the Fourstead box will serve as the host to all of your ITDCMS projects:
cd ~
git clone https://github.com/itdc/fourstead.git Fourstead
Once you have cloned the Fourstead repository, run the bash init.sh
command from the Fourstead directory to create the Fourstead.yaml
configuration file. The Fourstead.yaml
file will be placed in the ~/.fourstead
hidden directory:
bash init.sh
The provider
key in your ~/.fourstead/Fourstead.yaml
file indicates which Vagrant provider should be used: virtualbox
, vmware_fusion
, or vmware_workstation
. You may set this to the provider you prefer:
provider: virtualbox
The folders
property of the Fourstead.yaml
file lists all of the folders you wish to share with your Fourstead environment. As files within these folders are changed, they will be kept in sync between your local machine and the Fourstead environment. You may configure as many shared folders as necessary:
folders:
- map: ~/Code
to: /home/vagrant/Code
To enable NFS, just add a simple flag to your synced folder configuration:
folders:
- map: ~/Code
to: /home/vagrant/Code
type: "nfs"
Not familiar with Nginx? No problem. The sites
property allows you to easily map a "domain" to a folder on your Fourstead environment. A sample site configuration is included in the Fourstead.yaml
file. Again, you may add as many sites to your Fourstead environment as necessary. Fourstead can serve as a convenient, virtualized environment for every ITDCMS project you are working on:
sites:
- map: fourstead.dev
to: /home/vagrant/Code/ITDCMS/public
You can make any Fourstead site use HHVM by setting the hhvm
option to true
:
sites:
- map: fourstead.dev
to: /home/vagrant/Code/ITDCMS/public
hhvm: true
You must add the "domains" for your Nginx sites to the hosts
file on your machine. The hosts
file will redirect requests for your Fourstead sites into your Fourstead machine. On Mac and Linux, this file is located at /etc/hosts
. On Windows, it is located at C:\Windows\System32\drivers\etc\hosts
. The lines you add to this file will look like the following:
192.168.10.10 fourstead.dev
Make sure the IP address listed is the one set in your ~/.fourstead/Fourstead.yaml
file. Once you have added the domain to your hosts
file, you can access the site via your web browser:
http://fourstead.dev
Once you have edited the Fourstead.yaml
to your liking, run the vagrant up
command from your Fourstead directory. Vagrant will boot the virtual machine and automatically configure your shared folders and Nginx sites.
To destroy the machine, you may use the vagrant destroy --force
command.
Instead of installing Fourstead globally and sharing the same Fourstead box across all of your projects, you may instead configure a Fourstead instance for each project you manage. Installing Fourstead per project may be beneficial if you wish to ship a Vagrantfile
with your project, allowing others working on the project to simply vagrant up
.
To install Fourstead directly into your project, require it using Composer:
composer require itdc/fourstead --dev
Once Fourstead has been installed, use the make
command to generate the Vagrantfile
and Fourstead.yaml
file in your project root. The make
command will automatically configure the sites
and folders
directives in the Fourstead.yaml
file.
Mac / Linux:
php vendor/bin/fourstead make
Windows:
vendor\bin\fourstead make
Next, run the vagrant up
command in your terminal and access your project at http://fourstead.dev
in your browser. Remember, you will still need to add an /etc/hosts
file entry for fourstead.dev
or the domain of your choice.
Sometimes you may want to vagrant up
your Fourstead machine from anywhere on your filesystem. You can do this by adding a simple Bash alias to your Bash profile. This alias will allow you to run any Vagrant command from anywhere on your system and will automatically point that command to your Fourstead installation:
alias fourstead='function __fourstead() { (cd ~/Fourstead && vagrant $*); unset -f __fourstead; }; __fourstead'
Make sure to tweak the ~/Fourstead
path in the alias to the location of your actual Fourstead installation. Once the alias is installed, you may run commands like fourstead up
or fourstead ssh
from anywhere on your system.
You can SSH into your virtual machine by issuing the vagrant ssh
terminal command from your Fourstead directory.
But, since you will probably need to SSH into your Fourstead machine frequently, consider adding the "alias" described above to your host machine to quickly SSH into the Fourstead box.
A fourstead
database is configured for both MySQL and Postgres out of the box. For even more convenience, ITDCMS's .env
file configures the framework to use this database out of the box.
To connect to your MySQL or Postgres database from your host machine via Navicat or Sequel Pro, you should connect to 127.0.0.1
and port 33060
(MySQL) or 54320
(Postgres). The username and password for both databases is fourstead
/ secret
.
Note: You should only use these non-standard ports when connecting to the databases from your host machine. You will use the default 3306 and 5432 ports in your ITDCMS database configuration file since ITDCMS is running within the virtual machine.
Once your Fourstead environment is provisioned and running, you may want to add additional Nginx sites for your ITDCMS applications. You can run as many ITDCMS installations as you wish on a single Fourstead environment. To add an additional site, simply add the site to your ~/.fourstead/Fourstead.yaml
file and then run the vagrant provision
terminal command from your Fourstead directory.
ITDCMS provides a convenient way to schedule Cron jobs by scheduling a single schedule:run
Artisan command to be run every minute. The schedule:run
command will examine the job scheduled defined in your ITDCMS\System\App\Console\Kernel
class to determine which jobs should be run.
If you would like the schedule:run
command to be run for a Fourstead site, you may set the schedule
option to true
when defining the site:
sites:
- map: fourstead.dev
to: /home/vagrant/Code/ITDCMS/public
schedule: true
The Cron job for the site will be defined in the /etc/cron.d
folder of the virtual machine.
By default, the following ports are forwarded to your Fourstead environment:
- SSH: 2222 → Forwards To 22
- HTTP: 8000 → Forwards To 80
- HTTPS: 44300 → Forwards To 443
- MySQL: 33060 → Forwards To 3306
- Postgres: 54320 → Forwards To 5432
If you wish, you may forward additional ports to the Vagrant box, as well as specify their protocol:
ports:
- send: 93000
to: 9300
- send: 7777
to: 777
protocol: udp