- Создан файл docs/deploy-yml-customization.md с полным руководством - Добавлены примеры использования become, групп, переменных, тегов - Показаны примеры условного выполнения и параллелизма - Добавлены примеры обработки ошибок и безопасности - Включены примеры использования Vault и отладки - Добавлены лучшие практики и рекомендации - Обновлен roles/deploy.yml с примерами кастомизации - Добавлены ссылки на документацию в Makefile и README.md Документация включает: - 15 разделов с подробными примерами - Команды запуска с различными параметрами - Примеры продакшн развертывания - Настройки безопасности и мониторинга - Обработка ошибок и логирование
14 KiB
14 KiB
Кастомизация deploy.yml - Полное руководство
Описание
Файл roles/deploy.yml - это основной playbook для развертывания Ansible ролей на продакшн серверах. Этот документ содержит полную сводку по кастомизации и настройке различных сценариев развертывания.
Базовый пример
---
# Playbook для развертывания на продакшн серверах
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Развертывание всех ролей
hosts: all
roles:
- ping
1. Управление привилегиями (become)
Базовое использование become
- name: Развертывание с sudo правами
hosts: all
become: true
roles:
- nginx
- postgresql
Become с паролем
- name: Развертывание с sudo паролем
hosts: all
become: true
become_method: sudo
become_user: root
vars:
ansible_become_pass: "{{ vault_sudo_password }}"
roles:
- nginx
Become для конкретных ролей
- name: Развертывание с разными привилегиями
hosts: all
roles:
- role: nginx
become: true
- role: app-config
become: false
2. Группировка хостов
Развертывание по группам
- name: Развертывание на веб-серверах
hosts: webservers
become: true
roles:
- nginx
- php-fpm
- name: Развертывание на БД серверах
hosts: databases
become: true
roles:
- postgresql
- redis
- name: Развертывание на мониторинг серверах
hosts: monitoring
become: true
roles:
- prometheus
- grafana
Условное развертывание
- name: Развертывание на production
hosts: production
become: true
when: environment == "production"
roles:
- nginx
- ssl-certificates
- name: Развертывание на staging
hosts: staging
become: false
when: environment == "staging"
roles:
- nginx
3. Переменные и конфигурация
Глобальные переменные
- name: Развертывание с переменными
hosts: all
become: true
vars:
nginx_port: 80
nginx_ssl_port: 443
app_name: "my-application"
app_version: "1.0.0"
roles:
- nginx
- application
Переменные для конкретных ролей
- name: Развертывание с ролевыми переменными
hosts: all
become: true
roles:
- role: nginx
vars:
nginx_port: 80
nginx_ssl_enabled: true
- role: postgresql
vars:
postgresql_version: "13"
postgresql_max_connections: 200
Использование group_vars и host_vars
# group_vars/webservers.yml
nginx_worker_processes: 4
nginx_worker_connections: 1024
# group_vars/databases.yml
postgresql_shared_buffers: "256MB"
postgresql_effective_cache_size: "1GB"
# В deploy.yml
- name: Развертывание с групповыми переменными
hosts: webservers:databases
become: true
roles:
- nginx
- postgresql
4. Теги (Tags)
Базовое использование тегов
- name: Развертывание с тегами
hosts: all
become: true
roles:
- role: nginx
tags: ['web', 'nginx']
- role: postgresql
tags: ['database', 'postgresql']
- role: monitoring
tags: ['monitoring', 'prometheus']
Запуск с тегами
# Развертывание только веб-серверов
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags web
# Развертывание только БД
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags database
# Развертывание веб + БД
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags web,database
# Пропустить мониторинг
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --skip-tags monitoring
5. Обработчики (Handlers)
Использование обработчиков
- name: Развертывание с обработчиками
hosts: all
become: true
roles:
- nginx
- postgresql
handlers:
- name: restart nginx
service:
name: nginx
state: restarted
listen: "restart nginx"
- name: restart postgresql
service:
name: postgresql
state: restarted
listen: "restart postgresql"
6. Условное выполнение
Условия на основе переменных
- name: Развертывание с условиями
hosts: all
become: true
roles:
- role: nginx
when: nginx_enabled | default(true)
- role: postgresql
when: database_enabled | default(true)
- role: redis
when: cache_enabled | default(false)
Условия на основе групп
- name: Развертывание с групповыми условиями
hosts: all
become: true
roles:
- role: nginx
when: "'webservers' in group_names"
- role: postgresql
when: "'databases' in group_names"
- role: monitoring
when: "'monitoring' in group_names"
7. Параллельное выполнение
Настройка параллелизма
- name: Развертывание с параллелизмом
hosts: all
become: true
serial: 2 # Выполнять на 2 хостах одновременно
roles:
- nginx
- postgresql
Каскадное развертывание
- name: Развертывание БД (первыми)
hosts: databases
become: true
serial: 1
roles:
- postgresql
- name: Развертывание приложений (после БД)
hosts: webservers
become: true
serial: 2
roles:
- nginx
- application
8. Обработка ошибок
Игнорирование ошибок
- name: Развертывание с игнорированием ошибок
hosts: all
become: true
ignore_errors: true
roles:
- nginx
- postgresql
Обработка ошибок на уровне ролей
- name: Развертывание с обработкой ошибок
hosts: all
become: true
roles:
- role: nginx
ignore_errors: true
- role: postgresql
ignore_errors: false
9. Инвентарь и подключение
Различные пользователи
- name: Развертывание с разными пользователями
hosts: all
become: true
remote_user: "{{ ansible_user | default('ubuntu') }}"
roles:
- nginx
- postgresql
SSH настройки
- name: Развертывание с SSH настройками
hosts: all
become: true
gather_facts: true
roles:
- nginx
- postgresql
vars:
ansible_ssh_private_key_file: "~/.ssh/id_rsa"
ansible_ssh_common_args: "-o StrictHostKeyChecking=no"
10. Полный пример продакшн развертывания
---
# Полный пример продакшн развертывания
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# 1. Развертывание инфраструктуры
- name: Развертывание инфраструктуры
hosts: infrastructure
become: true
serial: 1
roles:
- role: nginx
vars:
nginx_ssl_enabled: true
nginx_ssl_cert: "{{ ssl_cert_path }}"
nginx_ssl_key: "{{ ssl_key_path }}"
tags: ['infrastructure', 'nginx']
# 2. Развертывание БД
- name: Развертывание базы данных
hosts: databases
become: true
serial: 1
roles:
- role: postgresql
vars:
postgresql_version: "13"
postgresql_max_connections: 200
postgresql_shared_buffers: "256MB"
tags: ['database', 'postgresql']
# 3. Развертывание приложений
- name: Развертывание приложений
hosts: webservers
become: true
serial: 2
roles:
- role: nginx
vars:
nginx_upstream_servers: "{{ app_servers }}"
tags: ['application', 'nginx']
- role: application
vars:
app_version: "{{ app_version }}"
app_environment: "{{ environment }}"
tags: ['application']
# 4. Развертывание мониторинга
- name: Развертывание мониторинга
hosts: monitoring
become: true
when: monitoring_enabled | default(true)
roles:
- role: prometheus
tags: ['monitoring', 'prometheus']
- role: grafana
tags: ['monitoring', 'grafana']
11. Команды запуска
Базовые команды
# Развертывание всех ролей
make role deploy
# Развертывание с проверкой (dry-run)
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --check
# Развертывание с тегами
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags web,database
# Развертывание с переменными
ansible-playbook -i inventory/hosts.ini roles/deploy.yml -e "app_version=1.0.0"
# Развертывание с лимитом хостов
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --limit webservers
Продвинутые команды
# Развертывание с параллелизмом
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --forks 5
# Развертывание с детальным выводом
ansible-playbook -i inventory/hosts.ini roles/deploy.yml -vvv
# Развертывание с обработкой ошибок
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --force-handlers
# Развертывание с тестированием
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --check --diff
12. Переменные окружения
Использование переменных окружения
# Установка переменных окружения
export ANSIBLE_HOST_KEY_CHECKING=False
export ANSIBLE_SSH_RETRIES=3
export ANSIBLE_TIMEOUT=30
# Развертывание
make role deploy
Файл переменных
# group_vars/all.yml
ansible_user: ubuntu
ansible_ssh_private_key_file: "~/.ssh/id_rsa"
ansible_ssh_common_args: "-o StrictHostKeyChecking=no"
# Переменные приложения
app_name: "my-application"
app_version: "1.0.0"
environment: "production"
# Переменные БД
postgresql_version: "13"
postgresql_max_connections: 200
13. Безопасность
Использование Vault
# В deploy.yml
- name: Развертывание с секретами
hosts: all
become: true
vars:
db_password: "{{ vault_db_password }}"
ssl_cert: "{{ vault_ssl_cert }}"
roles:
- postgresql
- nginx
Запуск с Vault
# Развертывание с паролем Vault
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --ask-vault-pass
# Развертывание с файлом пароля
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --vault-password-file .vault_pass
14. Отладка и логирование
Включение отладки
- name: Развертывание с отладкой
hosts: all
become: true
debug: true
roles:
- nginx
- postgresql
Логирование
# Развертывание с логированием
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --log-path /var/log/ansible.log
# Развертывание с детальным выводом
ansible-playbook -i inventory/hosts.ini roles/deploy.yml -vvv
15. Лучшие практики
Структура файла
- Комментарии - описывайте каждый блок
- Группировка - логически группируйте роли
- Переменные - выносите переменные в отдельные файлы
- Теги - используйте теги для гибкости
- Условия - добавляйте условия для безопасности
Рекомендации
- Используйте
become: trueдля системных ролей - Группируйте хосты по функциональности
- Применяйте теги для модульности
- Используйте переменные для конфигурации
- Добавляйте условия для безопасности
- Логируйте все операции
- Тестируйте с
--checkперед развертыванием
Заключение
Файл roles/deploy.yml - это центральный элемент развертывания. Правильная его настройка обеспечивает гибкость, безопасность и надежность развертывания Ansible ролей на продакшн серверах.
Для получения дополнительной информации см.: