Capistrano est un outil qui va vous permettre d'automatiser des tâches serveur, mais surtout de déployer simplement vos applications. Même si il est développé en Ruby il est tout à fait possible de l'utiliser pour déployer des applications qui n'utilisent pas ce langage.
Installation
Pour commencer à utiliser capistrano dans un projet il faut commencer par le capifier. Pour cela on va créer un fichier Gemfile à la racine de notre projet qui va stocker les dépendances Ruby.
group :development do
gem "capistrano", "~> 3.4"
end
Puis on lance l'installation de ces dernières
bundle install
Et enfin on capifie notre projet
bundle exec cap install
Configuration
La commande cap install
va créer la structure suivante
├── Capfile
├── config
│ ├── deploy
│ │ ├── production.rb
│ │ └── staging.rb
│ └── deploy.rb
└── lib
└── capistrano
└── tasks
- Le fichier deploy.rb va contenir les différentes variables de configuration pour notre déploiement (quel système de versionning est utilisé, dans quel dossier on va déployer....)
- Le dossier
tasks
va accueillir les différentes taches que nous souhaitons faire exécuter par notre serveur (il est vide par défaut). - Le dossier
deploy
contient la configuration de nos différents environnements de déploiement. A l'intérieur on y retrouve la liste des serveurs correspondant à chaque environnement.
Déployer avec Capistrano
Par défaut capistrano est livré avec une série de séries de tâches liées au déploiement d'application. Pour obtenir une liste des tâches disponible, il suffit d'utiliser la commande
cap -T
Pour déployer une application, il suffit d'appeler la tache déploiement
cap production deploy
Cette commande va utiliser la configuration définie dans le deploy.rb et créer une structure de déploiement propre
├── current -> /var/www/my_app_name/releases/20150100093500/
├── releases
│ ├── 20150080072500
│ ├── 20150090083000
│ ├── 20150100093500
├── repo
│ └── <VCS related data>
├── revisions.log
└── shared
└── <linked_files and linked_dirs>
Quelques recettes toutes faites
Si vous utilisez des Frameworks connus et répandus, il y a des recettes toutes faites qui vous permettront de mettre en place rapidement le déploiement de votre application sans avoir à créer une tonne de taches.
Ruby on Rails
- capistrano-rvm, permet de gérer différentes versions de ruby
- capistrano-rails, contient tout un tas de recettes pour déployer une application rails (migration, assets...)
- capistrano3-puma, permet de déployer simplement une application rails sur nginx en générant une configuration basée sur Puma
- capistrano-passenger, permet de déployer une application sur un hébergeur utilisant passenger (actualisation du fichier restart.txt)
Symfony
- capistrano/symfony, permet de déployer simplement une application symfony en utilisant composer
Il y a aussi des recettes pour vous notifier lors du déploiement :
- capistrano/notifier/mail
- capistrano-nc/nc pour des notifications sur Mac OS
Après n'hésitez pas à faire un petit tour sur le dépôt de Capistrano ou à vous rendre sur rubygems pour avoir quelques exemples d'extensions.