diff --git a/Makefile b/Makefile index cc67116..c5b187f 100644 --- a/Makefile +++ b/Makefile @@ -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'е" diff --git a/README.md b/README.md index 7dd2279..b60d618 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/docs/deploy-yml-customization.md b/docs/deploy-yml-customization.md new file mode 100644 index 0000000..daf5ee1 --- /dev/null +++ b/docs/deploy-yml-customization.md @@ -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) diff --git a/roles/deploy.yml b/roles/deploy.yml index ffd3423..b5a88a4 100644 --- a/roles/deploy.yml +++ b/roles/deploy.yml @@ -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)