![Page 2: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/2.jpg)
Rodolfo RipadoDéveloppeur PHP depuis 6 ans
Membre actif de la communauté Drupal
Son dada : l'Industrialisation/DevOps/Automation
Consultant Drupal chez Alter Way
![Page 3: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/3.jpg)
![Page 4: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/4.jpg)
Qu'est-ce que Capistrano ?Moteur d'exécution de tâches à distance
Connections via SSH
Execution en parallèle
(S')écrit en ruby
Open-source ( )et bien documenté ( )
Mais ... à quoi ça sert, en gros ?
GitHubCapistranorb.com
![Page 5: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/5.jpg)
Déploiement Continu
![Page 6: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/6.jpg)
pour la petite histoire ...
![Page 7: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/7.jpg)
Installer Capistrano : dépendancesSur la machine locale :
Ruby (incl. rubygems)
Client SSH
Sur les machines cible :Server SSH (compatible OpenSSH)
Environnement Linux-like
![Page 8: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/8.jpg)
Installer Capistrano : sur Ubuntu
![Page 9: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/9.jpg)
Capfile
Tâches
Actions
Rôles
Variables
Les concepts de baseFichier de configuration avec la définition destâches et leurs variables de configuration. Appeléaussi la "recipe".
Un groupe d'actions.
Opérations à effectuer sur un ensemble deserveurs.
Un groupe de serveurs.
Définissent les paramètres de connexion, lesaccès VCS, etc.
![Page 10: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/10.jpg)
L'exemple habituel : Hello World!set :user, "vagrant"
desc "My remote hello world task."task :hello_world, :hosts => ["misc.vt", "ddev.vt"] do run "echo 'Hello World'"end
![Page 11: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/11.jpg)
Les variablesPour manipuler des variables :set(), unset(), exists(), ...
# This is ruby, so this :set :user, "vagrant"
# is the same as this :set(:password, "vagrant")
![Page 12: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/12.jpg)
Quelques unes des variables disponibles
Il y en a plein d'autres :
# SSH connection parametersset :user, "vagrant"set :password, "vagrant"
set :ssh_options, { 'port': 8881,}
set :default_environment, { 'ENVVAR' => 'somevalue',}
# Set a gateway thought which to tunnel the connectionsset :gateway, "www.mygateway.org"
2.x Significant Configuration Variables
![Page 13: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/13.jpg)
Les roles et les serversrole(name, *servers, attributes={}, &block)
server(host, *roles, attributes={})
set :user, "vagrant"
#Set 2 roles : web and db serversrole :web, "server1.com", "server2.com"role :web, "server3.com", :master => truerole :db, "server4.com", "server5.com"
#Add a server to both rolesserver "server6.com", :db, :web
desc "My remote hello world task on the master web server only."task :hello_world, :roles => :web, :only => {:master => true} do run "echo 'Hello World'"end
![Page 14: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/14.jpg)
Les actions : exécution de commandesrun(cmd, options={}, &block)
Execute cmd en parallèle sur un ensemble de serveurs
L'alternative run_locally permet d'exécuter une commande
localement
sudo(options={})
Retourne une string pour composer des commandes sudo
run "someCommand someParam", :roles => :webrun "someCommand someParam", :once => true
run "#{sudo :as => 'manuel'} someCommand someParam"
![Page 15: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/15.jpg)
Les actions : transfert de donnéesput(data, path, options={})
get(from, to, options={}, &block)
upload(from, to, options={}, &block)
download(from, to, options={}, &block)
put "file contents", "/etc/someapp/config", :roles => :web
get "/etc/someapp/config", "downloads/someapp_config"
upload "data/someDir", "/var", :recursive => true
download "/var/someDir", "/data/someDir/$CAPISTRANO:HOST$"
![Page 16: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/16.jpg)
Les tâchestask(name, options={}, &block)
before(task_name, *tasks, &block)
after(task_name, *tasks, &block)
desc "Saying hello is easy."task :hello_world, :roles => :web do run "#{sudo} service apache2 stop" run "#{sudo} service apache2 start"end
after :hello_world, :myNameIs
after :hello_world do run "echo 'Goodbye all.'"end
![Page 17: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/17.jpg)
Les namespacesnamespace(name, &block)
# Namespaces allow you to group your tasksnamespace :deploy do task :hello_world, :roles => :web do #some commands endend
# You can reopen a namespace anytime. You can# override previously defined tasks and/or add new ones.namespace :deploy do task :my_name_is, :roles => :web do #some commands endend
![Page 18: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/18.jpg)
Contrôle d'exécutionQue fait-on si une commande échoue ?transaction(&block)
on_rollback(&block)
# Déployer une nouvelle version de l'applicationtask :deploy do transaction do update_code endend
# Placer une nouvelle version du code dans un nouveau répertoiretask :update_code do on_rollback do run "rm rf #{release_path}" end source.checkout(release_path)end
![Page 19: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/19.jpg)
Les composants de nos Recipes :Variables de configuration
Serveurs, rôles, attributs
Actions
Transactions, Tâches, Namespaces
![Page 20: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/20.jpg)
Railsless-deployUne recipe générique de déploiement :
Installation via Rubygems :
Et dans note Capfile :
# Include the alternative deploy recepyrequire 'rubygems'require 'railslessdeploy'
# Custom definitions here
![Page 21: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/21.jpg)
Les tâches par défaut :user@server:~/cap T
[...]
cap deploy # Deploys your project.
cap deploy:cleanup # Clean up old releases.
cap deploy:pending # Displays the commits since your last deploy.
cap deploy:pending:diff # Displays the ̀diff' since your last deploy.
cap deploy:rollback # Rolls back to a previous version and restarts.
cap deploy:rollback:code # Rolls back to the previously deployed version.
cap deploy:setup # Prepares one or more servers for deployment.
cap deploy:symlink # Updates the symlink to the most recently ...
cap deploy:update # Copies your project and updates the symlink.
cap deploy:update_code # Copies your project to the remote servers.
[...]
![Page 22: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/22.jpg)
Comment ça marche ?Sur le(s) serveur(s) cible :
Il faudra définir :La stratégie de déploiment
Le système de contrôle de version utilisé
Et un tas de petites choses ...
[deploy_to][deploy_to]/releases/20080819001122[deploy_to]/releases/...[deploy_to]/shared/...[deploy_to]/current > [deploy_to]/releases/20100819001122
![Page 23: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/23.jpg)
Un Capfile simple :require "rubygems"require "railslessdeploy"
role :web, "webserver"
set :user, "vagrant"
# Required : used for all sorts of default valuesset :application, "MyApplication"
# Requires : The repository from which to checkout the application codeset :repository, "git://github.com/someone/somerepo"
# The VCS identifiersset :scm, :gitset :scm_user, "me"
# The deployment strategy# Possible values : copy, checkout, export, remote_cache, ...set :deploy_via, :remote_cacheset :copy_exclude, "someDir/nonWebData"
# The deployment base directoryset :deploy_to, "/var/www/#{application}"
![Page 24: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/24.jpg)
![Page 25: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/25.jpg)
Démo !
![Page 26: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/26.jpg)
L'interface web : WebistranoApplication RoR, installable via bundler
Disponible sur GitHub :
Comment faire :
Utile mais ...
Très spécifique RoR.
Plus maintenue ?
De nombreux forks "vivants" existent...
https://github.com/peritor/webistrano
Web Application DeploymentUsing Webistrano and Capistrano
![Page 27: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/27.jpg)
Alternatives à WebistranoStrano
Disponible sur
Toujours en Ruby/RoR
Pour des déploiments à partir de Gitub
Plus d'infos :
JenkinsEnvisageable si vous l'utilisez déjà pour l'IC de vos projets
GitHub
http://developwithstyle.com/strano
![Page 28: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/28.jpg)
Extensions à CapistranoCapistrano Multistage
Définition de roles et serveurs par stage
Fait désormais partie de Capistrano.
CapifonyInstallation via Rubygems
Tâches, variables et répertoires conçus
pour déployer des projets Symfony 1 & 2.
Plus d'informations :
user@server:~/cap production deploy
http://capifony.org/
![Page 29: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/29.jpg)
Extensions à CapistranoDrupal
Disponible sur GitHub :
Et autres encore :
https://github.com/gaspaio/Drupal-Capistrano-Deploy
capcake
capistrano_rsync_with_remote_cache
capistrano-deploytags
capistrano-windows-server
![Page 30: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/30.jpg)
Vous n'aimez vraiment pas Ruby ? :-(
Une alternative solide, en Python.
Sur GitHub :
Crée par Rasmus Lerdorf pour les besoins de .
Clone simplifié de Capistrano en PHP.
Aucun commit fait depuis 2 ans.
Et autres encore : , ,
Fabricfrom fabric.api import env, run
def set_hosts(): env.hosts = ['host1', 'host2']
def mytask(): run('ls /var/www')
https://github.com/fabric/fabric
Ploy & WePloyWePay
Control Tier Func Mcollective
![Page 31: Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012](https://reader031.vdocuments.site/reader031/viewer/2022020122/548299f6b47959dd0c8b487d/html5/thumbnails/31.jpg)
Merci !Des questions ?
Retrouver les slides :
Me suivre :
Me joindre :
http://www.slideshare.net/rodolforipado
@gaspaio