Pour débuter
Outils de base
VIM
06 min
SSH
14 min
rsync
20 min
Shell fish
13 min
Serveur HTTP
Apache
40 min
Nginx
30 min
PHP
NodeJS
Base de données
MySQL
15 min
Redis
08 min
Emails
HTTPS
FTP
ProFTPD
14 min
Sécurité
Pour le confort
Déploiement

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 :

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.