Общее описание
Система NAICE поставляется в виде образов для запуска контейнеров в системе контейнеризации и управления приложениями Docker. Для управления всеми компонентами системы используется плагин Docker Compose, предназначенный для решения различных задач для мультиконтейнерных приложений. Также для работы NAICE необходима установка radius-сервера FreeRADIUS, который предлагается устанавливать в виде сервиса напрямую на хосте.
Для автоматизации установки используются плейбуки Ansible.
Установка
Ниже приведена инструкция по выполнению однохостовой установки.
Демонстрационная версия поставляется с ограничением на максимальное количество добавляемых сетевых устройств - 15.
Установка Ansible
Для запуска плейбуков необходимо установить Ansible на хост, с которого есть доступ по SSH до целевого хоста. Запускать плейбук непосредственно на целевом хосте не рекомендуется.
Требуемая ОС хоста для запуска плейбука - Ubuntu 22.04 Jammy.
Официальная документация по установке Ansible.
Помимо способов, описанных в документации, возможна установка ПО на Linux-хост через утилиту apt
:
sudo apt install ansible
Пакет доступен в базовых репозиториях большинства дистрибутивов Linux.
Получение файлов для работы плейбука
Архив с файлами плейбука для тестирования предоставляется по запросу в коммерческий отдел компании Элтекс (https://eltex-co.ru/about/contacts/).
Для разворачивания системы необходимо поместить приложенный архив "ansibleNaice.tar.gz" на хост, с которого будет осуществляться запуск плейбука, в отдельную папку.
Затем необходимо распаковать архив:
tar -xzvf ansibleNaice.tar.gz cp ansible.cfg.template ansible.cfg
Предварительная подготовка перед установкой
Установите утилиту sshpass, если она не установлена командой:
sudo apt install sshpass
Проверьте и при необходимости дополните строку "127.0.0.1 localhost" в файле /etc/hosts:
127.0.0.1 localhost localhost.localdomain
Установите коллекции Ansible, необходимые для работы плейбуков:
ansible-galaxy collection install community.postgresql
Для указания адреса хоста, на который необходимо развернуть систему, отредактируйте файл
hosts.yml
:--- common: hosts: common_host: ansible_host: <IP-адрес хоста для NAICE>
- Настройте режим доступа к хосту в файле
ansible.cfg
(создать из шаблонаansible.cfg.template
) по SSH в зависимости от предпочитаемого варианта:по логину/паролю:
[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: <пароль пользователя>
по ключу (предварительно необходимо сгенерировать и поместить ключ на удаленный хост):
[defaults] inventory = hosts.yml remote_user = <пользователь на удаленном хосте> private_key_file = <путь к файлу ключа> host_key_checking = True deprecation_warnings = False
- (необязательно) При необходимости измените значения переменных окружения в
group_vars/all.yml
. Например, можно изменить директорию установки сервисов NAICE или таймзону для PostgreSQL. Проверьте доступ до удаленного хоста с помощью:
ansible all --list-hosts # проверить список хостов ansible all -m ping # проверить доступ до хостов
Пример вывода, если хост доступен:
common_host | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
(необязательно) При необходимости интеграции с Active Directory в файле переменных плейбука naice-ansible/group_vars/all.yml требуется указать корректные переменные (подробнее про настройку интеграции):
radius_ms_ad_ip: '172.16.4.115' radius_kerberos_ad_user_login: 'fill_login' radius_kerberos_ad_user_password: 'fill_password' radius_kerberos_workgroup: 'WS' radius_kerberos_kdc: 'WS.LOC' radius_kerberos_admin_server: 'LABMS.WS.LOC'
и выполнить установку с указанием специального ключа "--tags="use-ms-ad"":
ansible-playbook --ask-become-pass common-freeradius.yml --tags="use-ms-ad"
Установка PostgreSQL
Предусмотрены два варианта дистрибуции СУБД - установка сервиса и разворачивание docker-контейнера. Рекомендуемый вариант - docker-контейнер.
A. Установка PostgreSQL в docker-контейнере
Убедитесь, что переменная deb_postgres
в файле group_vars/all.yml
имеет значение False.
PostgreSQL будет установлен далее вместе с остальными сервисами NAICE.
B. Установка PostgreSQL как сервиса
Запустите специальный плейбук, который установит postgresql-15, подготовит конфигурационные файлы, создаст необходимые БД и пользователей:
ansible-playbook --ask-become-pass common-naice-databases.yml
Установка сервисов NAICE
Запустите плейбук common-naice-services.yml
для установки движка Docker, плагина Docker-compose и запуска через этот плагин сервисов NAICE:
если PostgreSQL планируется устанавливать в docker-контейнере (рекомендуется):
ansible-playbook --ask-become-pass common-naice-services.yml
если PostgreSQL установлен как сервис ранее указанным плейбуком:
ansible-playbook --ask-become-pass common-naice-services.yml -e "deb_postgres=True"
Время запуска контейнеров в связи с использованием механизма healthcheck для проверки успешности старта сервисов может занять до нескольких минут. Дождитесь полного выполнения плейбука.
Проверить успешность запуска контейнеров можно перейдя в директорию для установки NAICE (по умолчанию - /etc/docker-naice/
) и выполнив команду для просмотра списка и статуса контейнеров docker compose ps -a
. Вывод команды должен быть примерно следующим:
$sudo docker compose ps -a NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS naice-gavia nexus.eltex.loc:9008/naice-gavia:bug-306695-1 "java -cp @/app/jib-…" naice-gavia About an hour ago Up About an hour 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp naice-lemmus nexus.eltex.loc:9008/naice-lemmus:bug-306695-1 "java -cp @/app/jib-…" naice-lemmus About an hour ago Up About an hour 0.0.0.0:8083->8083/tcp, :::8083->8083/tcp naice-ovis nexus.eltex.loc:9008/naice-ovis:bug-306695-1 "java -cp @/app/jib-…" naice-ovis About an hour ago Up About an hour (healthy) 0.0.0.0:8084-8085->8084-8085/tcp, :::8084-8085->8084-8085/tcp naice-postgres nexus.eltex.loc:9012/naice/postgres:0.5.0 "docker-entrypoint.s…" postgres About an hour ago Up About an hour (healthy) 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp naice-ursus nexus.eltex.loc:9008/naice-ursus:bug-306695-1 "java -cp @/app/jib-…" naice-ursus About an hour ago Up About an hour (healthy) 0.0.0.0:8081-8082->8081-8082/tcp, :::8081-8082->8081-8082/tcp naice-web nexus.eltex.loc:9015/naice-web:0.5 "/docker-entrypoint.…" naice-web About an hour ago Up About an hour 80/tcp, 0.0.0.0:4200->4200/tcp, :::4200->4200/tcp
Установка FreeRADIUS
Запустите плейбук common-freeradius.yml
для установки сервиса FreeRADIUS и его конфигурирования:
ansible-playbook --ask-become-pass common-freeradius.yml
Установку FreeRADIUS всегда необходимо выполнять после установки сервисов NAICE.
Приложения
Приложение A. Значение переменных окружения из .env
Переменная | Значение по умолчанию | Описание |
---|---|---|
Переменные для дистрибуции | ||
BACKEND_VERSION_TAG | 0.5 | Версия сервисов бэкенда (naice-gavia, naice-lemmus, naice-ovis, naice-ursus) |
FRONTEND_VERSION_TAG | 0.5 | Версия сервиса фронтенда (naice-web, известный как larus) |
ELTEX_HUB | nexus.eltex.loc:9015 | Репозиторий со стабильными версиями сборок ПО |
ELTEX_HUB | hub.eltex-co.ru/naice | Внешний репозиторий со стабильными версиями сборок ПО |
ELTEX_FEATURE_HUB | nexus.eltex.loc:9008 | Репозиторий с версиями сборок ПО в разработке. Для внутреннего использования. |
BACKEND_HUB | ELTEX_HUB | Переменная, хранящая текущий выбранный репозиторий для загрузки сервисов бэкенда |
FRONTEND_HUB | ELTEX_HUB | Переменная, хранящая текущий выбранный репозиторий для загрузки сервиса фронтенда |
CI_HUB | nexus.eltex.loc:9012 | Репозиторий для сборок сопутствующих продуктов (PostgreSQL) |
CI_HUB | hub.eltex-co.ru | Внешний репозиторий для сборок сопутствующих продуктов (PostgreSQL) |
CI_VERSION_TAG | 0.5.0 | Версия ПО из репозитория CI |
Переменные Gavia | ||
GAVIA_PORT | 8080 | Порт, на котором работает сервис внутри контейнера. |
GAVIA_HOST_PORT | 8080 | Порт, в который пробрасывается порт сервиса из контейнера на хостовую машину. Используется для взаимодействия с сервисом. |
Переменные Ursus | ||
URSUS_PORT | 8081 | Порт, на котором работает сервис внутри контейнера. |
URSUS_HOST_PORT | 8081 | Порт, в который пробрасывается порт сервиса из контейнера на хостовую машину. Используется для взаимодействия с сервисом. |
URSUS_GRPC_PORT | 8082 | Порт, на котором работает GRPC для сервиса внутри контейнера. |
URSUS_GRPC_HOST_PORT | 8082 | Порт, в который пробрасывается порт GRPC для сервиса из контейнера на хостовую машину. Используется для взаимодействия с сервисом. |
URSUS_POSTGRES_USERNAME | ursus | Пользователь для доступа сервиса в СУБД PostgreSQL. |
URSUS_POSTGRES_PASSWORD | ursus | Пароль пользователя для доступа сервиса в СУБД PostgreSQL. |
URSUS_POSTGRES_JDBC_URL | jdbc:postgresql://{{ ansible_host }}:5432/ursus | URL для взаимодействия с БД с помощью JDBC. |
URSUS_GRPC_ADMIN_SERVICE_ADDRESS | dns:/naice-ursus:8082 | Адрес GRPC сервера сервиса naice-ursus. По этому адресу происходит взаимодействие naice-gavia и naice-ursus. |
Переменные Lemmus | ||
LEMMUS_PORT | 8083 | Порт, на котором работает сервис внутри контейнера. |
LEMMUS_HOST_PORT | 8083 | Порт, в который пробрасывается порт сервиса из контейнера на хостовую машину. Используется для взаимодействия с сервисом. |
LEMMUS_POSTGRES_USERNAME | ursus | Пользователь для доступа сервиса в СУБД PostgreSQL. |
LEMMUS_POSTGRES_PASSWORD | ursus | Пароль пользователя для доступа сервиса в СУБД PostgreSQL. |
LEMMUS_ISSUER_URL | http://{{ ansible_host }}:8083 | URL для запроса токена другими сервисами. |
LEMMUS_REDIRECTS | http://{{ ansible_host }}:8080/actuator/health, http://{{ ansible_host }}:4200/login | URL для перенаправления клиента после получения токена. |
LEMMUS_ACCESS_TTL_S | 300 | Время жизни токена в секундах. |
LEMMUS_REFRESH_TTL_S | 3600 | Время в секундах, в течении которого токен можно продлить. |
Переменные PostgreSQL | ||
POSTGRES_USER | ursus | Пользователь, создаваемый при установке и настройке СУБД. |
POSTGRES_PASSWORD | ursus | Пароль пользователя, создаваемый при установке и настройке СУБД. |
POSTGRES_DB | ursus | Имя БД, создаваемой при установке и настройке СУБД. |
Переменные Ovis | ||
OVIS_PORT | 8084 | Порт, на котором работает сервис внутри контейнера. |
OVIS_HOST_PORT | 8084 | Порт, в который пробрасывается порт сервиса из контейнера на хостовую машину. Используется для взаимодействия с сервисом. |
OVIS_GRPC_PORT | 8085 | Порт, на котором работает GRPC для сервиса внутри контейнера. |
OVIS_GRPC_HOST_PORT | 8085 | Порт, в который пробрасывается порт GRPC для сервиса из контейнера на хостовую машину. Используется для взаимодействия с сервисом. |
OVIS_GRPC_SERVICE_ADDRESS | dns:/naice-ovis:${OVIS_GRPC_PORT} | Адрес, на который выполняется запрос о состоянии сервиса. |
OVIS_CACHE_TTL_S | 600 | Время жизни кэша naice-ovis в секундах, в течении которого он хранит настройки аутентификации и авторизации. По истечении этого времени настройки перечитываются. Для тестирования можно уменьшить значение до 10 сек, но такое значение не рекомендуется для использования на продуктовой среде. |
OVIS_SESSION_IDLE_S | 86400 | Время жизни неактивных сессии пользователей, с. |
Переменные Larus (WEB) | ||
LARUS_PORT | 4200 | Порт, на котором работает сервис внутри контейнера. |
LARUS_HOST_PORT | 80 | Порт, в который пробрасывается порт сервиса из контейнера на хостовую машину. Используется для взаимодействия с сервисом. |
FRONTEND_API_URL | http://{{ ansible_host }}:8080/api/v1 | URL для взаимодействия с сервисом naice-gavia. |
FRONTEND_AUTHORIZATION_URL | http://{{ ansible_host }}:8083 | URL для редиректа на страницу авторизации. |
FRONTEND_WEB_URL | http://{{ ansible_host }}:80 | URL на котором работает WEB-интерфейс. |
Переменные уровня логирования сервисов | ||
URSUS_LOGGING_LEVEL | DEBUG | Уровень логирования сервиса NAICE-Ursus |
GAVIA_LOGGING_LEVEL | DEBUG | Уровень логирования сервиса NAICE-Gavia |
LEMMUS_LOGGING_LEVEL | DEBUG | Уровень логирования сервиса NAICE-Lemmus |
OVIS_LOGGING_LEVEL | DEBUG | Уровень логирования сервиса NAICE-Ovis |