docs: Добавлена полная документация по кастомизации deploy.yml

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

Документация включает:
- 15 разделов с подробными примерами
- Команды запуска с различными параметрами
- Примеры продакшн развертывания
- Настройки безопасности и мониторинга
- Обработка ошибок и логирование
This commit is contained in:
Сергей Антропов
2025-10-25 19:21:59 +03:00
parent e98bfa9c1f
commit 5c2b63848c
4 changed files with 592 additions and 0 deletions

View File

@@ -127,6 +127,12 @@ role:
echo ""; \
echo " 🚀 make role deploy - развернуть роли на реальные серверы"; \
echo " 💡 Требует: inventory/hosts.ini"; \
echo " 💡 Примеры:"; \
echo " make role deploy # развертывание всех ролей"; \
echo " ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags web"; \
echo " ansible-playbook -i inventory/hosts.ini roles/deploy.yml --limit webservers"; \
echo " ansible-playbook -i inventory/hosts.ini roles/deploy.yml --check"; \
echo " 💡 Документация: docs/deploy-yml-customization.md"; \
echo ""; \
echo " 🔍 make role lint - проверить синтаксис ролей"; \
echo " 💡 Использует: ansible-lint"; \
@@ -937,6 +943,9 @@ help:
@echo " make role create - создать новую роль (интерактивно)"
@echo " make role delete - удалить роль (интерактивно)"
@echo ""
@echo "📖 ДОКУМЕНТАЦИЯ ПО DEPLOY.YML:"
@echo " docs/deploy-yml-customization.md - полное руководство по кастомизации"
@echo ""
@echo "📋 PRESET'Ы (тестовые окружения):"
@echo " make presets list - показать все доступные preset'ы"
@echo " make presets info - подробная информация о preset'е"

View File

@@ -18,6 +18,7 @@ AnsibleTemplate - это универсальная система для тес
- **[docs/site-yml-guide.md](docs/site-yml-guide.md)** - Руководство по файлу site.yml
- **[docs/molecule-guide.md](docs/molecule-guide.md)** - Подробное руководство по Molecule
- **[docs/all-images-preset.md](docs/all-images-preset.md)** - Пресет all-images для тестирования всех образов
- **[docs/deploy-yml-customization.md](docs/deploy-yml-customization.md)** - Полное руководство по кастомизации deploy.yml
- **[dockerfiles/README.md](dockerfiles/README.md)** - Подробная документация по Docker образам
### 🏗️ CI/CD

View File

@@ -0,0 +1,520 @@
# Кастомизация 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)

View File

@@ -2,8 +2,70 @@
# Playbook для развертывания на продакшн серверах
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
#
# 📖 Полное руководство по кастомизации: docs/deploy-yml-customization.md
#
# Примеры использования:
# - make role deploy # Развертывание всех ролей
# - ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags web
# - ansible-playbook -i inventory/hosts.ini roles/deploy.yml --limit webservers
# - ansible-playbook -i inventory/hosts.ini roles/deploy.yml --check
# Базовое развертывание всех ролей
- name: Развертывание всех ролей
hosts: all
become: true
roles:
- ping
# Примеры расширенной кастомизации (раскомментируйте при необходимости):
#
# # Развертывание по группам с разными настройками
# - name: Развертывание на веб-серверах
# hosts: webservers
# become: true
# roles:
# - nginx
# - php-fpm
# tags: ['web', 'nginx']
#
# - name: Развертывание на БД серверах
# hosts: databases
# become: true
# roles:
# - postgresql
# - redis
# tags: ['database']
#
# - name: Развертывание на мониторинг серверах
# hosts: monitoring
# become: true
# when: monitoring_enabled | default(true)
# roles:
# - prometheus
# - grafana
# tags: ['monitoring']
#
# # Развертывание с переменными
# - name: Развертывание с переменными
# hosts: all
# become: true
# vars:
# nginx_port: 80
# nginx_ssl_enabled: true
# app_version: "1.0.0"
# roles:
# - nginx
# - application
#
# # Развертывание с условиями
# - 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)