Go to file
2024-11-25 19:54:51 +03:00
ansible fix bugs 2024-11-25 19:54:51 +03:00
.gitignore lftaver1.0 add nginx and proxy 2024-11-05 00:14:05 +03:00
docker-compose.yml lftaver1.0 add nginx and proxy 2024-11-05 00:14:05 +03:00
README.md readme update 2024-11-25 18:45:26 +03:00

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

# 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-адреса и пользователя для каждого хоста:

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. Подключитесь к Целевым Серверам: Проверьте статус служб и конфигурационных файлов.

    systemctl status nginx
    systemctl status firewalld
    
  3. Проверьте Конфигурацию Nginx: Убедитесь, что конфигурационные файлы корректны.

    nginx -t
    
  4. Просмотрите Логи Nginx:

    sudo journalctl -xeu nginx.service
    sudo tail -n 100 /var/log/nginx/error.log
    

Пример Запуска Playbook Локально

Для локального тестирования или отладки вы можете запустить playbook вручную:

ansible-playbook playbook.yml

Дополнительные Возможности

  • Автоматическое Тестирование Конфигураций: Playbook включает задачи для тестирования конфигурации Nginx перед запуском службы, предотвращая запуск с ошибками.

  • Обработчики (Handlers): Автоматический перезапуск служб nginx и firewalld при изменении конфигурационных файлов.

  • Централизованное Управление Конфигурацией: Основной конфигурационный файл Nginx управляется через шаблоны и переменные в group_vars/all.yml.

Рекомендации и Лучшие Практики

  1. Безопасность:

    • Используйте Ansible Vault для защиты чувствительных данных.
    • Убедитесь, что SSH ключи и другие секреты не попадают в систему контроля версий.
  2. Документация:

    • Поддерживайте актуальную документацию, описывающую структуру проекта и инструкции по развертыванию.
  3. Тестирование:

    • Используйте инструменты вроде Molecule для тестирования Ansible ролей.
    • Внедрите проверку конфигураций перед применением изменений.
  4. Управление Конфигурациями:

    • Централизуйте общие конфигурационные файлы для облегчения управления и уменьшения дублирования.
    • Используйте обработчики для автоматического применения изменений.
  5. Мониторинг и Логирование:

    • Внедрите системы мониторинга для отслеживания состояния сервисов.
    • Анализируйте логи для своевременного обнаружения и устранения проблем.

Заключение

Этот проект демонстрирует эффективное использование Ansible и Jenkins для автоматизации развёртывания веб-сайтов и прокси-сервера с учётом безопасности, надёжности и удобства управления. Следуя приведённым инструкциям и рекомендациям, вы сможете быстро адаптировать и расширять данное решение под свои нужды.

Если у вас возникнут дополнительные вопросы или потребуется помощь с настройкой, не стесняйтесь обращаться!


Примечания:

  • Убедитесь, что все переменные правильно определены и соответствуют вашим требованиям.
  • При необходимости, обновите пути и имена файлов в соответствии с вашей инфраструктурой.
  • Для улучшения безопасности рассмотрите использование Ansible Vault для хранения чувствительных данных, таких как SSH ключи и пароли.

Если возникнут дополнительные вопросы или потребуется помощь с настройкой, не стесняйтесь обращаться!