Capistrano Deployment
Introduction
This page describes how Capistrano is used for:
- The V2 deployment git tree used to store and manage V2 and MAPS deployment configurations
- Capistrano customization
- VM setup and provisioning
- Application deployment
- Example deployments
V2 Deployment Git Tree
Capistrano Customization
Capistrano Custom Command Line Parameters
Parameter Name
Example Value
Description
app
maps
MAPS application
v2p0
V2 application
vagrant
Virtual machine setup/provisioning
site
proto
Prototype instance of V2 and MAPS
v2
V2 virtual machine for vagrant provision
instance
zg-3.softxs.ch
Example MAPS instance: v2.softxs.ch/maps
zg-3.softxs.ch
Example v2p0 instance: v2.softxs.ch/v2p0
zg-3.softxs.ch-tn
Example v2p0 instance: v2.softxs.ch/v2p0-tn
vor.softxs.ch-4010
Example v2p0 instance: localhost:4010 on AH laptop
generic
Generic instance, must set vh and vm
vh
1
Virtual host specified
vm
192.168.4.9
Internal IP address of virtual host
Capistrano Deployment Variable
Capistrano Variable Name
Typical Value
Description
Source Control Checkout
scm_user
alan
User for git checkout on git server
scm
git
Source control system
repository
alan@git.softxs.ch:/home/git/gitroot/v2p0.git
Git repository
branch
master
Branch to install
Target Machine
deploy_to
/v01/local/www/rails/v2p0-app
Deploy path on target server
rails_env
production
Rails environment. Typically only production
user
v2
User on target server
group
www
Group on target server
current_path
/v01/local/www/rails/v2p0-app/current
Current path on target server
release_path
/v01/local/www/rails/v2p0-app/releases/20130717103024
Release path on target server
current_release
/v01/local/www/rails/v2p0-app/releases/20130613060901
Currently running release (before installation)
Vagrant Target Machine Applicable only if app=vagrant, and site=v2
user
vagrant
Vagrant user on virtual host server
vh_fqdn
vh01.softxs.ch
Virtual host fully-qualified hostname
vh_home
/home/vms/vm0409
Path to VM on virtual host server
vm_box
lucid64_v2base2
Name of virtual box (instance) to install
vm_name
vm0409
Virtual machine name
Vagrant Generic Parameters Applicable only if instance=generic
vh_name
vh01
Virtual host hostname
vh_fqdn
vh01.softxs.ch
Virtual host fully-qualified hostname
vm_ip
192,168.4.9
Internal IP address of VM
vm_ssh_port
4009
Port number for SSH acces
vm_name
vm0409
VM hostname
vm_int_name
vm0409.vh01
VM internal hostname
vm_int_fqdn
vm0409.vh01.softxs.ch
VM fully qualified internal hostname
vm_ext_name
vm0409vh01
VM public hostname
vm_ext_fqdn
vm0409vh01.softxs.ch
VM fully-qualified public hostname
Capistrano Custom Tasks
Task Name
Description
Top-Level Tasks
setup_env
Setup the application, site and instance settings for the installation
show_env
Display installation settings
setup_app_symlink
Setup application symlink, automatically called after deploy:setup
upload_database_yml
Install database.yml file
Deployment Tasks
deploy:populate
Pupulate application database (rake db:populate)
deploy:provision
Provision VM for application.
deploy:restart
Restart application (by touching tmp/restart.txt)
deploy:seed_fu
Seed the application database (rake db:seed_fu)
deploy:seed_fu_without_access_control
Seed V2 application database (rake db:seed_fu_without_access_control...
VM Provisioning Tasks
vagrant:setup
Setup Vagrant VM (create VM home dir and install Vagrant file)
vagrant:start
Start Vagrant VM (vagrant up)
vagrant:status
Display status of Vagrant VM
vagrant:stop
Stop Vagrant VM (vagrant halt)
VM Setup and Provisioning
to be completed
Application Deployment
Specific Instance Deployment
Generic Instance Deployment
Example Deployments
Example: Specific Development Instance
- Install git tree by hand
- Using webbrick as web server
- Capistrano to install site/instance specific files
- Can optionally run bundle and rake tasks
Example: Specific Production Instance
- Install git tree by hand
- Using pre-configured APache virtual host as web server
- Capistrano to install everything
- Setup of target environment: Mix of hand and automated steps
- Local git checkout and installation on server
- RRun bindle and rake tasks
Example Command Lines
- Install MAPS on zg-3.softxs.ch server:
cap -s app=maps -s site=proto -s instance=zg-3.softxs.ch \ deploy:setup deploy deploy:migrate deploy:start
- Install V2 on zg-3.softxs.ch server:
cap -s app=v2p0 -s site=proto -s instance=zg-3.softxs.ch \ deploy:setup deploy deploy:migrate deploy:seed_fu_without_access_control deploy:start
Example: Generic Production Instance
- Creating VM on virtual host
- Provisioning VM on virtual host
- Including creation of Apache virtual host
- Application installation
Note that DMS (re-)configuration is not included, this must be prepared separately, typically using Puppet. See:
Example Command Lines
- Setup a new VM and install V2 on it
- The virtual host for the MV is vh01.softxs.ch
- The new VM will have an internal IP address of 192.168.4.9
- The virtual hostname for accessing the application will be vm0401vh01.softxs.ch, which must be defined in advance in DNS
cap -v -s app=vagrant -s site=v2 -s instance=generic -s vh=1 -s vm=192.168.4.9 vagrant:setup vagrant:start cap -v -s app=v2p0 -s site=proto -s instance=generic -s vh=1 -s vm=192.168.4.9 deploy:provision cap -v -s app=v2p0 -s site=proto -s instance=generic -s vh=1 -s vm=192.168.4.9 \ deploy:setup deploy bundle:install deploy:migrate deploy:populate deploy:start