diff --git a/README.md b/README.md index f4199b5..ca5d8a2 100644 --- a/README.md +++ b/README.md @@ -1,97 +1,107 @@ -Ansible Jenkins Deployment Pipeline -Обзор -Этот репозиторий содержит проект Ansible, интегрированный с Jenkins, для автоматизации развёртывания двух веб-сайтов (SiteA и SiteB) и прокси-сервера (Proxy). Настройка обеспечивает балансировку нагрузки, автоматические проверки состояния (health checks) и динамическое обновление контента без ручного вмешательства. -Структура Репозитория -ansible/ -├── group_vars/ -│ └── all.yml -├── roles/ -│ ├── firewall/ -│ │ ├── tasks/ -│ │ └── vars/ -│ ├── nginx_proxy/ -│ │ ├── tasks/ -│ │ ├── templates/ -│ │ └── vars/ -│ ├── nginx_site/ -│ │ ├── tasks/ -│ │ ├── templates/ -│ │ └── vars/ -│ └── ssl_certificate/ -│ ├── tasks/ -│ └── vars/ -├── playbook.yml -├── inventory.yml -├── ansible.cfg -├── id_ed25519_vault -└── Jenkinsfile -Описание Структуры -• group_vars/: Содержит файлы с переменными групп хостов. В данном случае all.yml содержит общие переменные для всех ролей и хостов. -• roles/: Основная директория с ролями Ansible. -o firewall/: Роль для настройки и конфигурирования файрвола (firewalld), открытия необходимых портов. - tasks/: Задачи для установки и настройки firewalld. - vars/: Переменные, используемые в роли firewall. -o nginx_proxy/: Роль для установки и настройки Nginx как прокси-сервера с балансировкой нагрузки и проверкой состояния. - tasks/: Задачи для установки Nginx и деплоя конфигурации прокси. - templates/: Шаблоны конфигурационных файлов Nginx для прокси-сервера. - vars/: Переменные, используемые в роли nginx_proxy. -o nginx_site/: Роль для установки и настройки Nginx на целевых сайтах (SiteA и SiteB), а также деплоя HTML контента. - tasks/: Задачи для установки Nginx, создания корневых директорий сайтов, деплоя конфигураций и HTML файлов. - templates/: Шаблоны конфигурационных файлов Nginx и HTML страниц для сайтов. - vars/: Переменные, используемые в роли nginx_site. -o ssl_certificate/: Роль для генерации самоподписанных SSL сертификатов для прокси-сервера. - tasks/: Задачи для установки OpenSSL, создания директории для сертификатов и генерации самоподписанных сертификатов. - vars/: Переменные, используемые в роли ssl_certificate. -• playbook.yml: Основной Ansible playbook, который связывает все роли и определяет порядок их выполнения на соответствующих хостах. -• inventory.yml: Файл инвентаризации, содержащий информацию о целевых хостах и группах (SiteA, SiteB, proxy). -• ansible.cfg: Конфигурационный файл Ansible, определяющий пути к ролям и другие настройки. -• Jenkinsfile: Скрипт для Jenkins Pipeline, который управляет процессом деплоя, включая расшифровку SSH ключей, передачу переменных и запуск Ansible playbook. -Параметры и Их Назначение -В group_vars/all.yml -• siteA: -o site_title: Заголовок страницы SiteA. -o site_h1: Основной заголовок
контента для SiteA. -o site_domain: Доменное имя SiteA. -o site_ip: IP-адрес сервера SiteA. -• siteB: -o site_title: Заголовок страницы SiteB. -o site_h1: Основной заголовок
контента для SiteB. -o site_domain: Доменное имя SiteB. -o site_ip: IP-адрес сервера SiteB. -• proxy: -o proxy_domain: Доменное имя прокси-сервера. -o proxy_ip: IP-адрес прокси-сервера. -В Jenkinsfile -• ADDITIONAL_CONTENT_SITEA_H2: Дополнительный контент для заголовка
для SiteA. -• ADDITIONAL_CONTENT_SITEB_H2: Дополнительный контент для заголовка
для SiteB. -В Ролях -• firewall/vars/main.yml: -o firewall_ports: Список портов и протоколов, которые необходимо открыть в файрволе (например, SSH, HTTP, HTTPS). -• nginx_proxy/vars/main.yml: -o upstream_servers: Список IP-адресов бэкенд-серверов (SiteA и SiteB) для балансировки нагрузки. -• ssl_certificate/vars/main.yml: -o ssl_cert_path: Путь к директории, где будут храниться SSL сертификаты. -o ssl_cert_file: Имя SSL сертификата. -o ssl_key_file: Имя ключа SSL сертификата. -o ssl_subject: Параметры для генерации самоподписанного SSL сертификата. -Как Использовать -1. Настройка Инвентаря: Отредактируйте inventory.yml, указав правильные IP-адреса и пользователя для каждого хоста. -2. Шифрование SSH Ключей: Используйте Ansible Vault для шифрования приватных SSH ключей и сохраните их в безопасном месте. -3. Настройка Jenkins: -o Добавьте необходимые креденшелы (пароли, SSH ключи) в Jenkins. -o Убедитесь, что Jenkins имеет доступ к Ansible и может выполнять playbook. -4. Запуск Pipeline: -o Введите необходимый контент для каждого сайта в соответствующие поля Jenkins. -o Запустите Jenkins Pipeline и следите за его выполнением. -5. Мониторинг и Проверка: -o Проверьте доступность сайтов и корректность балансировки нагрузки через прокси-сервер. -o Убедитесь, что health checks работают корректно и автоматически перенаправляют трафик при сбоях. -Дополнительная Информация -• Автоматизация Health Check: Конфигурация Nginx прокси-сервера настроена для автоматического перенаправления трафика на рабочие бэкенды без необходимости ручной перезагрузки. -• Динамическое Обновление Контента: Использование параметров в Jenkins позволяет легко обновлять содержимое сайтов без изменения конфигурационных файлов вручную. \ No newline at end of file +# Ansible Jenkins Deployment Pipeline + +## Обзор + +Этот репозиторий содержит проект Ansible, интегрированный с Jenkins, для автоматизации развёртывания двух веб-сайтов (`SiteA` и `SiteB`) и прокси-сервера (`Proxy`). Настройка обеспечивает балансировку нагрузки, автоматические проверки состояния (health checks) и динамическое обновление контента без ручного вмешательства. + +## Структура Репозитория + +ansible/ ├── group_vars/ │ └── all.yml ├── roles/ │ ├── firewall/ │ │ ├── tasks/ │ │ │ └── main.yml │ │ └── vars/ │ │ └── main.yml │ ├── nginx_proxy/ │ │ ├── tasks/ │ │ │ └── main.yml │ │ ├── templates/ │ │ │ └── proxy.conf.j2 │ │ └── vars/ │ │ └── main.yml │ ├── nginx_site/ │ │ ├── tasks/ │ │ │ └── main.yml │ │ ├── templates/ │ │ │ ├── siteA.conf.j2 │ │ │ ├── siteB.conf.j2 │ │ │ └── index.html.j2 │ │ └── vars/ │ │ └── main.yml │ └── ssl_certificate/ │ ├── tasks/ │ │ └── main.yml │ └── vars/ │ └── main.yml ├── playbook.yml ├── inventory.yml ├── ansible.cfg └── Jenkinsfile + +## Описание Структуры + +- **group_vars/**: Содержит файлы с переменными групп хостов. В данном случае `all.yml` содержит общие переменные для всех ролей и хостов. + +- **roles/**: Основная директория с ролями Ansible. + - **firewall/**: Роль для настройки и конфигурирования файрвола (`firewalld`), открытия необходимых портов. + - **tasks/**: Задачи для установки и настройки `firewalld`. + - **vars/**: Переменные, используемые в роли `firewall`. + + - **nginx_proxy/**: Роль для установки и настройки Nginx как прокси-сервера с балансировкой нагрузки и проверкой состояния. + - **tasks/**: Задачи для установки Nginx и деплоя конфигурации прокси. + - **templates/**: Шаблоны конфигурационных файлов Nginx для прокси-сервера. + - **vars/**: Переменные, используемые в роли `nginx_proxy`. + + - **nginx_site/**: Роль для установки и настройки Nginx на целевых сайтах (`SiteA` и `SiteB`), а также деплоя HTML контента. + - **tasks/**: Задачи для установки Nginx, создания корневых директорий сайтов, деплоя конфигураций и HTML файлов. + - **templates/**: Шаблоны конфигурационных файлов Nginx и HTML страниц для сайтов. + - **vars/**: Переменные, используемые в роли `nginx_site`. + + - **ssl_certificate/**: Роль для генерации самоподписанных SSL сертификатов для прокси-сервера. + - **tasks/**: Задачи для установки OpenSSL, создания директории для сертификатов и генерации самоподписанных сертификатов. + - **vars/**: Переменные, используемые в роли `ssl_certificate`. + +- **playbook.yml**: Основной Ansible playbook, который связывает все роли и определяет порядок их выполнения на соответствующих хостах. + +- **inventory.yml**: Файл инвентаризации, содержащий информацию о целевых хостах и группах (`SiteA`, `SiteB`, `proxy`). + +- **ansible.cfg**: Конфигурационный файл Ansible, определяющий пути к ролям и другие настройки. + +- **Jenkinsfile**: Скрипт для Jenkins Pipeline, который управляет процессом деплоя, включая расшифровку SSH ключей, передачу переменных и запуск Ansible playbook. + +## Параметры и Их Назначение + +### В `group_vars/all.yml` + +- **siteA**: + - `site_title`: Заголовок страницы SiteA. + - `site_h1`: Основной заголовок `
` контента для SiteA. + - `site_domain`: Доменное имя SiteA. + - `site_ip`: IP-адрес сервера SiteA. + +- **siteB**: + - `site_title`: Заголовок страницы SiteB. + - `site_h1`: Основной заголовок `
` контента для SiteB. + - `site_domain`: Доменное имя SiteB. + - `site_ip`: IP-адрес сервера SiteB. + +- **proxy**: + - `proxy_domain`: Доменное имя прокси-сервера. + - `proxy_ip`: IP-адрес прокси-сервера. + +### В `Jenkinsfile` + +- **ADDITIONAL_CONTENT_SITEA_H2**: Дополнительный контент для заголовка `
` для SiteA. +- **ADDITIONAL_CONTENT_SITEB_H2**: Дополнительный контент для заголовка `
` для SiteB. + +### В Ролях + +- **firewall/vars/main.yml**: + - `firewall_ports`: Список портов и протоколов, которые необходимо открыть в файрволе (например, SSH, HTTP, HTTPS). + +- **nginx_proxy/vars/main.yml**: + - `upstream_servers`: Список IP-адресов бэкенд-серверов (`SiteA` и `SiteB`) для балансировки нагрузки. + +- **ssl_certificate/vars/main.yml**: + - `ssl_cert_path`: Путь к директории, где будут храниться SSL сертификаты. + - `ssl_cert_file`: Имя SSL сертификата. + - `ssl_key_file`: Имя ключа SSL сертификата. + - `ssl_subject`: Параметры для генерации самоподписанного SSL сертификата. + +## Как Использовать + +### Настройка Инвентаря + +Отредактируйте `inventory.yml`, указав правильные IP-адреса и пользователя для каждого хоста: + +```yaml +all: + children: + SiteA: + hosts: + 192.168.0.61: + ansible_user: ansible + SiteB: + hosts: + 192.168.0.62: + ansible_user: ansible + proxy: + hosts: + 192.168.0.63: + ansible_user: ansible