Skip to content

Instantly share code, notes, and snippets.

@2ec0b4
Last active January 9, 2018 09:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 2ec0b4/46118c4be3c02acc5278c0b535295ead to your computer and use it in GitHub Desktop.
Save 2ec0b4/46118c4be3c02acc5278c0b535295ead to your computer and use it in GitHub Desktop.
Déploiement avec Capistrano

Déploiement avec Capistrano

Le déploiement est lancé depuis une box Vagrant disposant de Ruby >= 2.0. Dans le gestionnaire de paquets RubyGem, il faut penser à ajouter capistrano.

Configuration sur le serveur distant

Pré-requis

  • Git

Utilisateur pour le déploiement

Un utilisateur est à créer sur le serveur distant et qui sera utilisé pour le déploiement. Admettons que l'utilisateur à créer se nomme usr-deploy, voici les commandes à exécuter pour le créer, en root :

#!bash
adduser usr-deploy
passwd usr-deploy

La commande adduser crée l'utilisateur. La seconde commande avec passwd permet de spécifier le mot de passe.

Permissions avec le serveur Web

Les répertoires et fichiers créés au moment du déploiement appartiennent à l'utilisateur usr-deploy et au groupe usr-deploy. Pour éviter des problèmes de permission, il peut être intéressant d'ajouter l'utilisateur usr-deploy au groupe du serveur Web et, inversement, l'utilisateur du serveur Web au groupe usr-deploy.

Pour connaitre l'utilisateur utilisé par le serveur Web :

#!bash
HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`; echo $HTTPDUSER;

puis

#!bash
usermod -a -G $HTTPDUSER usr-deploy
gpasswd -a $HTTPDUSER usr-deploy

La première commande ajoute usr-deploy au groupe du serveur Web. La seconde, l'utilisateur du serveur Web au groupe usr-deploy.

Puis redémarrez le serveur Web :

#!bash
service apache2 reload

Autoriser l'accès au repo Bitbucket

Pour le déploiement, l'utilisateur usr-deploy, depuis le serveur distant, doit pouvoir récupéré les fichiers du repo sur Bitbucket.

Connecté en tant que usr-deploy sur le serveur distant, il faut copier sa clé ssh dans les clés de déploiement du repo Bitbucket :

#!bash
ssh git@bitbucket.org
ssh-keygen
cat ~/.ssh/id_rsa.pub

Pour la commande ssh-keygen, utiliser les valeurs par défaut.

Structure Capistrano

Capistrano utilise une structure spécifique : http://capistranorb.com/documentation/getting-started/structure/ Le répertoire current/, servi par le serveur Web, pointe sur le dernier répertoire (en date) de release/. Des fichiers et des répertoires du projet sont liés avec des fichiers et des répertoires du répertoire shared/. En utilisateur root :

#!bash
deploy_to=/path/to/folder
mkdir -p ${deploy_to}
chown usr-deploy:usr-deploy ${deploy_to}
umask 0002
chmod g+s ${deploy_to}
mkdir ${deploy_to}/{releases,shared}

Ensuite, il faut créer la configuration spécifique à la plateforme, qui sera conservée entre chaques releases. Par exemple, dans le cas d'un projet CakePHP, il faut créer le fichier de configuration shared/app/config/app.php.

Puis :

#!bash
chown -R usr-deploy ${deploy_to}/{releases,shared}
chmod -R g+w ${deploy_to}/shared

Configuration dans le projet

Depuis la box Vagrant, exécuter la commande qui initialise la configuration Capistrano du projet :

#!bash
cd /var/www/ && cap install

Cette commande a pour action de créer le fichier Capfile et le répertoire config/ contenant les éléments de configuration pour le déploiement du projet.

Il est maintenant nécessaire de procéder à la configuration du déploiement http://capistranorb.com/documentation/getting-started/configuration/

Paquets complémentaires

Des paquets complémentaires peuvent être installés à la box Vagrant pour exécuter des recettes supplémentaires. Ils sont à inclure dans le fichier Capfile et leur comportement est à définir dans les fichiers de configuration de Capistrano.

Exemple : https://github.com/capistrano/composer

Tâches personnalisées

Des tâches supplémentaires peuvent être ajoutées dans le répertoire lib/capistrano/tasks (relatif au fichier Capfile), avec des fichiers au format .rake (Ruby Make).

Comment déployer

Depuis la box Vagrant, copier la clé ssh vers le serveur distant :

#!bash
ssh-copy-id usr-deploy@[serveur_distant]

Vous devriez pouvoir vous connecter sans spécifier de mot de passe :

#!bash
ssh usr-deploy@[serveur_distant]

Une fois que cela est fonctionnel, depuis la box Vagrant :

#!bash
cap [stage] deploy

Où [stage] est à remplacer avec le nom de la configuration que vous souhaitez utiliser.

Et au cas où on est de besoin de revenir en arrière :

#!bash
cap [stage] deploy:rollback

Déboguer le déploiement

Par défaut, le niveau de journalisation :log_level est à :debug mais peut avoir été modifié.

Au moment de lancer le déploiement, il y a également la possibilité d'obtenir la trace complète :

#!bash
cap [stage] deploy --trace
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment