Этот репозиторий содержит проект Ansible, интегрированный с Jenkins, для автоматизации развёртывания двух веб-сайтов (`SiteA` и `SiteB`) и прокси-сервера (`Proxy`). Настройка обеспечивает балансировку нагрузки, автоматические проверки состояния (health checks) и динамическое обновление контента без ручного вмешательства. Дополнительно внедрены обработчики для перезапуска служб при изменении конфигурации и централизованное управление основным конфигурационным файлом Nginx через `group_vars`.
- **group_vars/**: Содержит файлы с переменными групп хостов. В`all.yml` определены общие переменные для всех ролей и хостов, включая параметры для Nginx и контент для сайтов.
- **jenkinsfile**: Скрипт для Jenkins Pipeline, который управляет процессом деплоя, включая расшифровку SSH ключей, передачу переменных и запуск Ansible playbook.
Все переменные, используемые в проектах, определены в `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 ключи и пароли.