Files
DevOpsLab/docs/deploy-yml-customization.md
Сергей Антропов 5c2b63848c docs: Добавлена полная документация по кастомизации deploy.yml
- Создан файл docs/deploy-yml-customization.md с полным руководством
- Добавлены примеры использования become, групп, переменных, тегов
- Показаны примеры условного выполнения и параллелизма
- Добавлены примеры обработки ошибок и безопасности
- Включены примеры использования Vault и отладки
- Добавлены лучшие практики и рекомендации
- Обновлен roles/deploy.yml с примерами кастомизации
- Добавлены ссылки на документацию в Makefile и README.md

Документация включает:
- 15 разделов с подробными примерами
- Команды запуска с различными параметрами
- Примеры продакшн развертывания
- Настройки безопасности и мониторинга
- Обработка ошибок и логирование
2025-10-25 19:21:59 +03:00

521 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Кастомизация deploy.yml - Полное руководство
## Описание
Файл `roles/deploy.yml` - это основной playbook для развертывания Ansible ролей на продакшн серверах. Этот документ содержит полную сводку по кастомизации и настройке различных сценариев развертывания.
## Базовый пример
```yaml
---
# Playbook для развертывания на продакшн серверах
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Развертывание всех ролей
hosts: all
roles:
- ping
```
## 1. Управление привилегиями (become)
### Базовое использование become
```yaml
- name: Развертывание с sudo правами
hosts: all
become: true
roles:
- nginx
- postgresql
```
### Become с паролем
```yaml
- name: Развертывание с sudo паролем
hosts: all
become: true
become_method: sudo
become_user: root
vars:
ansible_become_pass: "{{ vault_sudo_password }}"
roles:
- nginx
```
### Become для конкретных ролей
```yaml
- name: Развертывание с разными привилегиями
hosts: all
roles:
- role: nginx
become: true
- role: app-config
become: false
```
## 2. Группировка хостов
### Развертывание по группам
```yaml
- 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
```
### Условное развертывание
```yaml
- 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. Переменные и конфигурация
### Глобальные переменные
```yaml
- 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
```
### Переменные для конкретных ролей
```yaml
- 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
```yaml
# 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)
### Базовое использование тегов
```yaml
- name: Развертывание с тегами
hosts: all
become: true
roles:
- role: nginx
tags: ['web', 'nginx']
- role: postgresql
tags: ['database', 'postgresql']
- role: monitoring
tags: ['monitoring', 'prometheus']
```
### Запуск с тегами
```bash
# Развертывание только веб-серверов
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)
### Использование обработчиков
```yaml
- 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. Условное выполнение
### Условия на основе переменных
```yaml
- 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)
```
### Условия на основе групп
```yaml
- 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. Параллельное выполнение
### Настройка параллелизма
```yaml
- name: Развертывание с параллелизмом
hosts: all
become: true
serial: 2 # Выполнять на 2 хостах одновременно
roles:
- nginx
- postgresql
```
### Каскадное развертывание
```yaml
- name: Развертывание БД (первыми)
hosts: databases
become: true
serial: 1
roles:
- postgresql
- name: Развертывание приложений (после БД)
hosts: webservers
become: true
serial: 2
roles:
- nginx
- application
```
## 8. Обработка ошибок
### Игнорирование ошибок
```yaml
- name: Развертывание с игнорированием ошибок
hosts: all
become: true
ignore_errors: true
roles:
- nginx
- postgresql
```
### Обработка ошибок на уровне ролей
```yaml
- name: Развертывание с обработкой ошибок
hosts: all
become: true
roles:
- role: nginx
ignore_errors: true
- role: postgresql
ignore_errors: false
```
## 9. Инвентарь и подключение
### Различные пользователи
```yaml
- name: Развертывание с разными пользователями
hosts: all
become: true
remote_user: "{{ ansible_user | default('ubuntu') }}"
roles:
- nginx
- postgresql
```
### SSH настройки
```yaml
- 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. Полный пример продакшн развертывания
```yaml
---
# Полный пример продакшн развертывания
# Автор: Сергей Антропов
# Сайт: 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. Команды запуска
### Базовые команды
```bash
# Развертывание всех ролей
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
```
### Продвинутые команды
```bash
# Развертывание с параллелизмом
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. Переменные окружения
### Использование переменных окружения
```bash
# Установка переменных окружения
export ANSIBLE_HOST_KEY_CHECKING=False
export ANSIBLE_SSH_RETRIES=3
export ANSIBLE_TIMEOUT=30
# Развертывание
make role deploy
```
### Файл переменных
```yaml
# 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
```yaml
# В deploy.yml
- name: Развертывание с секретами
hosts: all
become: true
vars:
db_password: "{{ vault_db_password }}"
ssl_cert: "{{ vault_ssl_cert }}"
roles:
- postgresql
- nginx
```
### Запуск с Vault
```bash
# Развертывание с паролем 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. Отладка и логирование
### Включение отладки
```yaml
- name: Развертывание с отладкой
hosts: all
become: true
debug: true
roles:
- nginx
- postgresql
```
### Логирование
```bash
# Развертывание с логированием
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. Лучшие практики
### Структура файла
1. **Комментарии** - описывайте каждый блок
2. **Группировка** - логически группируйте роли
3. **Переменные** - выносите переменные в отдельные файлы
4. **Теги** - используйте теги для гибкости
5. **Условия** - добавляйте условия для безопасности
### Рекомендации
- Используйте `become: true` для системных ролей
- Группируйте хосты по функциональности
- Применяйте теги для модульности
- Используйте переменные для конфигурации
- Добавляйте условия для безопасности
- Логируйте все операции
- Тестируйте с `--check` перед развертыванием
## Заключение
Файл `roles/deploy.yml` - это центральный элемент развертывания. Правильная его настройка обеспечивает гибкость, безопасность и надежность развертывания Ansible ролей на продакшн серверах.
Для получения дополнительной информации см.:
- [Создание ролей](creating-roles.md)
- [Настройка CI/CD](cicd-setup.md)
- [Мониторинг](monitoring.md)