A PHP CLI tool for managing LAMP projects within a Vagrant environment
Breeze is a toolset for quickly spinning up websites in a virtual development environment. Inspired by early versions of Laravel Homestead, Breeze seeks to eliminate or simplify the steps needed to start development on a PHP project. It provides a Vagrant environment with pre-configured software (Ubuntu 14.04, Apache, MySQL, PHP, Git, etc) as well as single configuration file for managing all of your sites, so creating a development site is as simple as copy/pasting and running a few simple commands.
Breeze is especially helpful for maintaining websites that currently exist on your servers. Setting up an existing website in a development environment can be a pain, but Breeze automates common tasks like creating virtual hosts, replicating databases, and pulling down fresh versions of site assets. Tasks that used to take several minutes now take seconds, which means you can spend more time writing code and solving problems.
Before launching your Breeze environment, you will need to install the following software on your system:
Breeze provides some tooling for "pulling" databases and files from a server into your local development environment. Breeze is opinionated about how it expects to interact with your remote environments. To use Breeze's features for syncing databases and remote files, you will need the ability to access your remote servers over SSH using an identity file for authentication. Common tools such as rsync
and mysqldump
are also required in your remote environments for some operations.
Before launching your Breeze environment, you will need to install VirtualBox, Vagrant, PHP, and Composer on your system. If you are using Windows, you will need to use Git BASH or an equivalent terminal. Also, if you're using Windows, there are a few caveats to using Breeze that are outlined below.
Breeze uses an Ubuntu box as it's virtualized environment. Use Vagrant to add the box:
vagrant box add ubuntu/trusty64
Install Breeze globally using composer:
composer global require clickrain/breeze dev-master
Make sure that composer bin
directory is in your path:
export PATH=~/.composer/vendor/bin:$PATH
Typing breeze
in a terminal and hitting ENTER
should show a list of Breeze commands. Now to initialize the Breeze configuration, run the following command:
breeze init
This will install a directory called .breeze
in your home directory. This is where your main Breeze.yaml
configuration file will reside, along with some other files that Breeze will use.
It's highly recommended that you setup autocompletion for Breeze. Add the following to your .bash_profile
:
eval $(breeze _completion --generate-hook --program breeze)
Source your .bash_profile
file to begin using immediately:
source ~/.bash_profile
Now typing breeze
followed by the TAB
key should provide a list of available commands and options.
Mac OSX Users: You may need to configure bash completion on OSX if you haven't already. Follow instructions at https://github.com/bobthecow/git-flow-completion/wiki/Install-Bash-git-completion to get autocompletion configured correctly.
You can start your Breeze machine with breeze up
. The first time you run this command, Breeze will provision your machine and get it ready for you to start developing!
When you initialize Breeze using breeze init
, a starter configuration file ~/.breeze/Breeze.yaml
is created. You can edit this file to make changes to your Breeze machine.
Breeze also allows you to quickly edit your Breeze.yaml
configuration file just by typing breeze edit
in your terminal. (You may need to setup your default editor in order for this to work.)
Below is an example breeze config file. This config file is explained in detail below:
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
- map: ~/workspace
to: /var/www/vhosts
ports:
- send: 9999
to: 9999
servers:
- id: web1
user: james
host: web1.example.net
port: 22
sites:
- id: example.com
aliases: [example.dev]
path: /var/www/vhosts/example.com
document_root: httpdocs
server: web1
server_path: /var/www/vhosts/example.com
uploads_path: public/uploads
databases:
- id: example
local_name: example
local_user: example
local_password: secret
remote_name: example_prod
remote_user: example_prod
remote_password: prodsecret
remote_host: localhost
remote_port: 3306
server: web1
The following configuration items are available to configure your virtual machine.
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
Here's a brief description of each item:
Key | Description |
---|---|
ip | Private network IP address of the machine |
memory | Machine memory in MB |
cpus | Processors assigned to this machine |
provider | Vagrant provider - Breeze is currently only tested using virtualbox |
authorize | This file is copied to the Breeze guest's authorized_keys for simplified SSH access |
keys | A list of keys to copy to the Breeze guest machine |
The folders config section describes how folders on the host machine are mapped to the guest (Breeze) machine.
folders:
- map: ~/workspace
to: /var/www/vhosts
In the above example, the /home/user/workspace
directory on the host machine is mapped to /var/www/vhosts
in Breeze.
By default, the following ports are automatically forwarded from the Breeze guest machine to your host machine:
- HTTP: port 8000 → port 80
- HTTPS: port 44300 → port 443
- MySQL: port 33060 → port 3306
The ports config section allows you to forward additional ports from your host machine to the Breeze guest machine.
ports:
- send: 9999
to: 9999
The following is an example entry in the folders configuration section:
servers:
- id: web1
user: james
host: web1.example.net
port: 4561
Here's a breakdown of what each item means:
Key | Description |
---|---|
id | Unique identifier for the server. You'll use this to reference this server in your sites and database configurations |
user | Name of the user that you use to SSH into this server |
host | Hostname of this server (can also be an IP address) |
port | SSH port for this server |
Hint: Consider using similar naming conventions for your Breeze servers as you do in your host machine's SSH config file. For example, when searching using
breeze search <phrase>
, the generatedgit clone
commands will use the Breeze server id as host identifier. If that matches your host machine's SSH configuration, cloning the repo will be a simple copy-paste from the search output.
The following is an example sites configuration:
sites:
- id: example.com
aliases: [example.dev]
path: /var/www/vhosts/example.com
document_root: httpdocs
server: web1
server_path: /var/www/vhosts/example.com
uploads_path: public/uploads
Here's a breakdown of what each item means:
Key | Description |
---|---|
id | Unique identifier for the site. You'll use this to reference this site from the Breeze CLI tool |
aliases | An array of virtual host aliases that can be used to access this site. Used to generate a virtual host file |
path | Path on the Breeze to the site project files. Path is on the Breeze guest machine |
document_root | Document root of the site. Leave blank if the document root is the same as the path |
server | id of the server that this site is hosted on (if this site isn't hosted in production anywhere, this can be left alone) |
server_path | Path of the site on the the server |
uploads_path | Directory in this site that contains assets that are uploaded (and typically not version controlled) |
The following is an example database configuration:
databases:
- id: example
local_name: example
local_user: example
local_password: secret
remote_name: example_prod
remote_user: example_prod
remote_password: prodsecret
remote_host: localhost
remote_port: 3306
server: web1
Here's a breakdown of each configuration item:
Key | Description |
---|---|
id | Unique identifier for the database. You'll use this to reference this database from the Breeze CLI tool |
local_name | The name of the database on the Breeze guest VM |
local_user | The username for this database on the Breeze guest VM |
local_password | The password used to access the database on the Breeze guest VM |
remote_name | The name of the database on a remote server |
remote_user | The username for this database on the remote server |
remote_password | The password used to access the database on the remote server |
remote_port | The port used to access the database on the remote server |
server | id of the server that access to the database. Breeze will SSH into this server in order to dump the database |
To simplify work that may require SSH (ssh, scp, rsync, etc), you may add the following to your ~/.ssh/config
file:
Host breeze
HostName 127.0.0.1
Port 2222
KeepAlive yes
ServerAliveInterval 60
User vagrant
This will allow you to type ssh breeze
and SSH directly into your machine (as long as SSH keys are setup correctly).
The following is a list of available Breeze commands.
Initialize the Breeze configuration files in ~/.breeze
breeze init
Edit the Breeze config file in your default editor
breeze edit
Generate an SSH config file within the Breeze guest machine based on configured servers
breeze config:ssh
The following commands act as helpers to run Vagrant commands against the Breeze VM with some slight alterations.
Start the Breeze machine (proxies to vagrant up
). Optionally provision by passing the --provision
flag.
breeze up [--provision]
Display the status of the Breeze machine (proxies to vagrant status
)
breeze status
Provision the Breeze machine (proxies to vagrant provision
)
breeze provision
Reboot the Breeze machine (proxies to vagrant reload
)
breeze reload
Halt the Breeze machine (proxies to vagrant halt
)
breeze halt
Restart the Breeze machine (proxies to vagrant reload
)
breeze reload
Suspend the Breeze machine (proxies to vagrant suspend
)
breeze suspend
Resume a suspended Breeze machine (proxies to vagrant resume
)
breeze resume
Login to the Breeze machine via SSH (proxies to vagrant ssh
)
breeze ssh
This command will destroy the Breeze machine
breeze destroy
Create and enable a virtual host for the given <site>
.
breeze site:create [--force] [--] <site>
If you add the option --force
, this command will override any existing configuration file for this <site>
.
Delete the virtual host file for the given <site>
.
breeze site:create [--force] [--] <site>
If you add the option --purge
, this command will completely delete all files for this site , both on the guest and the host, so use with caution!
List sites that are in the Breeze config
breeze site:list
Pull site files from the remote server via rsync for the given <site>
breeze site:pull-git <site>
Pull uploads from the remote server via rsync for the given <site>
breeze site:sync-uploads <site>
Create the given <database>
on the Breeze guest VM
breeze db:create <database>
Drop the given <database>
from the Breeze guest VM
breeze db:drop <database>
Dump the given <database>
on the Breeze guest VM to output
breeze db:dump <database>
Pass the --remote
option to dump the remote database
Pull the given <database>
from the remote server into the database on the Breeze guest VM
breeze db:pull <database>
Note: this will overwrite the existing database on the Breeze VM
Reload the Breeze Apache server
breeze web:reload
Restart the Breeze Apache server
breeze web:restart
There are currently some outstanding issues with Breeze on Windows that prevent it from functioning correctly. However, you can use nearly all of Breeze's features by SSH'ing directly into Breeze (either with vagrant ssh
from the Breeze project directory or by setting up your SSH configuration file and running ssh breeze
) and then running all your Breeze commands from within that terminal.
In order to install Breeze, you will need to get composer up and running. This can be a little tricky, but it's made easier by this tool:
https://github.com/composer/windows-setup
Breeze is open-source software and licensed under the MIT license.