A better website development workflow – part 2 puphpet

Here is a very bare bones way to get a local machine up and running in Vagrant. If you don’t have admin access to your machine you probably will not be able to do this, so make sure you have it for your local machine. The great thing about using puphpet is you don’t have to invest a lot time learning puppet to take advantage of the a virtual environment.

For this you will need:

  • Virtual Box
  • Vagrant
  • Mac OSX but this may work on other OSes, but I am doing this from the OSX machine

Everything will be configured via puphpet.com. There are lots of options that puphpet provides that make it really simple to get your first virtual machine running.

For a typical box I will run ubunutu 14 with apache, php, mysql. Everything on puphpet is setup with php and zend but you can use hhvm if you are feeling adventurous.

To get started go to puphpet.com

Deploy Target:

Below is a screenshot of the first screen, remember your ip address. Also note the sync folder this is how you can sync files via your local system.
Note not all of the screen is shown here:

Server Packages:

I usually leave as is. You can setup Mailcatcher to deliver email if you need it, I don’t recommend it.  If you need email you will need to edit your config.yaml file once your are done building the box and re-provision the machine.

You can add this under the php ini settings and then run a vagrant provision. It should fix any email issues as long as you have sendmail or postfix installed.

       sendmail_path: '/usr/sbin/sendmail -t -i'

Firewall Rule:

I usually leave as is since this only running locally.


I usually select apache and then also add apache modules: vhost_alias and headers

On the second part of this page I will setup custom domain:

using the example below everything is based off of awesome.dev. You can replace this with whatever domain you like as long as you edit you localhost file. On mac this is /etc/hosts

custom domains


Next you can configure php, I usually leave defaults unless you need something specific like curl, or gd, etc… You can also install xdebug, which I have not used but looks pretty nice.  If you use sublime you can try  this tutorial on installing xdebug.

php for puphpet


Next I leave the database as is.  Work queues and search servers I leave as is then create your manifest file by pressing the big blue button.

Vagrant Up

Now we are almost ready to launch. I like to keep my machines in vagrantboxes folder on my desktop. First unzip the file and then copy over you  puphpet folder and vagrant file. Next bring up your terminal. You will need to use this to start your virtual machine.  To keep it simple lets say you have a folder on your desktop called vagrantboxes.

In your terminal switch over to directory. You should be able to see your Vagrantfile. Next type vagrant up. You should now see your machine building. It may take several minutes for this to finish as it is building the machine so be patient.

cd ~
cd Desktop
cd vagrantboxes
vagrant up

.... when it is done you should see someting like this:

 ____        ____  _   _ ____      _      generated using
|  _ \ _   _|  _ \| | | |  _ \ ___| |_   ___ ___  _ __ ___
| |_) | | | | |_) | |_| | |_) / _ \ __| / __/ _ \| '_ ` _ \
|  __/| |_| |  __/|  _  |  __/  __/ |_ | (_| (_) | | | | | |
|_|    \__,_|_|   |_| |_|_|   \___|\__(_)___\___/|_| |_| |_|

Once it is finished, I usually try and ping the server to verify it worked.


Congrats you now have a virtual machine working isolated from your desktop. Now you can look at the services by using ssh.
Type vagrant ssh and sudo netstat -tlnp

$ vagrant ssh
$ sudo netstat -tlnp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0*               LISTEN      844/mysqld      
tcp        0      0   *               LISTEN      600/rpcbind     
tcp        0      0    *               LISTEN      1019/apache2    
tcp        0      0    *               LISTEN      1385/sshd       
tcp        0      0  *               LISTEN      884/ruby1.8     
tcp        0      0  *               LISTEN      884/ruby1.8     
tcp        0      0 *               LISTEN      716/rpc.statd   
tcp6       0      0 :::111                  :::*                    LISTEN      600/rpcbind     
tcp6       0      0 :::22                   :::*                    LISTEN      1385/sshd       
tcp6       0      0 :::38971                :::*                    LISTEN      716/rpc.statd  

In the next part of this series I will be looking at setting up the custom local domain, connecting with a mysql client and using automated deployment via dandelion.

Also read...