Every two weeks I send out a newsletter containing lots of interesting stuff for the modern PHP developer. You can expect quick tips, links to interesting tutorials, opinions and packages. Want to learn the cool stuff? Then sign up now!

Easy deployments for php projects

Let’s talk a bit about deployments.

All the new projects I work on  are hosted on servers that are provisioned by Forge. Forge has a quick deploy feature that allows you to pull the lastest master-commit onto the server, install composer dependencies, run migrations and so on.

It has two main drawbacks:

  • you can’t see any output of the deployment script in your terminal
  • you can’t do some stuff locally on your computer

To solve these points I’m switching from Forge’s quick deploy feature to Deployer.

Deployer is a deployment tool written in PHP, it’s simple and functional. Deploy your code to all servers you want, it supports deploy via copy, or via VCS (like git), or via rsync. Run your tasks on all your servers, or use our recipes of common tasks for Symfony, Laravel, Zend Framework and Yii.

You can install Deployer via composer.  To use Deployer a deploy.php file must  be added to your project. This file describes your deployment process. No worries, you can write it in php using a very clean and readable syntax.  The documention on how to write the deploy.php-file is a bit vague at this point, but you’ll get a good idea of how things work by taking a look at my deploy.php-file.

To run deployer you’ll use this command:

dep <taskname> <environment>

I’ve made a bash alias that uses the name of the git branch you’re currently on:

alias deploy='dep deploy $(git symbolic-ref --short HEAD)'

Now deploying a branch is as easy as just typing “deploy” when standing on a git repo in your terminal. This is a much nicer way to handle deployments. What I really like is that, now a deploy.php stored in the git repo, the deployment process is also versioned.

If you find Deployer doesn’t meet your needs, Rocketeer,  Phing and Capistrano are some more advanced alternatives.  Envoy is nice too, but I haven’t found a way to run stuff locally.

Freek Van der Herten is a partner and developer at Spatie, an Antwerp based company that specializes in creating web apps with Laravel. After hours he writes about modern PHP and Laravel on this blog. When not coding he’s probably rehearsing with his kraut rock band. He loves waffles and butterflies.