Развертывание веб-сервера NGINX#

Использование коллекции astra.nginx из реестра Automation Hub позволяет автоматизировать процесс установки и настройки веб-сервера NGINX на необходимом количестве узлов.

Описание сценария#

Процесс установки и настройки веб-сервера NGINX состоит из следующих этапов:

  1. Создание стенда.

    В качестве стенда рекомендуется использовать управляемые узлы, обладающие следующими характеристиками:

    Характеристика

    Значение

    Кол-во ядер CPU

    ≥ 2

    Кол-во RAM, ГБ

    ≥ 2

    Размер хранилища, ГБ

    ≥ 20

    ОС

    Astra Linux Special Edition 1.7.5uu1

    Для подключения к стенду используется протокол SSH.

    Если у вас нет подходящего стенда, вы можете создать его с помощью Vagrant, используя приложенный Vagrantfile.

  2. Подготовка проекта Ansible.

    • requirements.yml – зависимости;

    • ansible.cfg – настройки Ansible;

    • inventory.ini – инвентарь;

    • playbooks/nginx.yml – playbook, содержащий сценарий настройки управляемых узлов.

    В демонстрационных целях для NGINX задаются следующие настройки:

    • worker_connections – 2048;

    • keepalive_timeout – 30.

  3. Запуск playbook.

  4. Проверка работоспособности развернутой инфраструктуры.

Подготовка к работе#

Подготовьте окружение к управлению задачами автоматизации:

  1. Настройте управляемые узлы согласно инструкций:

  2. Согласно инструкции настройте Private Automation Hub на синхронизацию с Automation Hub.

  3. Синхронизируйте Private Automation Hub с Automation Hub. Убедитесь, что коллекция astra.nginx загружена в репозиторий, доступный пользователям.

  4. Изучите описание коллекции astra.nginx.

  5. Подготовьте каталог для хранения файлов проекта.

    Если для управления задачами автоматизации используется Automation Controller, выполните следующие действия:

    1. В одном из сервисов хранения репозиториев Git создайте пустой репозиторий для проекта.

    2. Клонируйте этот репозиторий на локальный компьютер.

    Если для управления задачами автоматизации используется Ansible Navigator, создайте в любом удобном месте пустой каталог, например:

    mkdir ~/ansible-nginx/
    

Подготовка проекта Ansible#

Подготовьте ресурсы, необходимые для использования Ansible.

  1. Создайте файл ansible.cfg со следующим содержимым:

    [defaults]
    ansible_python_interpreter = /usr/bin/python3
    host_key_checking = false
    inventory = inventory.ini
    
    [galaxy]
    server_list = galaxy, private_automation_hub
    
    [galaxy_server.galaxy]
    url = https://galaxy.ansible.com/
    
    [galaxy.private_automation_hub]
    url = <private_automation_hub_repository_url>
    

    Согласно инструкции добавьте в ansible.cfg настройки, обеспечивающие доступ к репозиторию Private Automation Hub, содержащему коллекцию astra.nginx.

  2. Создайте файл инвентаря inventory.ini, например:

    [all]
    node1.example.com   ansible_host=192.168.56.11   ansible_user=vagrant
    

    В этом примере показаны настройки подключения к одному управляемому узлу.

  3. Создайте файл зависимостей Ansible requirements.yml:

    ---
    collections:
      - name: astra.nginx
        version: 1.8.3
    

    В этом файле указаны параметры подключаемой коллекции:

    • name – название;

    • version – версия.

      Важно

      Для получения актуального номера версии коллекции обратитесь к ее описанию в Private Automation Hub.

  4. Создайте подкаталог playbooks/, а в нем – файл сценария nginx.yml:

    ---
    - name: Install and configure NGINX server
      hosts: all
      become: true
    
      roles:
        - role: astra.nginx.nginx
          vars:
            nginx_worker_connections: 2048
            nginx_keepalive_timeout: 30
    

    В этом файле настройки NGINX заданы через значения переменных роли astra.nginx.nginx.

  5. Выполните дополнительные настройки, соответствующие выбранному инструменту для управления задачами автоматизации.

    Если для запуска заданий автоматизации используется Automation Controller, выполните следующие действия:

    1. Зафиксируйте сделанные в проекте изменения и опубликуйте их в репозитории Git.

    2. Согласно инструкции создайте в контроллере полномочие, обеспечивающее доступ к Private Automation Hub.

    Если для управления задачами автоматизации используется Ansible Navigator, выполните команду установки зависимостей:

    ansible-navigator exec -- ansible-galaxy collection install -r requirements.yml
    

    Если настройки выполнены корректно, в терминал выводятся сообщения следующего вида:

    Starting galaxy collection install process
    Process install dependency map
    Starting collection install process
    Downloading https://hub.astra-automation.ru/api/galaxy/v3/plugin/ansible/content/validated/collections/artifacts/astra-nginx-1.8.3.tar.gz to /root/.ansible/tmp/ansible-local-157z5isxaa/tmpdjhla2qi/astra-nginx-1.8.3-kzmwnb1x
    Installing 'astra.nginx:1.8.3' to '/home/vagrant/nginx/collections/ansible_collections/astra/nginx'
    astra.nginx:1.8.3 was installed successfully
    

Запуск playbook#

Способ запуска playbook зависит от инструмента, используемого для управления задачами автоматизации.

Для запуска задания автоматизации в Automation Controller выполните следующие действия:

  1. Для доступа к управляемым узлам создайте необходимое количество полномочий типа Машина.

  2. Если для доступа к репозиторию с кодом проекта требуется авторизация, создайте полномочие типа Система управления версиями.

  3. Создайте проект со следующими свойствами:

    • Название: NGINX.

    • Тип системы управления исходными данными: Git.

    • URL системы управления исходными данными: укажите ссылку на репозиторий с кодом проекта.

    • Полномочия на систему управления исходными данными: если для доступа к репозиторию с кодом проекта требуется авторизация, выберите созданное ранее полномочие типа «Система управления версиями».

  4. Создайте обычный инвентарь и добавьте в него сведения об управляемых узлах.

    Совет

    Вы можете использовать файл inventory.ini в качестве источника сведений об управляемых узлах.

  5. Создайте шаблон задания со следующими свойствами:

    • Тип задания: Выполнение.

    • Инвентарь: выберите инвентарь, созданный на предыдущем шаге.

    • Проект: выберите проект NGINX.

    • Playbook: выберите файл playbooks/nginx.yml.

  6. Запустите задание на основе созданного шаблона.

При использовании Ansible Navigator для запуска playbook выполните команду:

ansible-navigator run playbooks/nginx.yml

При этом открывается псевдографический интерфейс, в котором показывается ход выполнения, например:

  Play name                           Ok Changed Unreachable  Failed Skipped Ignored In progress  Task count   Progress
0│Install and configure NGINX server   5       0           0       0       0       0           1           6   ▇▇▇▇▇▇


^b/PgUp page up       ^f/PgDn page down       ↑↓ scroll       esc back       [0-9] goto       :help help      Running

Для просмотра более подробной информации о ходе выполнения нажмите 0.

Статус задания выводится в правом нижнем углу. Дождитесь перехода задания в статус Successful.

Проверка работоспособности развернутой инфраструктуры#

Чтобы проверить корректность развертывания веб-сервера NGINX, выполните следующие действия:

  1. Подключитесь к любому из управляемых узлов по SSH.

  2. Для проверки статуса службы nginx выполните команду:

    systemctl status nginx
    

    При успешном развертывании в терминал выводится сообщение вида:

     ● nginx.service - A high performance web server and a reverse proxy server
        Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
        Active: active (running) since Mon 2024-10-21 09:28:25 MSK; 2h 22min ago
          Docs: man:nginx(8)
      Main PID: 643 (nginx)
         Tasks: 3 (limit: 2586)
        Memory: 4.6M
           CPU: 14ms
        CGroup: /system.slice/nginx.service
                ├─643 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
                ├─645 nginx: worker process
                └─646 nginx: worker process
    
  3. Убедитесь, что в файле /etc/nginx/nginx.conf значения параметров worker_connections и keepalive_timeout соответствуют заданным в playbook.

Особенности проекта#

Обратите внимание на следующие особенности проекта:

  • Порядок подключения коллекции.

  • Настройка проекта на использование Private Automation Hub для загрузки коллекций.

  • Настройка параметров роли.

  • Настройка параметров Ansible.

Заключение#

В этом сценарии вы познакомились с основными шагами по развертыванию веб-сервера NGINX с использованием коллекции astra.nginx. Из всей последовательности шагов важно выделить следующие действия:

  • Подготовка окружения.

  • Описание коллекции в файле зависимостей.

  • Описание параметров доступа к управляемым узлам в файле инвентаря.

  • Связывание управляемых узлов и ролей в playbook.

  • Запуск playbook с помощью Ansible Navigator и в Automation Controller.

  • Проверка корректности развертывания NGINX.