ansistrano-symfony-deploy

ansistrano-symfony-deploy

Статус сборки

Набор задач для Ansible для развертывания PHP-приложений, разработанных с использованием фреймворка Symfony (включая flex), на серверах *nix в стиле "Capistrano" (релизы, общие ресурсы, current->releases/X).

Эта роль представляет собой сборник наиболее распространенных задач послес установке (например, получение исполняемого файла Composer, установка зависимостей и автозагрузчика, выполнение предварительного кэширования, развертывание миграций и т. д.). Она не занимается настройкой структуры директорий или загрузкой файлов на ваши сервера - эту часть выполняет более универсальная роль ansistrano-deploy.

Это реализовано с помощью определения нескольких переменных ansistrano_(before|after)_X (подробнее смотрите в документации ansistrano).

Требования

Из-за недостатков в текущей версии Ansible требуется, чтобы ansistrano-symfony-deploy и ansistrano-deploy находились в одной родительской директории. Это будет обычным случаем, поэтому не должно вызывать проблем, если вы устанавливаете через ansible-galaxy.

Задачи, вероятно, не будут работать на Windows (не тестировалось).

Переменные роли

Переменные defaults, объявленные в этом модуле:

symfony_env: prod
symfony_php_path: php # Исполняемый файл PHP для всех командных задач

symfony_console_path: 'app/console' # Если используется Symfony 3+, это должно быть '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 # Всегда пытаться обновить Composer
symfony_composer_version: 1.10.1 # Установка определенной версии Composer. Если эта переменная не установлена, устанавливается последняя стабильная версия

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: ''

Хуки

Эта роль поддерживает хуки ansistrano перед и после каждой задачи.

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

Кроме того, смотрите список переменных, используемых ansistrano.

Примечание о миграциях схемы ORM/ODM

Миграции схемы базы данных обычно не могут выполняться параллельно на нескольких узлах! По этой причине параметры symfony_run_doctrine_migrations и symfony_run_mongodb_schema_update по умолчанию отключены.

Чтобы обойти параллельное выполнение, вы можете сделать следующее:

  1. Указать ваш собственный ansistrano_before_symlink_tasks_file, возможно, используя файл из этого проекта в качестве шаблона (посмотрите в cbrunnkvist.ansistrano-symfony-deploy/config/steps/).
  2. Выбрать один из следующих подходов:
  • (a) Организовать узлы в группы так, чтобы задача выполнялась только на первом узле в какой-либо группе: when: groups['www-production'][0] == inventory_hostname
  • (b) Использовать run_once: true, возможно, с delegate_to: some_primary_host (Документы: Делегирование плейбука)

Зависимости

Установка из командной строки с помощью ansible-galaxy install cbrunnkvist.ansistrano-symfony-deploy должна загрузить внешнюю роль в качестве зависимости, так что дополнительных шагов не требуется.

Пример плейбука

В минимальном варианте вам, вероятно, нужно объявить переменные ansistrano_deploy_from и ansistrano_deploy_to в вашем плейле. Ansistrano по умолчанию использует rsync из локальной директории (снова смотрите документацию ansistrano).

Предположим, у вас есть файл 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

Этот плейбук должен выполняться как любой другой, т.е. ansible-playbook -i some_hosts_file deploy.yml.

Возможно, имеет смысл держать одноразовые задачи по подготовке системы в отдельном плейбуке, например, my-app-infrastructure/setup.yml.

Лицензия

MIT

Информация об авторе

  • ansistrano-symfony-deploy, написан Конни Бруннквистом cbrunnkvist@gmail.com
  • Основная роль поддерживается командой ansistrano-deploy
  • Часть кода была взята из/вдохновлена ролью symfony2-deploy команды Servergrove
О проекте

Common post-deploy tasks for Symfony projects

Установить
ansible-galaxy install cbrunnkvist/ansistrano-symfony-deploy
Лицензия
mit
Загрузки
42969
Владелец