Advanced server definitions in Capistrano
Posted: November 2nd, 2011 | Author: ayanko | Filed under: Development | Tags: capistrano, deployment | 1 Comment »What if you have several servers with different users, ssh-keys, and even port numbers? How to manage all this stuff flexibly ? This tutorial covers poorly documented Capistrano features for advanced servers and roles configuration. Many of them obtained via digging into Capistrano sources.
This article covers following Capistrano topics:
- roles configuration
- server configuration
- The way HOSTS, ROLES, HOSTFILTER, HOSTROLEFILTER variables affect configuration
- :roles and :hosts settings in the task and run methods
- How to specify server settings with :hosts option?
Before we start lets create minimal recipe.
Bootstrap
$ gem install capistrano $ mkdir test $ cd test $ capify .
Capistrano loads only two standard recipes by default:
$ cap -T cap invoke # Invoke a single command on the remote servers. cap shell # Begin an interactive Capistrano session.
Let’s create our own simple configuration from scratch. Before we choose good server names! ![]()
![]()
Assume we have several servers with following DNS names:
- mr-white.reservoir.dogs
- mr-orange.reservoir.dogs
- mr-blonde.reservoir.dogs
Lets give our servers some roles at config/deploy.rb:
role :dog, 'mr-white.reservoir.dogs', 'mr-orange.reservoir.dogs', 'mr-blonde.reservoir.dogs' role :boss, 'mr-white.reservoir.dogs' role :nerd, 'mr-orange.reservoir.dogs', 'mr-blonde.reservoir.dogs'
Alternatively you may declare it with server option:
server 'mr-white.reservoir.dogs', :dog, :boss server 'mr-orange.reservoir.dogs', :dog, :nerd server 'mr-blonde.reservoir.dogs', :dog, :nerd
