capistrano deployment setup for php projects

capistrano deployment setup for php projects

Do you know these annoying situations where you have a little old PHP project, which was developed years ago and needs little updates from time to time. You don't like to install a ftp-server on your virtual server or any ftp client on your development machine and how was the scp-command again? I had exactly these situations every month again and again and always was to lazy to setup a real deployment-set for such cases. But now I have to move a few of these old projects from an old server to a new one. I have already my setup for deploying rails-applications with capistrano on this new server.

  • installed git on the new server => check
  • installed php on the new server => check
  • created a deployment user => check
  • ssh setup => check
  • capistrano-setup for rails applications => check
  • "real" deployment setup for PHP projects => missing!!

So I decided to create a little deployment setup with a minimal configuration for my PHP projects. It is very simple, but I think it is very very useful - especially for lazy people :-).

1. Gemfile

Add a Gemfile to your project:

source ''

group :deployment do
  gem 'capistrano'
  gem 'capistrano-bundler'

Install your bundle:

bundle install

2. Capfile

Add a Capfile with following code lines to your project root:

require 'capistrano/setup'
require 'capistrano/deploy'

3. Create your deploy directory

Open a new terminal and change into your project root directory and generate the folders and files:

mkdir -p config/deploy
cd config
touch deploy.rb
touch deploy/production.rb && touch deploy/staging.rb && touch deploy/your_environment.rb

4. Change deploy.rb to following

# config valid only for Capistrano 3.3.5
lock "3.3.5" # change the version to the capistrano version you are using - I used capistrano version 3.3.5

set :application, "your-application"
set :deploy_user, "your-ssh-deploy-user"

# setup repo details
set :repo_url, ""
set :scm, :git

# how many old releases do we want to keep, not much
set :keep_releases, 2

5. Change your environment files to something like following

set :stage, :production # or :staging or :your_environment
set :branch, "master" # or another branch, for example "development"

# used in case we're deploying multiple versions of the same
# app side by side. Also provides quick sanity checks when looking
# at filepaths
set :full_app_name, "#{fetch(:application)}_#{fetch(:stage)}"

server 'your-ip-address', user: 'your-ssh-deploy-user', roles: %w{web app db}, primary: true

set :deploy_to, "/var/www/"

# whether we're using ssl or not, used for building nginx
# config file
set :enable_ssl, false

role :app, %w{deploy@your-ip-address}
role :web, %w{deploy@your-ip-address}
role :db,  %w{deploy@your-ip-address}

And you are done. Simple push your changes via your version-control-system and you should be able to deploy any kind of project via the normal capistrano process:

bundle exec cap your_environment deploy

Matthias Frick
PHP & MySQL, Ruby on Rails
4 Kommentare

Über den Autor

Matthias Frick
Matthias Frick, MSc.

Er ist ein langjähriger Ruby-on-Rails Entwickler und leitet das Unternehmen Frick-Web.

4 Kommentare zu "capistrano deployment setup for php projects"

  1. Pedro Rodriguez
    Pedro Rodriguez 18.02.2015
    Thank you for sharing! Very useful and simple, I like it! :-) All the best, P
  2. Lukas Wohlfahrt
    Lukas Wohlfahrt 13.04.2015
    Danke fürs Teilen!
  3. Do you agree with my statement that this post is awesome?  ckddacadbgfd
    Do you agree with my statement that this post is awesome? ckddacadbgfd 03.06.2016
    Do you agree with my statement that this post is awesome? ckddacadbgfd
  4. cheap human hair full lace wigs
    cheap human hair full lace wigs 18.01.2018
    I keep listening to the news broadcast talk about receiving boundless online grant applications so I have been looking around for the finest site to get one. Could you advise me please, where could i find some? cheap human hair full lace wigs

Kommentar verfassen