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.
- Git
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.
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
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 [email protected]
ssh-keygen
cat ~/.ssh/id_rsa.pub
Pour la commande ssh-keygen
, utiliser les valeurs par défaut.
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
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/
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
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).
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
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