cbrunnkvist.ansistrano-symfony-deploy

ansistrano-symfony-deploy

Estado de Construcción

Un conjunto de tareas de Ansible para desplegar aplicaciones PHP desarrolladas con el framework Symfony (incl. flex) en servidores *nix de una manera similar a "Capistrano" (versiones, compartidas, actual->versiones/X).

Este rol es básicamente una colección de las tareas más comunes de configuración después de la instalación (es decir, obtener un ejecutable de Composer, instalar dependencias y autoload, realizar la precarga de caché, desplegar migraciones, etc.). No se encarga de establecer las estructuras de directorios ni de transferir archivos a tus servidores; esa parte la maneja el rol más genérico ansistrano-deploy.

La forma en que se implementa es definiendo algunas variables ansistrano_(before|after)_X (consulta la documentación de ansistrano para más detalles).

Requisitos

Debido a limitaciones en la versión actual de Ansible, es un requisito que ansistrano-symfony-deploy y ansistrano-deploy compartan el mismo directorio padre. Este será el caso normal, por lo que no debería ser un problema mientras lo instales a través de ansible-galaxy.

Las tareas probablemente no funcionen en hosts de Windows (no se ha probado).

Variables de Rol

Las variables defaults declaradas en este módulo:

symfony_env: prod
symfony_php_path: php # El ejecutable de PHP que se usará para todas las tareas de línea de comandos

symfony_console_path: 'app/console' # Si usas Symfony 3+, esto debería ser 'bin/console'

symfony_run_composer: true
symfony_composer_path: "{{ ansistrano_deploy_to }}/composer.phar"
symfony_composer_options: '--no-dev --optimize-autoloader --no-interaction'
symfony_composer_self_update: true # Siempre intenta una auto-actualización de composer
symfony_composer_version: 1.10.1 # Instala una versión específica de composer. Si esta variable no está establecida, se instalará la última versión estable

symfony_run_assets_install: true
symfony_assets_options: '--no-interaction'

symfony_run_assetic_dump: true
symfony_assetic_options: '--no-interaction'

symfony_run_cache_clear_and_warmup: true
symfony_cache_options: ''

###############################################################################
symfony_run_doctrine_migrations: false
symfony_doctrine_options: '--no-interaction'

symfony_run_mongodb_schema_update: false
symfony_mongodb_options: ''

Ganchos

Este rol soporta ganchos como los de ansistrano antes y después de cada tarea

ansistrano_symfony_before_composer_tasks_file
ansistrano_symfony_after_composer_tasks_file

ansistrano_symfony_before_assets_tasks_file
ansistrano_symfony_after_assets_tasks_file

ansistrano_symfony_before_assetic_tasks_file
ansistrano_symfony_after_assetic_tasks_file

ansistrano_symfony_before_cache_tasks_file
ansistrano_symfony_after_cache_tasks_file

ansistrano_symfony_before_doctrine_tasks_file
ansistrano_symfony_after_doctrine_tasks_file

ansistrano_symfony_before_mongodb_tasks_file
ansistrano_symfony_after_mongodb_tasks_file

Además de esto, consulta la lista de variables usadas por ansistrano.

Nota sobre migraciones de esquemas ORM/ODM

Las migraciones de esquemas de base de datos generalmente NO se pueden ejecutar en paralelo en múltiples hosts. Por esta razón, las opciones symfony_run_doctrine_migrations y symfony_run_mongodb_schema_update vienen desactivadas por defecto.

Para evitar la ejecución paralela, puedes hacer lo siguiente:

  1. Especifica tu propio ansistrano_before_symlink_tasks_file, quizás con el de este proyecto como plantilla (mira en cbrunnkvist.ansistrano-symfony-deploy/config/steps/).
  2. Elige uno de los siguientes enfoques:
  • (a) Organiza los hosts en grupos para que la tarea se ejecute solo en el primer host de algún grupo: cuando: groups['www-production'][0] == inventory_hostname
  • (b) Usa run_once: true, quizás con delegate_to: algún_host_principal (Docs: Delegación de Playbook)

Dependencias

Instalar desde la línea de comandos mediante ansible-galaxy install cbrunnkvist.ansistrano-symfony-deploy debería descargar el rol externo como dependencia, por lo que no es necesario ningún paso adicional.

Ejemplo de playbook

Como mínimo, probablemente necesites declarar las variables ansistrano_deploy_from y ansistrano_deploy_to en tu play. Ansistrano usa por defecto rsync desde un directorio local (nuevamente, consulta la documentación de ansistrano).

Supongamos que tienes un my-app-infrastructure/deploy.yml:

---
- hosts: all
  gather_facts: false
  vars:
    ansistrano_deploy_from: ../my-project-checkout
    ansistrano_deploy_to: /home/app-user/my-project-deploy/
    ansistrano_before_symlink_tasks_file: "{{playbook_dir}}/config/app_specific_setup.yml"
  roles:
    - cbrunnkvist.ansistrano-symfony-deploy

Este playbook debería ejecutarse como cualquier otro, es decir, ansible-playbook -i some_hosts_file deploy.yml.

Probablemente tenga sentido mantener tus tareas de preparación del sistema en un playbook separado, por ejemplo, my-app-infrastructure/setup.yml.

Licencia

MIT

Información del Autor

  • ansistrano-symfony-deploy, escrito por Conny Brunnkvist cbrunnkvist@gmail.com
  • El rol subyacente es mantenido por el equipo ansistrano-deploy
  • Parte del código fue tomado o inspirado por el rol symfony2-deploy del equipo de Servergrove.
Acerca del proyecto

Common post-deploy tasks for Symfony projects

Instalar
ansible-galaxy install cbrunnkvist.ansistrano-symfony-deploy
Licencia
mit
Descargas
43.6k
Propietario