222 lines
13 KiB
Markdown
222 lines
13 KiB
Markdown
# Ansible Jenkins Deployment Pipeline
|
||
|
||
## Обзор
|
||
|
||
Этот репозиторий содержит проект Ansible, интегрированный с Jenkins, для автоматизации развёртывания двух веб-сайтов (`SiteA` и `SiteB`) и прокси-сервера (`Proxy`). Настройка обеспечивает балансировку нагрузки, автоматические проверки состояния (health checks) и динамическое обновление контента без ручного вмешательства. Дополнительно внедрены обработчики для перезапуска служб при изменении конфигурации и централизованное управление основным конфигурационным файлом Nginx через `group_vars`.
|
||
|
||
## Описание Компонентов
|
||
|
||
- **group_vars/**: Содержит файлы с переменными групп хостов. В `all.yml` определены общие переменные для всех ролей и хостов, включая параметры для Nginx и контент для сайтов.
|
||
|
||
- **roles/**: Основная директория с ролями Ansible.
|
||
|
||
- **firewall/**:
|
||
- **handlers/**: Содержит обработчики для перезапуска `firewalld`.
|
||
- **tasks/**: Задачи для установки и настройки `firewalld`, открытия необходимых портов.
|
||
- **vars/**: Переменные, используемые в роли `firewall`.
|
||
|
||
- **nginx_proxy/**:
|
||
- **handlers/**: Содержит обработчики для перезапуска Nginx.
|
||
- **tasks/**: Задачи для установки Nginx, создания директорий, деплоя конфигураций и тестирования конфигурации.
|
||
- **templates/**: Шаблоны конфигурационных файлов Nginx для прокси-сервера и страниц ошибок.
|
||
|
||
- **nginx_site/**:
|
||
- **handlers/**: Содержит обработчики для перезапуска Nginx.
|
||
- **tasks/**: Задачи для установки Nginx, создания корневых директорий сайтов, деплоя конфигураций и HTML файлов, а также тестирования конфигурации.
|
||
- **templates/**: Шаблоны конфигурационных файлов Nginx и HTML страниц для сайтов.
|
||
|
||
- **ssl_certificate/**:
|
||
- **handlers/**: Содержит обработчики для перезапуска Nginx после генерации SSL сертификатов.
|
||
- **tasks/**: Задачи для установки OpenSSL, создания директории для сертификатов и генерации самоподписанных сертификатов.
|
||
- **templates/**: Шаблоны или скрипты для генерации SSL сертификатов.
|
||
|
||
- **playbook.yml**: Основной Ansible playbook, который связывает все роли и определяет порядок их выполнения на соответствующих хостах.
|
||
|
||
- **inventory.yml**: Файл инвентаризации, содержащий информацию о целевых хостах и группах (`SiteA`, `SiteB`, `proxy`).
|
||
|
||
- **ansible.cfg**: Конфигурационный файл Ansible, определяющий пути к ролям и другие настройки.
|
||
|
||
- **jenkinsfile**: Скрипт для Jenkins Pipeline, который управляет процессом деплоя, включая расшифровку SSH ключей, передачу переменных и запуск Ansible playbook.
|
||
|
||
## Параметры и Их Назначение
|
||
|
||
### В `group_vars/all.yml`
|
||
|
||
```yaml
|
||
# group_vars/all.yml
|
||
ansible_python_interpreter: /usr/bin/python3.6
|
||
|
||
# Общие переменные для 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
|
||
|
||
# Переменные для сайтов 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"
|
||
|
||
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`
|
||
|
||
- **DEPLOY_TARGET**: Выбор цели развертывания (`SiteA`, `SiteB`, `All`).
|
||
- **ADDITIONAL_CONTENT_SITEA_H2**: Дополнительный контент для заголовка `<h2>` на SiteA.
|
||
- **ADDITIONAL_CONTENT_SITEA_P**: Дополнительный параграф `<p>` для SiteA.
|
||
- **ADDITIONAL_CONTENT_SITEB_H2**: Дополнительный контент для заголовка `<h2>` на SiteB.
|
||
- **ADDITIONAL_CONTENT_SITEB_P**: Дополнительный параграф `<p>` для SiteB.
|
||
|
||
### В Ролях
|
||
|
||
- **firewall/vars/main.yml**:
|
||
- `firewall_ports`: Список портов и протоколов, которые необходимо открыть в файрволе (например, SSH, HTTP, HTTPS).
|
||
|
||
- **nginx_proxy/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
|
||
ansible_python_interpreter: /usr/bin/python3.6
|
||
SiteB:
|
||
hosts:
|
||
192.168.0.62:
|
||
ansible_user: ansible
|
||
ansible_python_interpreter: /usr/bin/python3.6
|
||
proxy:
|
||
hosts:
|
||
192.168.0.63:
|
||
ansible_user: ansible
|
||
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 ключи и пароли.
|
||
|
||
https://cyeta12.online/nextcloud/s/5fnYWrw5qN8RdaY |