- Создан файл docs/deploy-yml-customization.md с полным руководством - Добавлены примеры использования become, групп, переменных, тегов - Показаны примеры условного выполнения и параллелизма - Добавлены примеры обработки ошибок и безопасности - Включены примеры использования Vault и отладки - Добавлены лучшие практики и рекомендации - Обновлен roles/deploy.yml с примерами кастомизации - Добавлены ссылки на документацию в Makefile и README.md Документация включает: - 15 разделов с подробными примерами - Команды запуска с различными параметрами - Примеры продакшн развертывания - Настройки безопасности и мониторинга - Обработка ошибок и логирование
		
			
				
	
	
		
			521 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			521 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Кастомизация 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)
 |