Общее описание
Система NAICE поставляется в виде образов для запуска контейнеров в системе контейнеризации и управления приложениями Docker. Для управления всеми компонентами системы используется плагин Docker Compose, предназначенный для решения различных задач для мультиконтейнерных приложений. БД Postgres может быть при необходимости установлена в виде приложения.
Для автоматизации установки используются плейбуки Ansible.
Установка
Ниже приведена инструкция по выполнению однохостовой установки.
Инструкция по установке с резервированием системы приведена в статье v0.8_3.6 Резервирование.
Установка Ansible
Для запуска плейбуков необходимо установить Ansible на хост, с которого есть доступ по SSH до целевого хоста.
Запускать плейбук непосредственно на целевом хосте не рекомендуется.
Рекомендуемая ОС хоста для запуска плейбука - Ubuntu 22.04 Jammy и новее.
Минимальная версия Ansible для корректной работы плейбуков установки 2.10.8.
Официальная документация по установке Ansible.
Помимо способов, описанных в документации, возможна установка ПО на Linux-хост через утилиту apt
:
sudo apt install ansible
Пакет доступен в базовых репозиториях большинства дистрибутивов Linux.
Получение файлов для работы плейбука
NAICE является лицензируемым продуктом, для активации функционала необходима лицензия. См. v0.8_2. Лицензирование.
На момент установки наличие лицензии необязательно, активировать продукт можно позже.
До активации лицензии используется демо режим, в котором ограничено максимально количество сетевых устройств и активных эндпоинтов количеством 15 шт.
Для разворачивания системы необходимо поместить приложенный архив naice-v0.8-ansible.tar.gz на хост, с которого будет осуществляться запуск плейбука, в отдельную папку.
Архив можно скачать командой:
wget https://docs.eltex-co.ru/download/attachments/590781551/naice-v0.8-ansible.tar.gz
Затем необходимо распаковать архив:
tar -xzvf naice-v0.8-ansible.tar.gz
Предварительная подготовка перед установкой
Подготовка хоста, с которого будет выполняться запуск плейбуков Ansible
Установите утилиту
sshpass
, если она не установлена, командой:sudo apt install sshpass
Опционально: требуется только если планируется разворачивать СУБД Postgresql в виде deb-пакетов (по умолчанию установка выполняется в виде docker-контейнеров). Установите коллекции Ansible, необходимые для работы плейбуков:
ansible-galaxy collection install community.postgresql
Настройка доступа к хостам для установки
Для настройки хоста, на который будет выполняться развертывание системы, требуется отредактировать файл
hosts.yml
. В переменнойansible_host
необходимо указать IP-адрес или доменное имя целевого хоста:--- common: hosts: common_host: ansible_host: <IP-адрес или доменное имя хоста для NAICE>
Указанный IP-адрес или доменное имя хоста будет добавлен в параметр в Subject Alternative Name при генерации самоподписанного сертификата во время установки сервисов NAICE.
Создать конфигурационный файл
ansible.cfg
из шаблона:cp -v ansible.cfg.template ansible.cfg
- Настроить режим доступа к хосту по SSH в файле
ansible.cfg
в зависимости от предпочитаемого варианта:по логину/паролю:
[defaults] inventory = hosts.yml host_key_checking = False deprecation_warnings = False
и дополнить
hosts.yml
:--- common: hosts: common_host: ansible_host: <IP-адрес или доменное имя хоста для NAICE> ansible_user: <логин пользователя> ansible_ssh_pass: <пароль пользователя> ansible_become_pass: <пароль для повышения привилегий (sudo)>
по ключу (предварительно необходимо сгенерировать и поместить ключ на целевой хост):
[defaults] inventory = hosts.yml host_key_checking = True private_key_file = <путь к файлу ключа> deprecation_warnings = False
Проверить корректность указанных настроек и наличие доступа до удаленного хоста с помощью команд:
ansible all --list-hosts # проверить список хостов ansible all -m ping # проверить доступ до хостов
Пример вывода, если хост доступен:
common_host | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
Указание адреса сервера лицензий (при лицензировании с Offline ELM)
В случае, если выбрана схема лицензирования с Offline ELM, необходимо указать адрес сервера в файле переменных плейбука group_vars/all.yml
:
gulo_elm_server_url: https://<IP адрес Offline ELM>:<порт Offline ELM>
По умолчанию Offline ELM запущен на порту 8099.
Если лицензирование выполняется на центральном сервере компании "Элтекс" (Online ELM), то изменять значение переменной не нужно.
Между NAICE и ELM должна быть обеспечена сетевая связность. Для проверки доступности можно выполнить на хосте с NAICE команду:
curl -k https://<IP адрес ELM>:<порт ELM>/elm/Hello
Если сервер ELM доступен, то вывод команды будет иметь вид:
{"server-info":{"version":"1.4","build":"14","root":false,"serverType":"elm","daemonMode":"server","serverMode":"offline","protocolSupported":3,"protocolActual":3,"server-type":"elm","protocol-supported":3,"protocol-actual":3},"status":2,"result":"OK"}
Замена сертификатов по умолчанию для работы протокола EAP-PEAP (опционально)
- Для работы метода аутентифкации EAP-PEAP (по логину/паролю пользователя) требуется наличие валидного сертиката на стороне RADIUS-сервера NAICE. По умолчанию публичный сертифкат встроен в контейнер naice-radius и готов к работе. При необходимости замены данный сертифкат может быть заменен на другой. Для корректной установки потребуется:
Сертификат корневого сервера ЦС;
Сертификат для сервера NAICE;
Приватный ключ сертификата сервера NAICE.
Сертификаты требуется расположить в папке плейбуков Ansible roles/docker/files/tls.
В секции переменных плейбука
group_vars/all.yml
, отвечающих за установку сертификатов для работы EAP-PEAP требуется указать переменные, чтобы включить интеграцию:# параметры сертификатов # требует настройки ТОЛЬКО ЕСЛИ планируется использовать сторонний сертификат сервера в radius # перед запуском плейбука требуется создать папку сертификатов на целевой машине и положить в неё все требуемые сертификаты # для включения установки сертификатов протокола EAP необходимо расположить файлы сертификатов сервера в папке ansible/roles/docker/files/tls radius_cert_dir_copy: false # включить копирование сертификатов из директории ansible/roles/docker/files/tls radius_certs_ca_cert_file: trusted_server.crt # имя файла корневого (CA) сертификата radius_certs_private_key_file: trusted_server.k # имя файла приватного ключа сертификата сервера radius_certs_private_key_password: # пароль к файлу приватного ключа сертификата сервера, оставьте пустым, если файл приватного ключа не запаролен radius_certs_certificate_file: trusted_server_chain.crt # имя файла сертификата сервера
Описание параметров, которые необходимо настроить для работы протокола EAP-TLS:
Параметр Назначение radius_cert_dir_copy Переменная, отвечающая за копирование сертификатов из папки на целевой хост и использование их в сервисе nacie-radius. radius_certs_ca_cert_file Имя файла корневого сертификата ЦС. radius_certs_private_key_file Имя файла приватного ключа сервера. radius_certs_private_key_password Пароль к файлу приватного ключа сервера. Если значение не указано, считается что пароль не используется. В пароле не допускается использовать символы: $, ', ", `, знаки скобок и пробел.
radius_certs_certificate_file Имя файла сертификата, который будет использоваться naice-radius при подключении пользователя по протоколу EAP-PEAP.
Добавление сертификатов для работы протокола EAP-TLS (опционально)
Для работы метода аутентификации EAP-TLS, настройка которой подробно рассмотрена в разделе v0.8_4.7 Пример настройки EAP-TLS аутентификации, требуется выпустить сертификат, предназначенный для использования NAICE, и расположить его на хосте, с которого будет запускаться выполнение плейбука Ansible. Для корректной установки требуются:
Сертификат корневого сервера ЦС;
Сертификат для сервера NAICE;
Приватный ключ сертификата сервера NAICE.
Сертификаты требуется расположить в папке плейбуков Ansible roles/docker/files/eap-tls.
В секции переменных плейбука
group_vars/all.yml
, отвечающих за установку сертификатов для работы EAP-TLS требуется указать переменные, чтобы включить интеграцию:# параметры для авторизации по протоколу EAP-TLS # параметры сертификатов # для включения установки сертификатов протокола EAP-TLS необходимо расположить файлы сертификатов сервера в папке ansible/roles/docker/files/eap-tls radius_eap_tls_cert_dir_copy: false # включить (true) или выключить (false) копирование сертификатов из директории ansible/roles/docker/files/eap-tls radius_eap_tls_certs_ca_cert_file: trusted_server.crt # имя файла корневого (CA) сертификата radius_eap_tls_certs_private_key_file: trusted_server.k # имя файла приватного ключа сертификата сервера radius_eap_tls_certs_private_key_password: # пароль к файлу приватного ключа сертификата сервера, оставьте пустым, если файл приватного ключа не запаролен radius_eap_tls_certs_certificate_file: trusted_server_chain.crt # имя файла серверного сертификата # настройки проверки статуса отозванных сертификатов по протоколу OCSP radius_eap_tls_ocsp_enable: 'true' # Включение проверки статуса отзыва сертификата по протоколу OCSP radius_eap_tls_ocsp_override_url: 'true' # Использовать URL сервиса OCSP из сертификата radius_eap_tls_ocsp_url: 'http://100.110.2.12/ocsp' # URL для обращения к сервису OCSP radius_eap_tls_ocsp_softfail: 'true' # Мягкая проверка доступа к серверу проверки OSCP, если сервер недоступен, процесс не завершится, а продолжится radius_eap_tls_ocsp_timeout: 0 # Таймаут обращения к серверу OSCP radius_eap_tls_ocsp_use_nonce: 'true' # Позволяет включить одноразовый код в запрос - nonce, который может быть включен в соответствующий ответ
Описание параметров, которые необходимо настроить для работы протокола EAP-TLS:
Параметр Назначение radius_eap_tls_cert_dir_copy Переменная, отвечающая за копирование сертификатов из папки на целевой хост и использование их в сервисе nacie-radius. radius_eap_tls_certs_ca_cert_file Имя файла корневого сертификата ЦС. radius_eap_tls_certs_private_key_file Имя файла приватного ключа сервера. radius_eap_tls_certs_private_key_password Пароль к файлу приватного ключа сервера. Если значение не указано, считается что пароль не используется. В пароле не допускается использовать символы: $, ', ", `, знаки скобок и пробел.
radius_eap_tls_certs_certificate_file Имя файла сертификата, который будет использоваться naice-radius при подключении пользователя по протоколу EAP-TLS. radius_eap_tls_ocsp_enable Включить проверку статуса отзыва сертификата по протоколу OCSP (false | true). По умолчанию false (проверка отключена). radius_eap_tls_ocsp_override_url Откуда брать URL OCSP-сервера: false - использовать URL из сертификата клиента; true - использовать URL из настройки radius_eap_tls_ocsp_url. По умолчанию false. radius_eap_tls_ocsp_url URL для обращения к OCSP-серверу (разрешен только http-режим). radius_eap_tls_ocsp_softfail Поведение в случае недоступности OCSP-сервера (false | true): false - прекратить аутентификацию, если не удается получить доступ; true - продолжить аутентификацию без проверки отзыва сертификата, если OCSP-сервер не доступен. radius_eap_tls_ocsp_timeout Таймаут обращения к серверу OCSP (секунды). По умолчанию 0. radius_eap_tls_ocsp_use_nonce Включить одноразовый код nonce в запрос на проверку сертификата для предотвращения подмены запроса (false | true): false - не включать, true - включить. По умолчанию true.
Прочие переменные (опционально)
При необходимости измените значения других переменных окружения в group_vars/all.yml
. Например, можно изменить директорию установки сервисов NAICE или установить адрес NAICE, отличный от адреса управления.
Установка NAICE
Для установки сервисов NAICE используется плейбук install-naice.yml. В зависимости от указанного в переменной externally_installed_postgres в файле group_vars/all.yml СУБД POstgresql может быть установлена в виде контейнера докер или в виде deb-пакетов. По умолчанию установка СУБД Postgresql выполняется в контейнере вместе с с остальными сервисами NAICE.
Запустите плейбук install-naice.yml
для установки движка Docker, плагина Docker-compose и запуска через этот плагин сервисов NAICE:
если PostgreSQL планируется устанавливать в docker-контейнере (по умолчанию):
ansible-playbook install-naice.yml
если PostgreSQL планируется устанавливать в виде deb-пакетов:
Установка PostgreSQL как сервиса доступна только на хост с операционной системой Ubuntu 22.04 и Ubuntu 24.04.
ansible-playbook install-naice.yml -e "externally_installed_postgres=True"
Во время установки сервисов NAICE для пользовательских интерфейсов lemmus, gavia и larus автоматически выполняется генерация самоподписанного сертификата. При наличии собственного заверенного сертификата после установки сервисов предусмотрена возможность заменить самоподписанный сертификат на собственный. Подробную информацию об использовании сертификатов безопасности можно найти здесь.
Время запуска контейнеров в связи с использованием механизма healthcheck для проверки успешности старта сервисов может занять до нескольких минут. Дождитесь полного выполнения плейбука.
Проверка состояния сервисов после установки
Проверить успешность запуска контейнеров можно, перейдя в директорию для установки NAICE (по умолчанию - /etc/docker-naice/
) и выполнив команду для просмотра списка и статуса контейнеров docker compose ps -a
. Вывод команды должен быть примерно следующим:
$ sudo docker compose ps -a WARN[0000] /etc/docker-naice/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS naice-aquila naice-release.registry.eltex.loc/naice-aquila:0.8 "java -cp @/app/jib-…" naice-aquila 3 hours ago Up 3 hours (healthy) 0.0.0.0:49->49/tcp, [::]:49->49/tcp, 0.0.0.0:8091-8092->8091-8092/tcp, [::]:8091-8092->8091-8092/tcp naice-gavia naice-release.registry.eltex.loc/naice-gavia:0.8 "java -cp @/app/jib-…" naice-gavia 3 hours ago Up 3 hours (healthy) 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp naice-gulo naice-release.registry.eltex.loc/naice-gulo:0.8 "java -cp @/app/jib-…" naice-gulo 3 hours ago Up 3 hours (healthy) 0.0.0.0:8089-8090->8089-8090/tcp, [::]:8089-8090->8089-8090/tcp naice-lemmus naice-release.registry.eltex.loc/naice-lemmus:0.8 "java -cp @/app/jib-…" naice-lemmus 3 hours ago Up 3 hours (healthy) 0.0.0.0:8083->8083/tcp, [::]:8083->8083/tcp naice-lepus naice-release.registry.eltex.loc/naice-lepus:0.8 "java -cp @/app/jib-…" naice-lepus 3 hours ago Up 3 hours (healthy) 0.0.0.0:8087->8087/tcp, [::]:8087->8087/tcp, 0.0.0.0:67->1024/udp, [::]:67->1024/udp naice-nats naice-build-hosted.registry.eltex.loc/naice/nats:0.7.1 "docker-entrypoint.s…" nats 3 hours ago Up 3 hours (healthy) 0.0.0.0:4222->4222/tcp, [::]:4222->4222/tcp, 0.0.0.0:6222->6222/tcp, [::]:6222->6222/tcp, 0.0.0.0:7777->7777/tcp, [::]:7777->7777/tcp, 0.0.0.0:8222->8222/tcp, [::]:8222->8222/tcp naice-ovis naice-release.registry.eltex.loc/naice-ovis:0.8 "java -cp @/app/jib-…" naice-ovis 3 hours ago Up 3 hours (healthy) 0.0.0.0:5701->5701/tcp, [::]:5701->5701/tcp, 0.0.0.0:8084-8085->8084-8085/tcp, [::]:8084-8085->8084-8085/tcp naice-radius naice-release.registry.eltex.loc/naice-radius:0.8 "/docker-entrypoint.…" naice-radius 3 hours ago Up 3 hours (healthy) 0.0.0.0:1812-1813->1812-1813/udp, [::]:1812-1813->1812-1813/udp, 0.0.0.0:9812->9812/tcp, [::]:9812->9812/tcp naice-ursus naice-release.registry.eltex.loc/naice-ursus:0.8 "java -cp @/app/jib-…" naice-ursus 3 hours ago Up 3 hours (healthy) 0.0.0.0:8081-8082->8081-8082/tcp, [::]:8081-8082->8081-8082/tcp naice-vulpus naice-release.registry.eltex.loc/naice-vulpus:0.8 "java -cp @/app/jib-…" naice-vulpus 3 hours ago Up 3 hours (healthy) 0.0.0.0:5702->5702/tcp, [::]:5702->5702/tcp, 0.0.0.0:8086->8086/tcp, [::]:8086->8086/tcp, 0.0.0.0:8088->8088/tcp, [::]:8088->8088/tcp naice-web naice-release.registry.eltex.loc/naice-web:0.8 "/docker-entrypoint.…" naice-web 3 hours ago Up 3 hours (healthy) 80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 0.0.0.0:80->4200/tcp, [::]:80->4200/tcp