Deploy symfony2-приложений с помощью

О себе

Full-stack Symfony2-developer

Фрилансер

Введение

Требования
Symfony2-приложений

php.ini settings

php extensions

database server

web-server

security settings

Системы управления конфигурациями

Почему Ansible?

  • Не требует установки агентов / SSH-based
  • Простой в изучении / конфигурации на YAML
  • Большой выбор готовых ролей

Основы

структура и терминология

Playbook

Структура

vars
roles
requirements.yml
playbook.yml

Запуск

ansible-playbook playbook.yml

Role

# roles/vendor.apache
defaults
handlers
meta
tasks
templates

Структура

# playbook.yml
- hosts: all
  roles: 
   - vendor.apache

Использование

Task

# main.yml
- include: check.yml
- include: install.yml
- include: configure.yml
- include: tweak.yml
  when: tweak_enabled == true

 

main.yml
check.yml
install.yml
configure.yml
tweak.yml

 

Структура

# tasks/check.yml

- name: Check
  fail: msg="Please define correct 'symfony2_local_root' to copy files from"
  when: "'rsync' == symfony2_deploy_strategy and symfony2_local_root is not defined"

 

# tasks/install.yml
- name: Download Composer
  get_url:
    url: https://getcomposer.org/composer.phar
    dest: "~/composer.phar"
    mode: 0755
    validate_certs: no

 

# tasks/configure.yml

- name: Generate parameters.yml
  template:
    src: "parameters.yml.js2"
    dest: "path/to/app/config/parameters.yml"

 

Defaults & Vars

apache_version: 2.2
some_feature_enabled: true
my_path: "/etc/apache{{ apache_version }}"

Templates

# templates/vhost.conf.j2
# {{ ansible_managed }}

<VirtualHost *:{{ item.port | default('80') }}>
    ServerName {{ item.servername }}
    DocumentRoot {{ item.documentroot }}
</VirtualHost>

Galaxy

galaxy.ansible.com

Как выбрать роль?

- Названия переменных начинаются с имени роли

 

 

- Не имеет зависимостей от других ролей

- Имеет версии (теги)

- Поддерживает несколько платформ

- Разработчик не забросил проект

- Имеет подробный README

 

    username.composer -> composer_variable_name

requirements.yml

Структура

---
- src: vendor1.role
  version: v1.0.0
- src: https://github.com/vendor/rolename
  version: v2.0.0
  name: vendor2.rolename

 

Установка зависимостей

ansible-galaxy install -r requirements.yml --force

Не храните чужие роли

# ansible.cfg
[defaults]
roles_path = vendor/roles
# .gitignore
/vendor/roles
!/vendor/roles/.gitkeep

Не изобретайте велосипед

Улучшайте и используйте готовые роли

Подготовка своей роли к публикации

  • Понятный README
  • Тесты
  • Присвоение тега на github.com
  • meta/main.yml

Тесты

# tests/Vagrantfile
Vagrant.configure(2) do |config|
    config.vm.box = 'ubuntu/trusty64'
    config.vm.provision :ansible do |ansible|
        ansible.playbook = '../playbook.yml'
        ansible.extra_vars = {
            ansible_ssh_user: 'vagrant',
            vagrant: true
        }
    end
end

 

# tests/ansible.cfg
[defaults]
roles_path = ../vendor/roles

 

Meta

# meta/main.yml
galaxy_info:
  author: username
  description: Install and Configure Something
  license: MIT
  min_ansible_version: 1.4
  platforms:
  - name: Ubuntu
    versions:
    - all

Попробуем?

Развернем symfony2-приложение

ORO CRM

Подготовленный playbook

Спасибо

Deploy Symfony2 apps with Ansible

By igor_mukhin

Deploy Symfony2 apps with Ansible

  • 643