Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012
Upcoming SlideShare
Loading in...5
×
 

Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012

on

  • 5,316 views

Version HTML accessible à http://gaspaio.github.com/capistranoPHPTour2012 ...

Version HTML accessible à http://gaspaio.github.com/capistranoPHPTour2012

Capistrano est un outil de gestion de tâches optimisé pour le déploiement continu.

Bien qu'écrit en Ruby et développé initialement pour les besoins des applications Ruby On Rails, Capistrano est actuellement assez mur pour déployer tout type d'applications Web, dont celles en PHP.

Il s'agit peut-être même du meilleur outil disponible pour le faire. Cette présentation propose d'explorer les fonctionnalités qui font de Capistrano un tel outil d'exception pour les déploiements PHP.

Statistics

Views

Total Views
5,316
Views on SlideShare
4,427
Embed Views
889

Actions

Likes
3
Downloads
31
Comments
0

2 Embeds 889

http://news.humancoders.com 880
https://twitter.com 9

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012 Capistrano : un outil pour déployer vos applications PHP | PHP Tour Nantes 2012 Presentation Transcript

  • Capistrano Un outil pour déploier vos applications PHPRodolfo Ripadorodolfo.ripado@alterway.fr
  • Rodolfo Ripado Développeur PHP depuis 6 ans Membre actif de la communauté Drupal Son dada : lIndustrialisation/DevOps/Automation Consultant Drupal chez Alter Way
  • Quest-ce que Capistrano ? Moteur dexécution de tâches à distance Connections via SSH Execution en parallèle (S)écrit en ruby Open-source ( GitHub ) et bien documenté ( Capistranorb.com )Mais ... à quoi ça sert, en gros ?
  • Déploiement Continu
  • pour la petite histoire ...
  • Installer Capistrano : dépendances Sur la machine locale : Ruby (incl. rubygems) Client SSH Sur les machines cible : Server SSH (compatible OpenSSH) Environnement Linux-like
  • Installer Capistrano : sur Ubuntu
  • Les concepts de baseCapfile Fichier de configuration avec la définition des tâches et leurs variables de configuration. Appelé aussi la "recipe".Tâches Un groupe dactions.Actions Opérations à effectuer sur un ensemble de serveurs.Rôles Un groupe de serveurs.Variables Définissent les paramètres de connexion, les accès VCS, etc.
  • Lexemple habituel : Hello World!st:sr vgat e ue,"arn"ds M eoehlowrdts. ec"yrmt el ol ak"ts hlowrd hss= "icv" de.t]d ak:el_ol,:ot >[ms.t,"dvv" o rn"coel ol  u eh HloWrd"ed n
  • Les variablesPour manipuler des variables :st) ne(,eit(,.. e(,ust) xss) .           #Ti srb,s hs:  hsi uy oti st:sr vgat e ue,"arn"#i h aea hs:  stesm sti st:asod vgat) e(pswr,"arn"
  • Quelques unes des variables disponibles#SHcneto aaees  S oncinprmtrst:sr vgat e ue,"arn"st:asod vgat e pswr,"arn"st:s_pin,{ e shotos  ot:88,  pr 81}st:eal_niomn,{ e dfutevrnet  NVR >oeau  EVA= smvle,}#Stagtwytogtwiht unltecnetos  e  aea huh hc otne h oncinst:aea,"w.yaea.r" e gtwy wwmgtwyog Il y en a plein dautres : 2.x Significant Configuration Variables
  • Les roles et les servers rl(ae sres trbts{,&lc) oenm,*evr,atiue=} bok sre(ot rls trbts{) evrhs,*oe,atiue=}st:sr vgat e ue,"arn"#e  oe  e n bsres St2rls:wbadd evrrl wb sre1cm,"evr.o" oe:e,"evr.o" sre2cmrl wb sre3cm,:atr= re oe:e,"evr.o" mse >turl d,"evr.o" sre5cm oe:b sre4cm,"evr.o"#d  evrt ohrls Adasre obt oesre sre6cm,:b wb evr"evr.o" d,:eds M eoehlowrdts ntemse e evrol. ec"yrmt el ol ako h atrwbsre ny"ts hlowrd rls= wb ol >{mse >tu}d ak:el_ol,:oe >:e,:ny= :atr= re o rn"coel ol  u eh HloWrd"ed n
  • Les actions : exécution de commandes rncd pin=} bok u(m,otos{,&lc) Execute cmd en parallèle sur un ensemble de serveurs rn"oeomn oeaa" rls= wb u smCmadsmPrm,:oe >:e rn"oeomn oeaa" oc >tu u smCmadsmPrm,:ne= re Lalternative r n l c l ypermet dexécuter une commande u_oal localement sd(pin=} uootos{) Retourne une string pour composer des commandes sudo rn"{uo:s= mne oeomn oeaa" u #sd a >aul}smCmadsmPrm
  • Les actions : transfert de données ptdt,pt,otos{) u(aa ah pin=} pt"iecnet" /t/oep/ofg,:oe >:e u fl otns,"ecsmapcni" rls= wb gtfo,t,otos{,&lc) e(rm o pin=} bok gt"ecsmapcni" dwlassmapcni" e /t/oep/ofg,"onod/oep_ofg ula(rm o pin=} bok podfo,t,otos{,&lc) ula dt/oei" /a" rcrie= re pod"aasmDr,"vr,:eusv >tu dwla(rm o pin=} bok onodfo,t,otos{,&lc) dwla /a/oei" /aasmDr$AITAOHS$ onod"vrsmDr,"dt/oei/CPSRN:OT"
  • Les tâches ts(ae pin=} bok aknm,otos{,&lc) ds Syn el ses. ec"aighloi ay" ts hlowrd rls= wbd ak:el_ol,:oe >:e o  rn"{uo evc pce tp  u #sd}srieaah2so"  rn"{uo evc pce tr"  u #sd}srieaah2sat ed n bfr(aknm,*ak,&lc) eoets_ae tss bok atrts_ae tss bok fe(aknm,*ak,&lc) atr:el_ol,:yaes fe hlowrd mNmI atr:el_ol o fe hlowrdd  rn"coody l."  u eh Gobeal ed n
  • Les namespaces nmsaenm,&lc) aepc(ae bok#Nmsae lo o ogopyu ak  aepcsalwyut ru ortssnmsae:elyd aepc dpo o ts hlowrd rls= wbd  ak:el_ol,:oe >:e o  #oecmad   sm omns ed  ned n#Yucnroe  aepc ntm.Yucn  o a epnanmsaeayie o a#oerd rvosydfndtssado d e ns  vriepeiul eie ak n/radnwoe.nmsae:elyd aepc dpo o ts m_aei,:oe >:e o  ak:ynm_s rls= wbd  #oecmad   sm omns ed  ned n
  • Contrôle dexécutionQue fait-on si une commande échoue ? tascin&lc) rnato(bok o_olak&lc) nrlbc(bok#Dpoe n ovlevrind plcto  élyruenuel eso elapiaints dpo o ak:elyd tascind  rnato o  udt_oe   paecd ed  ned n#Pae n ovlevrind oedn nnueurpror  lcruenuel eso ucd asu ova éetiets udt_oed ak:paecd o o_olakd  nrlbc o  rn"m­f#rlaept}   u r r {ees_ah" ed  n suc.hcotrlaept)  oreceku(ees_ahed n
  • Les composants de nos Recipes : Variables de configuration Serveurs, rôles, attributs Actions Transactions, Tâches, Namespaces
  • Railsless-deployUne recipe générique de déploiement : Installation via Rubygems : Et dans note Capfile :#Icueteatraiedpo eey  nld h lentv elyrcprqieuyes eur rbgmrqiealls­ely eur risesdpo#Cso eiiin ee  utmdfntoshr
  • Les tâches par défaut :ue@evr~cp­ srsre:/a T[.] ..cpdpo         ely orpoet a ely       #Dposyu rjc.cpdpo:lau     la podrlae. a elycenp   #Cenu l eesscpdpo:edn     ipastecmissneyu atdpo. a elypnig   #Dsly h omt ic orls elycpdpo:edn:if  ipaste`if ic orls ely a elypnigdf #Dsly h dfsneyu atdpo.cpdpo:olak    ol akt  rvosvrinadrsat. a elyrlbc   #Rlsbc oapeiu eso n etrscpdpo:olakcd  ol akt h rvosydpoe eso. a elyrlbc:oe#Rlsbc otepeiul elydvrincpdpo:eu      rprsoeo oesresfrdpomn. a elystp    #Peae n rmr evr o elyetcpdpo:yln     pae h yln otems eety.. a elysmik   #Udtstesmikt h otrcnl .cpdpo:pae     oisyu rjc n pae h yln. a elyudt    #Cpe orpoetadudtstesmikcpdpo:paecd   oisyu rjc otermt evr. a elyudt_oe #Cpe orpoett h eoesres[.] ..
  • Comment ça marche ? Sur le(s) serveur(s) cible : [elyt] dpo_o [elyt]rlae/0889012 dpo_o/eess2001012 [elyt]rlae/. dpo_o/eess.. [elyt]sae/. dpo_o/hrd.. [elyt]cret­ dpo_o/eess21010 dpo_o/urn >[elyt]rlae/0089 012 12 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 ...
  • Un Capfile simple :rqie"uyes eur rbgm"rqie"alls­ely eur risesdpo"rl wb wbevr oe:e,"esre"st:sr vgat e ue,"arn"#Rqie  sdfralsrso eal aus  eurd:ue o l ot fdfutvlest:plcto,"yplcto" e apiain MApiain#Rqie  h eoioyfo hc oceku h plcto oe  eurs:Terpstr rmwiht hcotteapiaincdst:eoioy gt/gtu.o/oen/oeeo e rpstr,"i:/ihbcmsmoesmrp"#TeVSietfes  h C dniirst:c,:i e sm gtst:c_sr m" e smue,"e#Tedpomn taey  h elyetsrtg#Psil aus:cp,ceku,epr,rmt_ah,..  osbevle  oy hcot xot eoecce .st:elyva rmt_ah e dpo_i,:eoeccest:oyecue smDrnneDt" e cp_xld,"oei/oWbaa#Tedpomn aedrcoy  h elyetbs ietrst:elyt,"vrww#apiain" e dpo_o /a/w/{plcto}
  • Démo !
  • Linterface web : Webistrano Application RoR, installable via bundler Disponible sur GitHub : https://github.com/peritor/webistrano Comment faire : Web Application Deployment Using Webistrano and Capistrano Utile mais ... Très spécifique RoR. Plus maintenue ? De nombreux forks "vivants" existent...
  • Alternatives à Webistrano Strano Disponible sur GitHub Toujours en Ruby/RoR Pour des déploiments à partir de Gitub Plus dinfos : http://developwithstyle.com/strano Jenkins Envisageable si vous lutilisez déjà pour lIC de vos projets
  • Extensions à Capistrano Capistrano Multistage Définition de roles et serveurs par stage ue@evr~cppouto ely srsre:/a rdcindpo Fait désormais partie de Capistrano. Capifony Installation via Rubygems Tâches, variables et répertoires conçus pour déployer des projets Symfony 1 & 2. Plus dinformations : http://capifony.org/
  • Extensions à Capistrano Drupal Disponible sur GitHub : https://github.com/gaspaio/Drupal-Capistrano-Deploy Et autres encore : capcake capistrano_rsync_with_remote_cache capistrano-deploytags capistrano-windows-server
  • Vous naimez vraiment pas Ruby ? :-( Fabric fo arcaiipr n,rn rmfbi.p motev u Une alternative solide, en Python. dfsthss) e e_ot(: Sur GitHub :   evhss=[hs1,ot   n.ot  ot hs2] https://github.com/fabric/fabric dfmts(: e yak)   rns/a/w   u(l vrww) Ploy & WePloy Crée par Rasmus Lerdorf pour les besoins de WePay . Clone simplifié de Capistrano en PHP. Aucun commit fait depuis 2 ans. Et autres encore : Control Tier , Func , Mcollective
  • Merci !Des questions ? Retrouver les slides : http://www.slideshare.net/rodolforipado Me suivre : @gaspaio Me joindre : rodolfo.ripado@alterway.fr ggaspaio@gmail.com