Веб-сервер NGINX#

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

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

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

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

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

    В качестве стенда в этом руководстве используется ВМ VirtualBox, созданная с помощью Vagrant.

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

    • количество ядер CPU – 2;

    • объем RAM, ГБ – 2;

    • объем хранилища, ГБ – 30;

    • операционная система – Astra Linux Special Edition 1.7.4 без графического интерфейса;

    • уровень защищенности ОС – максимальный («Смоленск»).

  2. Подготовка файлов Ansible:

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

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

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

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

  3. Настройка стенда с помощью Ansible.

    Для запуска Ansible используется образ, описанный в документе Среда исполнения.

Настройки разворачиваемого веб-сервера NGINX отличаются от значений по умолчанию:

  • worker_connections – 2048;

  • keepalive_timeout – 30.

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

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

Подготовьте рабочее окружение:

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

  2. Подготовьте управляющий узел к работе с реестром Astra Automation Hub и стендом согласно инструкции.

  3. Установите VirtualBox, Vagrant и его расширение для работы с образами Astra Linux согласно инструкции.

  4. Создайте каталог для хранения файлов проекта, например:

    mkdir ~/nginx/
    

    Примечание

    Далее этот каталог будет называться каталогом проекта. Все упомянутые ниже файлы следует создавать в этом каталоге, если явно не указано иное.

  5. Согласно инструкции создайте пару ключей SSH, которая будет использоваться для подключения к ВМ.

Развертывание ВМ#

Для подготовки ВМ выполните следующие действия:

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

    # frozen_string_literal: true
    
    Vagrant.configure('2') do |config|
      # Настройки Vagrant Box
      config.vm.box = 'alse-vanilla-max/1.7.4' # Имя бокса
      config.vm.box_url = 'https://dl.astralinux.ru/vagrant/alse-vanilla-max%2F1.7.4'
    
      # Настройки SSH
      config.vm.provision 'file',
                          source: '~/.ssh/deployment.pub',
                          destination: '/home/vagrant/.ssh/deployment.pub'
    
      config.vm.provision 'shell',
                          inline: 'cat /home/vagrant/.ssh/deployment.pub >> /home/vagrant/.ssh/authorized_keys'
    
      # Настройка параметров ВМ
      config.vm.define 'host01' do |node|
        node.vm.hostname = 'host01' # Короткое имя хоста
    
        # Настройки, специфичные для VirtualBox
        node.vm.provider 'virtualbox' do |vb|
          vb.cpus = 2 # Кол-во ядер CPU
          vb.memory = 2296 # Объем RAM, МБ
        end
    
        # Параметры сети
        node.vm.network 'private_network',
                        ip: '192.168.56.11', # Статический IP-адрес
                        virtualbox__host_ip: '192.168.56.1', # Шлюз
                        virtualbox__netmask: '255.255.255.0', # Маска подсети
                        virtualbox__dhcp_enabled: false # Запрет использования DHCP
      end
    end
    
  2. Для создания и запуска ВМ с помощью Vagrant в каталоге проекта выполните команду:

    vagrant up
    

Подготовка Ansible#

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

  1. Создайте файл ansible.cfg, содержащий настройки Ansible для проекта:

    [defaults]
    collections_path = ./collections
    ansible_python_interpreter = /usr/bin/python3
    inventory = inventory
    host_key_checking = false
    

    Здесь:

    • collections_path – путь к каталогу, в который будут загружены файлы коллекции astra.nginx.

    • host_key_checking – проверка ключей SSH при подключении к управляемым узлам. В данном случае она отключена, так как playbook запускается внутри контейнера.

    • ansible_python_interpreter – версия Python, которую следует использовать на управляемых узлах.

    • inventory – путь к файлу инвентаря.

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

    [all]
    host01 ansible_host=192.168.56.11 ansible_user=vagrant ansible_ssh_private_key_file=/root/.ssh/deployment
    

    В этом файле содержатся настройки подключения к управляемому узлу host01:

    • Название учетной записи пользователя – vagrant.

    • IP-адрес – 192.168.56.11.

      Должен совпадать с IP-адресом, указанным в Vagrantfile.

    • Путь к файлу приватного ключа SSH, используемого для подключения к ВМ.

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

    ---
    collections:
      - name: astra.nginx
        type: git
        version: 1.6.0
        source: ssh://git@hub.astra-automation.ru:2222/aa-gca/ARFA/nginx.git
    

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

    • name – название коллекции из реестра Astra Automation Hub, в данном случае – astra.nginx.

    • type – способ установки. Для установки коллекций из реестра Astra Automation Hub используется Git.

    • version – версия используемой коллекции, 1.6.0.

    • source – ссылка на репозиторий Git, в котором хранится коллекция.

  4. Создайте файл playbook playbook-nginx.yml:

    ---
    - name: Install NGINX server
      hosts: host01
      become: true
      gather_facts: true
    
      roles:
        - role: astra.nginx.nginx
          vars:
            nginx_worker_connections: 2048
            nginx_keepalive_timeout: 30
    

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

Запуск playbook#

Чтобы развернуть веб-сервер NGINX с параметрами, описанными в конфигурационном файле playbook-nginx.yml, выполните в каталоге проекта следующие действия:

  1. Запустите Docker-контейнер с EE:

    docker run \
      --rm \
      --interactive \
      --tty \
      --volume ~/.ssh/deployment:/root/.ssh/deployment \
      --volume ~/.ssh/hub.astra-automation.ru:/root/.ssh/id_rsa \
      --volume "$(pwd):/app/" \
      registry.astralinux.ru/aa/aa-base-ee:0.2.1 \
      bash -c 'ansible-galaxy collection install -r requirements.yml && `
              `ansible-playbook playbook-nginx.yml'
    

    Подробное описание EE см. в документе Среда исполнения.

  2. В терминал выводится сообщение о подключении к Astra Automation Hub:

    Cloning into '/root/.ansible/tmp/ansible-local-*********/************/nginx********'...
    The authenticity of host '[hub.astra-automation.ru]:2222 ([84.201.175.30]:2222)' can't be established.
    ECDSA key fingerprint is SHA256:bvbETX8oC4ZwFtiE30SCN6yOQxRyOjgGO+lq2U2Dy00.
    Are you sure you want to continue connecting (yes/no)?
    

    Введите значение yes и нажмите Enter.

  3. Если приватный ключ для доступа к реестру Astra Automation Hub защищен паролем, будет выведен запрос на его ввод:

    Enter passphrase for key '/root/.ssh/id_rsa':
    

    Введите пароль и нажмите Enter. Дождитесь выполнения playbook, это может занять некоторое время. По окончании выполнения в терминал выводится строка вида:

    host01       : ok=8   changed=6   unreachable=0   failed=0   skipped=8   rescued=0   ignored=0
    

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

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

  1. Подключитесь к ВМ по SSH:

    vagrant 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; vendoer preset: enabled)
         Active: active (running) since Tue 2023-04-18 08:57:44 MSK; 11s ago
           Docs: man:nginx(8)
       Main PID: 7970 (nginx)
          Tasks: 5 (limit: 4621)
         Memory: 4,9M
            CPU: 953ms
         CGroup: /system.slice/nginx.service
                 ├─7970 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
                 ├─7973 nginx: worker process
                 ├─7974 nginx: worker process
                 ├─7975 nginx: worker process
                 └─7976 nginx: worker process
    
  3. Убедитесь, что в файле /etc/nginx/nginx.conf значения параметров worker_connections и keepalive_timeout соответствуют заданным в playbook.

  4. Для отключения от ВМ выполните команду:

    exit
    

Освобождение ресурсов#

Если созданная ВМ больше не нужна, для ее остановки и удаления выполните в каталоге проекта команду:

vagrant destroy --force

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

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

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

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

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

  • Параметры, передаваемые в EE при запуске Ansible.

Заключение#

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

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

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

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

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

  • Запуск playbook в среде исполнения.

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