Capifony: Capistrano, Git et symfony
Suite à l’article publié sur le blog de SimpleIT, il y a plusieurs mois, et après avoir remplacé mon fidèle Zend Frameworks par symfony, je me suis penché sur capistrano.
Voici l’article en question : http://www.simple-it.fr/blog/index.php?post/2010/08/20/Mise-en-ligne-des-nouveautes-du-SdZ-avec-Capistrano.
Je me suis donc penché sur le problème et après plusieurs recherches je suis tombé sur Capifony.
En effet, Capistrano est à la base réalisé pour déployer des applications RoR et non symfony.
Un groupe de développeurs a donc adapté cet outil, afin de le rendre utilisable rapidement avec nos projets symfony.
Vous pouvez trouver la page github de Capifony à cette adresse : https://github.com/everzet/capifony
J’ai trouvé un excellent tutoriel réalisé par un des auteurs du projet : http://blog.servergrove.com/2010/07/12/symfony-git-capistrano-capifony/.
J’ai adapté la première moitié et je vous l’ai traduite, mais je n’ai pas eu le courage de m’occuper de la deuxième moitié qui est déjà suffisamment claire et bien faite.
Installation
Capifony est basé sur capistrano qui est codé en ruby, il vous faudra donc ruby et gem d’installés.
Sous Mac, il suffit de lancer sudo gem update –system.
Pour installer capifony, lancez simplement :
Cette commande installera capifony sur votre ordinateur local. (Capifony doit être installé sur votre machine de travail, inutile de l’installer sur vos serveurs).
Mise en place du projet symfony
Ajoutez ces lignes au .gitignore pour exclure les liens symboliques, les configurations de base de données, le cache, les backups, uploads & log de votre dépôt git:
Faisons notre premier commit :
Librairie symfony avec le projet
Ajout des sources de symfony au projet
Deux possiblités s’offrent à nous :
- soit on télécharge les sources depuis le dépot subversion, mais l’ensemble du frameworks sera recopié à chaque déploiement.
- soit on télécharge les sources depuis un mirroir git en tant que submodule, ce qui permettra un gain de temps lors du déploiement, car le frameworks ne sera pas copié.
Dans les deux cas, la synchronisation depuis le dépot subversion ou le dépot git sont aisées.
Synchronisation subversion
|
|
Synchronisation Git
Nous utiliserons le dépôt git reconnu par l’auteur du tutoriel d’origine, mais ce dépôt n’est plus synchronisé sur le subversion de symfony depuis quelques temps. Rien ne vous empêche de créer votre propre dépôt et de le synchroniser celui-ci sur le dépôt subversion via git-svn.
EDIT: Il existe maintenant un dépot git officiel maintenu par SensioLabs.
|
|
Poussons notre projet local sur le dépôt distant
Configuration
Now is the time to play with capifony itself. First of all, lets “capifony” our project:
Capifony created Capfile
and config/deploy.rb
. Go into config/deploy.rb
and edit it’s variables. To set capistrano config variables, you need to call set :var_name, “var_value”
instruction inside deploy.rb
. Below is the list of main variables:
:application
– set your application name here (“demo” in our case);:domain
– domain of our remote server. This variable will be auto-populated with#{application}.com
(demo.com in our case). Place your server address here if it’s notdemo.com
. I set it to#{application}.everzet.com
, because my test host is http://demo.everzet.com;:deploy_to
– path, where we will deploy our application (in most cases/var/www/#{domain}
);:repository
– path to repository (#{domain}:/var/repos/#{application}.git
in our case);:scm
– source code management tool. In our case set it to:git
, but it can be any ofaccurev
,bzr
,cvs
,darcs
,subversion
,mercurial
,perforce
,subversion
or evennone
;:use_sudo
– set tofalse
, because we doesn’t need sudo during our deployment process;:deploy_via
– set it to:remote_cache
, so deployments will last less time;:git_enable_submodules
– set it to1
if you have submodules in project (if you staged symfony as submodule for example);
Also add this line to config/deploy.rb
:
if you want to use your local SSH key instead of remote one for git checkout.
Your resulting config/deploy.rb
is must be something like this:
Deployment
To start, we need to know 3 basic capistrano commands:
cap deploy:setup
– create directories on server;cap deploy:cold
– copy code, build database, make symlinks;cap deploy
– copy code, make symlinks.
Now run:
Now lets deploy our application for the first time:
If you’ve configured your remote server hosts right, you now can open http://your.remote.host/main & see you symfony application there.
Deploy & Rollback
Now what if we change something, deployed it and it’s broke our site? Lets break something!
Now deploy this bug:
and try to open http://your.remote.host/main. Oh, no! Something broke. What to do? Simple! Run:
|
|
and capistrano will roll your server back to previous working version of project and you will be able to find, fix, push and deploy the bugfix later, without problems.
Edit: Si vous n’avez toujours pas compris le fonctionnement de Capifony ou son utilité je vous recommande d’aller lire cet article : http://tech.joro.fr/capifony-explique-a-nos-clients/.
Si vous recontrez des soucis, peut-être que cet article vous aidera à les résoudre: http://tech.joro.fr/retour-dexperience-capifony/.