2. ¿QUIÉN SOY YO?.
Pablo Braulio Escribá
Programador web desde 2003 y desde 2007 Symfony Fan Boy.
Email: brulics@gmail.com
Twitter: @brulics
Blog:
http://mimalamemoriadeprogramador.com
3. INDEX
1. Procedimiento de deploy,
2. ¿Como lo hacemos en Symfony?,
3. Herramientas,
4. Capifony,
5. DEPLOY!!!,
6. Ejemplo,
7. Aplausos o tomates y lechugas.
14. ¿COMO LO HACEMOS EN SYMFONY?
$ php symfony project:deploy production
15. ¿COMO LO HACEMOS EN SYMFONY?
$ composer search deploy
jordillonch/deploy-bundle A Symfony2 deploy bundle
hpatoio/deploy-bundle Brings Symfony 1.4 project:deploy command to Symfony2.
madalynn/plum-bundle A Symfony2 deploy bundle.
rizeway/anchour Toolkit for deploying web applications
ibrows/be-simple-deployment-bundle Symfony2 applications deployment made easy
madalynn/plum An object oriented deployer library
kachkaev/assets-version-bundle Automates the process of updating assets version in Symfony2 p
pomander/pomander Deployment for PHP
markguinn/silverstripe-deploytools Provides automated git deployment and (soon) assets/databa
kunstmaan/newrelicbundle This bundle adds support for NewRelic's named transactions to you Sy
janmarek/webloader Tool for loading or deploying CSS and JS files into web pages
amldigital/twitterfeed A quick and easy way to deploy a twitter feed on a website.
pomander/wordpress Pomander plugin to deploy and manage Wordpress sites
codeless/jugglecode A tool to manipulate PHP statements in scriptfiles
dg/ftp-deployment A tool for automated deployment of web applications to an FTP server.
18. HERRAMIENTAS.
Características:
No es un sistema de deploy,
Fácil,
Ejecución rápida,
"Rollback",
No es escalable,
No única ejecución,
No se pueden ejecutar pruebas.
http://git-scm.com
21. HERRAMIENTAS.
Características:
No es un sistema propio de deploy,
Requiere aprendizaje,
Escalable,
De ejecución "semi" rápida,
De ejecución única,
"Rollback",
"Tests",
Útil para arquitecturas complejas y levantar entornos,
https://puppetlabs.com
26. CAPIFONY
Para su instalación, vía RubiGems.
Para iniciar un proyecto:
$ sudo gem install capifony
$ cd /path_your_project
/path_your_project:~$ capifony .
[add] writing './Capfile'
[add] making directory './app/config'
[add] writing './app/config/deploy.rb'
[done] symfony 2 project capifonied!
$ tree
.
├── app
│ └── config
│ └── deploy.rb
└── Capfile
2 directories, 2 files
27. CAPIFONY
Contenido del fichero de configuración.
set :application, "set your application name here"
set :domain, "#{application}.com"
set :deploy_to, "/var/www/#{domain}"
set :app_path, "app"
set :repository, "#{domain}:/var/repos/#{application}.git"
set :scm, :git
# Or: `accurev`, `bzr`, `cvs`, `darcs`, `subversion`, `mercurial`, `perforce`, or `none`
set :model_manager, "doctrine"
# Or: `propel`
role :web, domain # Your HTTP server, Apache/etc
role :app, domain, :primary => true # This may be the same as your `Web` server
set :keep_releases, 3
# Be more verbose by uncommenting the following line
# logger.level = Logger::MAX_LEVEL
28. CAPIFONY
Tras configurar, preparamos el servidor.
$ cap deploy:setup
`-- /var/www/my-app.com
|-- current → /var/www/my-app.com/releases/20100512131539
|-- releases
| `-- 20100512131539
| `-- 20100509150741
| `-- 20100509145325
|-- shared
| `-- web
| `-- uploads
| `-- log
| `-- config
`-- parameters.yml
29. CAPIFONY
Estrategia de ejecución A:
De desarrollo a producción (via scm).
set :scm, :git
set :repository, "ssh-gitrepo-domain.com:/path/to/repo.git"
30. CAPIFONY
Estrategia de ejecución A:
Alternativa ligera.
No clona el repositorio en cada deploy. Actua mas rápido que
en la opción anterior.
set :deploy_via, :remote_cache
31. CAPIFONY
Estrategia de ejecución B:
De desarrollo a producción (vía copy).
set :scm, :git
set :repository, "file:///Users/deployer/sites/my-app"
set :deploy_via, :copy
32. CAPIFONY
Estrategia de ejecución B:
Alternativa ligera: capistrano_rsync_with_remote_cache
Instalación y configuración.
gem install capistrano_rsync_with_remote_cache
set :deploy_via, :rsync_with_remote_cache
33. CAPIFONY
Estrategia de ejecución B:
Instalación de vendors previamente en local.
set :scm, :git
set :repository, "file:///Users/deployer/sites/my-app"
set :deploy_via, :capifony_copy_local
set :use_composer, true
set :use_composer_tmp, true
34. CAPIFONY
Opciones de configuración de capistrano.
Usuario para la ejecución.
Usamos clave ssh.
Rama/tag de git.
set :user, "deployer"
ssh_options[:forward_agent] = true
set :branch, "v0.2.0"
35. CAPIFONY
Opciones de configuración de capistrano.
Uso de submodulos de git.
Especificamos otro puerto ssh.
No vamos a usar sudo en el servidor.
set :git_enable_submodules, 1
ssh_options[:port] = "22123"
set :use_sudo, false
36. CAPIFONY
Opciones de configuración de capistrano.
Mantener sólo un número de versiones.
Hay que usarlo con cap deploy:cleanup
set :keep_releases, 3
37. CAPIFONY
Opciones de configuración para symfony2.
Poner archivos y directorios compartidos con las versiones.
Instalamos los vendors con composer o actualizamos
(¡¡cuidadín!!).
set :shared_files, ["app/config/parameters.yml"]
set :shared_children, [app_path + "/logs", web_path + "/uploads", "vendor"]
set :use_composer, true
set :update_vendors, true
38. CAPIFONY
Opciones de configuración para symfony2.
ORM, por defecto doctrine.
Directorios app y web.
Uso de AsseticBundle.
set :model_manager, "propel"
set :app_path, "my_app"
set :web_path, "my_web"
set :dump_assetic_assets, true