cbrunnkvist.ansistrano-symfony-deploy
ansistrano-symfony-deploy
这是一个用于将使用Symfony框架(包括flex)开发的PHP应用程序部署到*nix服务器上的Ansible任务集合,采用"Capistrano"样式(发布、共享、当前->发布/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
选项默认均关闭。
为了规避并行执行的问题,您可以执行以下操作:
- 指定自己的
ansistrano_before_symlink_tasks_file
,可以使用本项目中的文件作为模板(查看cbrunnkvist.ansistrano-symfony-deploy/config/steps/)。 - 选择以下方法之一:
- (a) 将主机组织成组,使任务仅在某组中的第一个主机上运行:
when: groups['www-production'][0] == inventory_hostname
- (b) 使用
run_once: true
,可能与delegate_to: some_primary_host
一起使用(文档:Playbook 委托)
依赖关系
通过命令行使用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,作者:Conny Brunnkvist cbrunnkvist@gmail.com
- 基础角色由
ansistrano-deploy
团队维护 - 部分代码来自/受
Servergrove
团队的symfony2-deploy
角色的启发
ansible-galaxy install cbrunnkvist.ansistrano-symfony-deploy