diff --git a/README.md b/README.md index ab011dd..85e8c2c 100644 --- a/README.md +++ b/README.md @@ -2,28 +2,33 @@ ## Обзор -Этот репозиторий содержит проект Ansible, интегрированный с Jenkins, для автоматизации развёртывания двух веб-сайтов (`SiteA` и `SiteB`) и прокси-сервера (`Proxy`). Настройка обеспечивает балансировку нагрузки, автоматические проверки состояния (health checks) и динамическое обновление контента без ручного вмешательства. +Этот репозиторий содержит проект Ansible, интегрированный с Jenkins, для автоматизации развёртывания двух веб-сайтов (`SiteA` и `SiteB`) и прокси-сервера (`Proxy`). Настройка обеспечивает балансировку нагрузки, автоматические проверки состояния (health checks) и динамическое обновление контента без ручного вмешательства. Дополнительно внедрены обработчики для перезапуска служб при изменении конфигурации и централизованное управление основным конфигурационным файлом Nginx через `group_vars`. -## Описание Структуры +## Описание Компонентов -- **group_vars/**: Содержит файлы с переменными групп хостов. В данном случае `all.yml` содержит общие переменные для всех ролей и хостов. +- **group_vars/**: Содержит файлы с переменными групп хостов. В `all.yml` определены общие переменные для всех ролей и хостов, включая параметры для Nginx и контент для сайтов. - **roles/**: Основная директория с ролями Ansible. - - **firewall/**: Роль для настройки и конфигурирования файрвола (`firewalld`), открытия необходимых портов. - - **tasks/**: Задачи для установки и настройки `firewalld`. + + - **firewall/**: + - **handlers/**: Содержит обработчики для перезапуска `firewalld`. + - **tasks/**: Задачи для установки и настройки `firewalld`, открытия необходимых портов. - **vars/**: Переменные, используемые в роли `firewall`. - - **nginx_proxy/**: Роль для установки и настройки Nginx как прокси-сервера с балансировкой нагрузки и проверкой состояния. - - **tasks/**: Задачи для установки Nginx и деплоя конфигурации прокси. - - **templates/**: Шаблоны конфигурационных файлов Nginx для прокси-сервера. + - **nginx_proxy/**: + - **handlers/**: Содержит обработчики для перезапуска Nginx. + - **tasks/**: Задачи для установки Nginx, создания директорий, деплоя конфигураций и тестирования конфигурации. + - **templates/**: Шаблоны конфигурационных файлов Nginx для прокси-сервера и страниц ошибок. - - **nginx_site/**: Роль для установки и настройки Nginx на целевых сайтах (`SiteA` и `SiteB`), а также деплоя HTML контента. - - **tasks/**: Задачи для установки Nginx, создания корневых директорий сайтов, деплоя конфигураций и HTML файлов. + - **nginx_site/**: + - **handlers/**: Содержит обработчики для перезапуска Nginx. + - **tasks/**: Задачи для установки Nginx, создания корневых директорий сайтов, деплоя конфигураций и HTML файлов, а также тестирования конфигурации. - **templates/**: Шаблоны конфигурационных файлов Nginx и HTML страниц для сайтов. - - **ssl_certificate/**: Роль для генерации самоподписанных SSL сертификатов для прокси-сервера. + - **ssl_certificate/**: + - **handlers/**: Содержит обработчики для перезапуска Nginx после генерации SSL сертификатов. - **tasks/**: Задачи для установки OpenSSL, создания директории для сертификатов и генерации самоподписанных сертификатов. - - **vars/**: Переменные, используемые в роли `ssl_certificate`. + - **templates/**: Шаблоны или скрипты для генерации SSL сертификатов. - **playbook.yml**: Основной Ansible playbook, который связывает все роли и определяет порядок их выполнения на соответствующих хостах. @@ -31,33 +36,52 @@ - **ansible.cfg**: Конфигурационный файл Ansible, определяющий пути к ролям и другие настройки. -- **Jenkinsfile**: Скрипт для Jenkins Pipeline, который управляет процессом деплоя, включая расшифровку SSH ключей, передачу переменных и запуск Ansible playbook. +- **jenkinsfile**: Скрипт для Jenkins Pipeline, который управляет процессом деплоя, включая расшифровку SSH ключей, передачу переменных и запуск Ansible playbook. ## Параметры и Их Назначение ### В `group_vars/all.yml` -- **siteA**: - - `site_title`: Заголовок страницы SiteA. - - `site_h1`: Основной заголовок `

` на странице SiteA. - - `site_h2`: Дополнительный заголовок `

` для SiteA. - - `site_p`: Параграф `

` контента для SiteA. - - `site_domain`: Доменное имя SiteA. - - `site_ip`: IP-адрес сервера SiteA. +```yaml +# group_vars/all.yml +ansible_python_interpreter: /usr/bin/python3.6 -- **siteB**: - - `site_title`: Заголовок страницы SiteB. - - `site_h1`: Основной заголовок `

` на странице SiteB. - - `site_h2`: Дополнительный заголовок `

` для SiteB. - - `site_p`: Параграф `

` контента для SiteB. - - `site_domain`: Доменное имя SiteB. - - `site_ip`: IP-адрес сервера SiteB. +# Общие переменные для Nginx +nginx_worker_processes: auto +nginx_error_log: /var/log/nginx/error.log +nginx_error_log_level: warn +nginx_worker_connections: 1024 +nginx_access_log: /var/log/nginx/access.log +nginx_keepalive_timeout: 65 +nginx_types_hash_max_size: 2048 -- **proxy**: - - `proxy_domain`: Доменное имя прокси-сервера. - - `proxy_ip`: IP-адрес прокси-сервера. +# Переменные для сайтов SiteA и SiteB +siteA: + site_title: "SiteA - Добро пожаловать" + site_h1: "Добро пожаловать на SiteA" + site_h2: "Дефолтный заголовок H2 для SiteA" + site_p: "Дефолтный параграф для SiteA" + site_domain: "siteA.example.com" + site_ip: "192.168.0.61" -- **ansible_python_interpreter**: Явное указание пути к Python-интерпретатору на всех хостах. +siteB: + site_title: "SiteB - Добро пожаловать" + site_h1: "Добро пожаловать на SiteB" + site_h2: "Дефолтный заголовок H2 для SiteB" + site_p: "Дефолтный параграф для SiteB" + site_domain: "siteB.example.com" + site_ip: "192.168.0.62" + +proxy: + proxy_domain: "proxy.example.com" + proxy_ip: "192.168.0.63" + +# SSL переменные +ssl_cert_path: "/etc/nginx/ssl" +ssl_cert_file: "proxy.crt" +ssl_key_file: "proxy.key" +ssl_subject: "/C=RU/ST=Some-State/L=Some-City/O=Your Company/CN={{ proxy.proxy_domain }}" +``` ### В `Jenkinsfile` @@ -101,4 +125,98 @@ all: hosts: 192.168.0.63: ansible_user: ansible - ansible_python_interpreter: /usr/bin/python3.6 \ No newline at end of file + ansible_python_interpreter: /usr/bin/python3.6 +``` + +### Настройка Переменных + +Все переменные, используемые в проектах, определены в `group_vars/all.yml`. При необходимости, вы можете переопределить их через Jenkins параметры или добавить дополнительные переменные. + +### Запуск Jenkins Pipeline + +1. **Дешифровка SSH ключей**: Jenkins автоматически расшифровывает SSH ключи для доступа к серверам. + +2. **Выбор Цели Развертывания**: Выберите, какой сайт (`SiteA`, `SiteB`) или все (`All`) нужно развернуть. + +3. **Передача Дополнительных Переменных**: Введите дополнительные параметры контента для выбранных сайтов. + +4. **Запуск Ansible Playbook**: Jenkins запускает Ansible playbook с переданными параметрами, развертывая конфигурации и контент на целевых хостах. + +## Проверка и Отладка + +Если при развертывании возникают ошибки: + +1. **Просмотрите Логи Jenkins**: Получите подробную информацию об ошибках. + +2. **Подключитесь к Целевым Серверам**: Проверьте статус служб и конфигурационных файлов. + + ```bash + systemctl status nginx + systemctl status firewalld + ``` + +3. **Проверьте Конфигурацию Nginx**: Убедитесь, что конфигурационные файлы корректны. + + ```bash + nginx -t + ``` + +4. **Просмотрите Логи Nginx**: + + ```bash + sudo journalctl -xeu nginx.service + sudo tail -n 100 /var/log/nginx/error.log + ``` + +### Пример Запуска Playbook Локально + +Для локального тестирования или отладки вы можете запустить playbook вручную: + +```bash +ansible-playbook playbook.yml +``` + +## Дополнительные Возможности + +- **Автоматическое Тестирование Конфигураций**: Playbook включает задачи для тестирования конфигурации Nginx перед запуском службы, предотвращая запуск с ошибками. + +- **Обработчики (Handlers)**: Автоматический перезапуск служб `nginx` и `firewalld` при изменении конфигурационных файлов. + +- **Централизованное Управление Конфигурацией**: Основной конфигурационный файл Nginx управляется через шаблоны и переменные в `group_vars/all.yml`. + +## Рекомендации и Лучшие Практики + +1. **Безопасность**: + - Используйте Ansible Vault для защиты чувствительных данных. + - Убедитесь, что SSH ключи и другие секреты не попадают в систему контроля версий. + +2. **Документация**: + - Поддерживайте актуальную документацию, описывающую структуру проекта и инструкции по развертыванию. + +3. **Тестирование**: + - Используйте инструменты вроде [Molecule](https://molecule.readthedocs.io/en/latest/) для тестирования Ansible ролей. + - Внедрите проверку конфигураций перед применением изменений. + +4. **Управление Конфигурациями**: + - Централизуйте общие конфигурационные файлы для облегчения управления и уменьшения дублирования. + - Используйте обработчики для автоматического применения изменений. + +5. **Мониторинг и Логирование**: + - Внедрите системы мониторинга для отслеживания состояния сервисов. + - Анализируйте логи для своевременного обнаружения и устранения проблем. + +## Заключение + +Этот проект демонстрирует эффективное использование Ansible и Jenkins для автоматизации развёртывания веб-сайтов и прокси-сервера с учётом безопасности, надёжности и удобства управления. Следуя приведённым инструкциям и рекомендациям, вы сможете быстро адаптировать и расширять данное решение под свои нужды. + +Если у вас возникнут дополнительные вопросы или потребуется помощь с настройкой, не стесняйтесь обращаться! + +--- + +**Примечания:** + +- Убедитесь, что все переменные правильно определены и соответствуют вашим требованиям. +- При необходимости, обновите пути и имена файлов в соответствии с вашей инфраструктурой. +- Для улучшения безопасности рассмотрите использование Ansible Vault для хранения чувствительных данных, таких как SSH ключи и пароли. + +Если возникнут дополнительные вопросы или потребуется помощь с настройкой, не стесняйтесь обращаться! \ No newline at end of file