fix readme

This commit is contained in:
reqwizz 2024-11-13 00:27:29 +03:00
parent 2e6f7cc2f0
commit 29a9f07dbc

204
README.md
View File

@ -1,97 +1,107 @@
Ansible Jenkins Deployment Pipeline # Ansible Jenkins Deployment Pipeline
Обзор
Этот репозиторий содержит проект Ansible, интегрированный с Jenkins, для автоматизации развёртывания двух веб-сайтов (SiteA и SiteB) и прокси-сервера (Proxy). Настройка обеспечивает балансировку нагрузки, автоматические проверки состояния (health checks) и динамическое обновление контента без ручного вмешательства. ## Обзор
Структура Репозитория
ansible/ Этот репозиторий содержит проект Ansible, интегрированный с Jenkins, для автоматизации развёртывания двух веб-сайтов (`SiteA` и `SiteB`) и прокси-сервера (`Proxy`). Настройка обеспечивает балансировку нагрузки, автоматические проверки состояния (health checks) и динамическое обновление контента без ручного вмешательства.
├── group_vars/
│ └── all.yml ## Структура Репозитория
├── roles/
│ ├── firewall/ 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
│ │ ├── tasks/
│ │ └── vars/ ## Описание Структуры
│ ├── nginx_proxy/
│ │ ├── tasks/ - **group_vars/**: Содержит файлы с переменными групп хостов. В данном случае `all.yml` содержит общие переменные для всех ролей и хостов.
│ │ ├── templates/
│ │ └── vars/ - **roles/**: Основная директория с ролями Ansible.
│ ├── nginx_site/ - **firewall/**: Роль для настройки и конфигурирования файрвола (`firewalld`), открытия необходимых портов.
│ │ ├── tasks/ - **tasks/**: Задачи для установки и настройки `firewalld`.
│ │ ├── templates/ - **vars/**: Переменные, используемые в роли `firewall`.
│ │ └── vars/
│ └── ssl_certificate/ - **nginx_proxy/**: Роль для установки и настройки Nginx как прокси-сервера с балансировкой нагрузки и проверкой состояния.
│ ├── tasks/ - **tasks/**: Задачи для установки Nginx и деплоя конфигурации прокси.
│ └── vars/ - **templates/**: Шаблоны конфигурационных файлов Nginx для прокси-сервера.
├── playbook.yml - **vars/**: Переменные, используемые в роли `nginx_proxy`.
├── inventory.yml
├── ansible.cfg - **nginx_site/**: Роль для установки и настройки Nginx на целевых сайтах (`SiteA` и `SiteB`), а также деплоя HTML контента.
├── id_ed25519_vault - **tasks/**: Задачи для установки Nginx, создания корневых директорий сайтов, деплоя конфигураций и HTML файлов.
└── Jenkinsfile - **templates/**: Шаблоны конфигурационных файлов Nginx и HTML страниц для сайтов.
Описание Структуры - **vars/**: Переменные, используемые в роли `nginx_site`.
• group_vars/: Содержит файлы с переменными групп хостов. В данном случае all.yml содержит общие переменные для всех ролей и хостов.
• roles/: Основная директория с ролями Ansible. - **ssl_certificate/**: Роль для генерации самоподписанных SSL сертификатов для прокси-сервера.
o firewall/: Роль для настройки и конфигурирования файрвола (firewalld), открытия необходимых портов. - **tasks/**: Задачи для установки OpenSSL, создания директории для сертификатов и генерации самоподписанных сертификатов.
 tasks/: Задачи для установки и настройки firewalld. - **vars/**: Переменные, используемые в роли `ssl_certificate`.
 vars/: Переменные, используемые в роли firewall.
o nginx_proxy/: Роль для установки и настройки Nginx как прокси-сервера с балансировкой нагрузки и проверкой состояния. - **playbook.yml**: Основной Ansible playbook, который связывает все роли и определяет порядок их выполнения на соответствующих хостах.
 tasks/: Задачи для установки Nginx и деплоя конфигурации прокси.
 templates/: Шаблоны конфигурационных файлов Nginx для прокси-сервера. - **inventory.yml**: Файл инвентаризации, содержащий информацию о целевых хостах и группах (`SiteA`, `SiteB`, `proxy`).
 vars/: Переменные, используемые в роли nginx_proxy.
o nginx_site/: Роль для установки и настройки Nginx на целевых сайтах (SiteA и SiteB), а также деплоя HTML контента. - **ansible.cfg**: Конфигурационный файл Ansible, определяющий пути к ролям и другие настройки.
 tasks/: Задачи для установки Nginx, создания корневых директорий сайтов, деплоя конфигураций и HTML файлов.
 templates/: Шаблоны конфигурационных файлов Nginx и HTML страниц для сайтов. - **Jenkinsfile**: Скрипт для Jenkins Pipeline, который управляет процессом деплоя, включая расшифровку SSH ключей, передачу переменных и запуск Ansible playbook.
 vars/: Переменные, используемые в роли nginx_site.
o ssl_certificate/: Роль для генерации самоподписанных SSL сертификатов для прокси-сервера. ## Параметры и Их Назначение
 tasks/: Задачи для установки OpenSSL, создания директории для сертификатов и генерации самоподписанных сертификатов.
 vars/: Переменные, используемые в роли ssl_certificate. ### В `group_vars/all.yml`
• playbook.yml: Основной Ansible playbook, который связывает все роли и определяет порядок их выполнения на соответствующих хостах.
• inventory.yml: Файл инвентаризации, содержащий информацию о целевых хостах и группах (SiteA, SiteB, proxy). - **siteA**:
• ansible.cfg: Конфигурационный файл Ansible, определяющий пути к ролям и другие настройки. - `site_title`: Заголовок страницы SiteA.
• Jenkinsfile: Скрипт для Jenkins Pipeline, который управляет процессом деплоя, включая расшифровку SSH ключей, передачу переменных и запуск Ansible playbook. - `site_h1`: Основной заголовок `<h1>` на странице SiteA.
Параметры и Их Назначение - `site_h2`: Дополнительный заголовок `<h2>` для SiteA.
В group_vars/all.yml - `site_p`: Параграф `<p>` контента для SiteA.
• siteA: - `site_domain`: Доменное имя SiteA.
o site_title: Заголовок страницы SiteA. - `site_ip`: IP-адрес сервера SiteA.
o site_h1: Основной заголовок <h1> на странице SiteA.
o site_h2: Дополнительный заголовок <h2> для SiteA. - **siteB**:
o site_p: Параграф <p> контента для SiteA. - `site_title`: Заголовок страницы SiteB.
o site_domain: Доменное имя SiteA. - `site_h1`: Основной заголовок `<h1>` на странице SiteB.
o site_ip: IP-адрес сервера SiteA. - `site_h2`: Дополнительный заголовок `<h2>` для SiteB.
• siteB: - `site_p`: Параграф `<p>` контента для SiteB.
o site_title: Заголовок страницы SiteB. - `site_domain`: Доменное имя SiteB.
o site_h1: Основной заголовок <h1> на странице SiteB. - `site_ip`: IP-адрес сервера SiteB.
o site_h2: Дополнительный заголовок <h2> для SiteB.
o site_p: Параграф <p> контента для SiteB. - **proxy**:
o site_domain: Доменное имя SiteB. - `proxy_domain`: Доменное имя прокси-сервера.
o site_ip: IP-адрес сервера SiteB. - `proxy_ip`: IP-адрес прокси-сервера.
• proxy:
o proxy_domain: Доменное имя прокси-сервера. ### В `Jenkinsfile`
o proxy_ip: IP-адрес прокси-сервера.
В Jenkinsfile - **ADDITIONAL_CONTENT_SITEA_H2**: Дополнительный контент для заголовка `<h2>` на SiteA.
• ADDITIONAL_CONTENT_SITEA_H2: Дополнительный контент для заголовка <h2> на SiteA. - **ADDITIONAL_CONTENT_SITEA_P**: Дополнительный параграф `<p>` для SiteA.
• ADDITIONAL_CONTENT_SITEA_P: Дополнительный параграф <p> для SiteA. - **ADDITIONAL_CONTENT_SITEB_H2**: Дополнительный контент для заголовка `<h2>` на SiteB.
• ADDITIONAL_CONTENT_SITEB_H2: Дополнительный контент для заголовка <h2> на SiteB. - **ADDITIONAL_CONTENT_SITEB_P**: Дополнительный параграф `<p>` для SiteB.
• ADDITIONAL_CONTENT_SITEB_P: Дополнительный параграф <p> для SiteB.
В Ролях ### В Ролях
• firewall/vars/main.yml:
o firewall_ports: Список портов и протоколов, которые необходимо открыть в файрволе (например, SSH, HTTP, HTTPS). - **firewall/vars/main.yml**:
• nginx_proxy/vars/main.yml: - `firewall_ports`: Список портов и протоколов, которые необходимо открыть в файрволе (например, SSH, HTTP, HTTPS).
o upstream_servers: Список IP-адресов бэкенд-серверов (SiteA и SiteB) для балансировки нагрузки.
• ssl_certificate/vars/main.yml: - **nginx_proxy/vars/main.yml**:
o ssl_cert_path: Путь к директории, где будут храниться SSL сертификаты. - `upstream_servers`: Список IP-адресов бэкенд-серверов (`SiteA` и `SiteB`) для балансировки нагрузки.
o ssl_cert_file: Имя SSL сертификата.
o ssl_key_file: Имя ключа SSL сертификата. - **ssl_certificate/vars/main.yml**:
o ssl_subject: Параметры для генерации самоподписанного SSL сертификата. - `ssl_cert_path`: Путь к директории, где будут храниться SSL сертификаты.
Как Использовать - `ssl_cert_file`: Имя SSL сертификата.
1. Настройка Инвентаря: Отредактируйте inventory.yml, указав правильные IP-адреса и пользователя для каждого хоста. - `ssl_key_file`: Имя ключа SSL сертификата.
2. Шифрование SSH Ключей: Используйте Ansible Vault для шифрования приватных SSH ключей и сохраните их в безопасном месте. - `ssl_subject`: Параметры для генерации самоподписанного SSL сертификата.
3. Настройка Jenkins:
o Добавьте необходимые креденшелы (пароли, SSH ключи) в Jenkins. ## Как Использовать
o Убедитесь, что Jenkins имеет доступ к Ansible и может выполнять playbook.
4. Запуск Pipeline: ### Настройка Инвентаря
o Введите необходимый контент для каждого сайта в соответствующие поля Jenkins.
o Запустите Jenkins Pipeline и следите за его выполнением. Отредактируйте `inventory.yml`, указав правильные IP-адреса и пользователя для каждого хоста:
5. Мониторинг и Проверка:
o Проверьте доступность сайтов и корректность балансировки нагрузки через прокси-сервер. ```yaml
o Убедитесь, что health checks работают корректно и автоматически перенаправляют трафик при сбоях. all:
Дополнительная Информация children:
• Автоматизация Health Check: Конфигурация Nginx прокси-сервера настроена для автоматического перенаправления трафика на рабочие бэкенды без необходимости ручной перезагрузки. SiteA:
• Динамическое Обновление Контента: Использование параметров в Jenkins позволяет легко обновлять содержимое сайтов без изменения конфигурационных файлов вручную. 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