cbrunnkvist.ansistrano-symfony-deploy
ansistrano-symfony-deploy
Un ensemble de tâches Ansible pour déployer des applications PHP développées avec le framework Symfony (incl. flex) sur des serveurs *nix de manière "Capistrano" (versions, partagé, actuel->versions/X).
Ce rôle est essentiellement une collection des tâches d'installation les plus courantes (c'est-à-dire obtenir un exécutable Composer, installer des dépendances et un autoloader, effectuer la mise en cache, déployer des migrations, etc.). Il ne traite pas de la mise en place des structures de répertoire ni du transfert de fichiers sur vos serveurs, cette partie étant gérée par le rôle plus générique ansistrano-deploy
.
La manière dont cela est mis en œuvre est en définissant quelques variables ansistrano_(before|after)_X
(voir la documentation d'ansistrano pour plus de détails).
Exigences
En raison des limitations de la version actuelle d'Ansible, il est nécessaire que ansistrano-symfony-deploy
et ansistrano-deploy
partagent le même répertoire parent. C'est normalement le cas, donc cela ne devrait pas poser de problème tant que vous installez via ansible-galaxy
.
Les tâches ne fonctionneront probablement pas pour les hôtes cibles Windows (non testé).
Variables de rôle
Les variables defaults
déclarées dans ce module :
symfony_env: prod
symfony_php_path: php # L'exécutable PHP à utiliser pour toutes les tâches en ligne de commande
symfony_console_path: 'app/console' # Si vous utilisez Symfony 3+, cela devrait être '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 # Toujours tenter une auto-mise à jour de Composer
symfony_composer_version: 1.10.1 # Installer une version spécifique de Composer. Si cette variable n'est pas définie, la dernière version stable est installée
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: ''
Hooks
Ce rôle prend en charge des hooks comme ansistrano avant et après chaque tâche
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
En plus de cela, veuillez vous référer également à la liste des variables utilisées par ansistrano.
Remarque concernant les migrations de schéma ORM/ODM
Les migrations de schéma de base de données ne peuvent généralement PAS être exécutées en parallèle sur plusieurs hôtes ! Pour cette raison, les options symfony_run_doctrine_migrations
et symfony_run_mongodb_schema_update
sont toutes deux désactivées par défaut.
Pour contourner l'exécution parallèle, vous pouvez faire ce qui suit :
- Spécifiez votre propre
ansistrano_before_symlink_tasks_file
, peut-être en utilisant celui de ce projet comme modèle (regardez dans cbrunnkvist.ansistrano-symfony-deploy/config/steps/). - Choisissez l'une des approches suivantes :
- (a) Organisez les hôtes en groupes de manière à ce que la tâche ne s'exécute que sur le premier hôte d'un groupe :
when: groups['www-production'][0] == inventory_hostname
- (b) Utilisez
run_once: true
peut-être avecdelegate_to: some_primary_host
(Docs : Délégation de playbook)
Dépendances
L'installation depuis la ligne de commande via ansible-galaxy install cbrunnkvist.ansistrano-symfony-deploy
devrait récupérer le rôle externe en tant que dépendance, donc aucune étape supplémentaire n'est nécessaire.
Exemple de playbook
En tant que minimum requis, vous devez probablement déclarer les variables ansistrano_deploy_from
et ansistrano_deploy_to
dans votre play. Ansistrano utilise par défaut rsync depuis un répertoire local (encore une fois, consultez la documentation d'ansistrano).
Supposons qu'il y ait 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
Ce playbook doit être exécuté comme n'importe quel autre, c'est-à-dire ansible-playbook -i some_hosts_file deploy.yml
.
Il est probablement judicieux de garder vos tâches de préparation système ponctuelles dans un playbook séparé, par exemple my-app-infrastructure/setup.yml
.
Licence
MIT
Informations sur l'auteur
- ansistrano-symfony-deploy, écrit par Conny Brunnkvist cbrunnkvist@gmail.com
- Le rôle sous-jacent est maintenu par l'équipe
ansistrano-deploy
- Une partie du code a été prise/inspirée par le rôle
symfony2-deploy
de l'équipe Servergrove
Common post-deploy tasks for Symfony projects
ansible-galaxy install cbrunnkvist.ansistrano-symfony-deploy