Общее описание
Система NAICE поставляется в виде образов для запуска контейнеров в системе контейнеризации и управления приложениями Docker. Для управления всеми компонентами системы используется плагин Docker Compose, предназначенный для решения различных задач для мультиконтейнерных приложений. БД Postgres и сервис FreeRADIUS могут быть при необходимости установлены в виде приложений.
Для автоматизации установки используются плейбуки Ansible.
Установка
Ниже приведена инструкция по выполнению однохостовой установки.
Демонстрационная версия поставляется с ограничением на максимальное количество добавляемых сетевых устройств - 15.
Установка Ansible
Для запуска плейбуков необходимо установить Ansible на хост, с которого есть доступ по SSH до целевого хоста.
Запускать плейбук непосредственно на целевом хосте не рекомендуется.
Требуемая ОС хоста для запуска плейбука - Ubuntu 22.04 Jammy.
Официальная документация по установке Ansible.
Помимо способов, описанных в документации, возможна установка ПО на Linux-хост через утилиту apt
:
sudo apt install ansible
Пакет доступен в базовых репозиториях большинства дистрибутивов Linux.
Получение файлов для работы плейбука
Для разворачивания системы необходимо поместить приложенный архив "ansibleNaice.tar.gz" на хост, с которого будет осуществляться запуск плейбука, в отдельную папку.
Затем необходимо распаковать архив:
tar -xzvf ansibleNaice.tar.gz
Предварительная подготовка перед установкой
Установите утилиту 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
из шаблона:cp 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: <пароль пользователя>
по ключу (предварительно необходимо сгенерировать и поместить ключ на удаленный хост):
[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 требуется указать корректные переменные и включить интеграцию(v0.6_3.1 Пример настройки интеграции с Active Directory):
use_ms_ad: 'true' 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' radius_samba_ou_structure: 'Computers'
Установка 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 hub.eltex-co.ru/naice/naice-gavia:0.6 "java -cp @/app/jib-…" naice-gavia About an hour ago Up About an hour (healthy) 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp naice-lemmus hub.eltex-co.ru/naice/naice-lemmus:0.6 "java -cp @/app/jib-…" naice-lemmus About an hour ago Up About an hour (healthy) 0.0.0.0:8083->8083/tcp, :::8083->8083/tcp naice-lepus hub.eltex-co.ru/naice/naice-lepus:0.6 "java -cp @/app/jib-…" naice-lepus About an hour ago Up About an hour (healthy) 0.0.0.0:8087->8087/tcp, :::8087->8087/tcp, 0.0.0.0:67->1024/udp, :::67->1024/udp naice-nats hub.eltex-co.ru/naice/nats:0.6.1 "docker-entrypoint.s…" nats About an hour ago Up About an hour (healthy) 0.0.0.0:4222->4222/tcp, :::4222->4222/tcp, 0.0.0.0:7777->7777/tcp, :::7777->7777/tcp, 0.0.0.0:8222->8222/tcp, :::8222->8222/tcp, 6222/tcp naice-ovis hub.eltex-co.ru/naice/naice-ovis:0.6 "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 hub.eltex-co.ru/naice/postgres:0.6.1 "docker-entrypoint.s…" postgres About an hour ago Up About an hour (healthy) 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp naice-radius hub.eltex-co.ru/naice/naice-radius:0.6 "/docker-entrypoint.…" naice-radius About an hour ago Up About an hour (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 hub.eltex-co.ru/naice/naice-ursus:0.6 "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-vulpus hub.eltex-co.ru/naice/naice-vulpus:0.6 "java -cp @/app/jib-…" naice-vulpus About an hour ago Up About an hour (healthy) 0.0.0.0:8086->8086/tcp, :::8086->8086/tcp naice-web hub.eltex-co.ru/naice/naice-web:0.6 "/docker-entrypoint.…" naice-web About an hour ago Up About an hour (healthy) 80/tcp, 0.0.0.0:80->4200/tcp, :::80->4200/tcp
Обновление сервисов NAICE
Обновление с версии 0.5
Для обновления с версии 0.5 на версию 0.6 требуется выполнить:
- Выполнить обновление БД по инструкции v0.6_2.4 Обновление PostgreSQL с версии 0.5
- Запустить плейбук установки в соответствие с разделом "Установка сервисов NAICE".
Обновление в рамках версии 0.6
Обновление в рамках одной версии на новые пакеты не требует выполнения плейбука, достаточно выполнить следующие действия:
Зайти на сервер и перейти в папку, где установлен Eltex-NAICE (по умолчанию "/etc/docker-naice"):
cd /etc/docker-naice
Последовательно выполнить команды:
docker compose down docker compose pull docker compose up -d
При условии наличия на удалённом репозитории свежих сборок 0.6 они обновятся.
Обновление на следующую версию
Для перехода на следующую версию ПО (например, с 0.6 на 0.7) рассмотрим случай, когда все сервисы подняты в Docker.
Выключить сервисы 0.6
/etc/docker-naice$ docker compose down
Сохранить резервную копию файла .env
/etc/docker-naice$ cp .env /home/ems/.env.06
Сохранить резервную копию данных PostgreSQL.
/etc/docker-naice$ sudo cp -R var/pgdata/ /home/ems/pgdata.06
Повторить пункт Установка сервисов NAICE с использованием актуальной документации и скриптов на 0.7
Важно использовать в этот момент те же переменные в all.yml, что указывались в 0.6
Сервисы 0.7 должны запуститься в штатном режиме.
Если всё запустилось штатно, резервные копии данных (.env.06, pgdata.06) не потребуются.
После запуска может потребоваться дополнительная настройка сервисов в соответствии с настоящей документацией на 0.7
Установка FreeRADIUS (опционально)
Начиная с версии 0.6 FreeRADIUS контейнеризирован и по умолчанию устанавливается вместе с другими сервисами Elex-NAICE - его отдельная установка не требуется.
Что бы иметь возможность установить FreeRADIUS отдельно в виде пакета требуется предварительно установить сервисы NAICE командой:
ansible-playbook --ask-become-pass common-naice-services.yml -e "deb_radius=true"
Для установки FreeRADIUS в deb теребуется в файле all.yml исправить значение переменной "deb_radius" на "true":
deb_radius: true
Запустить плейбук common-freeradius.yml
для установки сервиса FreeRADIUS и его конфигурирования:
ansible-playbook --ask-become-pass common-freeradius.yml
При необходимости интеграции с MS AD (v0.6_3.1 Пример настройки интеграции с Active Directory) плейбук необходимо в файле all.yml исправить переменную "use_ms_ad" на "true" и запустить плейбук:
use_ms_ad: true
Установку FreeRADIUS всегда необходимо выполнять после установки сервисов NAICE.
При интеграции с MS AD если настройка DNS на сервере с NAICE выполнялась после его установки, то необходим дополнительный рестарт контейнеров для применения настройки:
docker compose stop && docker compose up -d
Приложения
Приложение A. Значение переменных окружения из .env
Переменная | Значение по умолчанию | Описание |
---|---|---|
Переменные для дистрибуции | ||
BACKEND_VERSION_TAG | 0.6 | Версия сервисов бэкенда (naice-gavia, naice-lemmus, naice-ovis, naice-ursus) |
FRONTEND_VERSION_TAG | 0.6 | Версия сервиса фронтенда (naice-web, известный как larus) |
POSTGRES_VERSION_TAG | 0.6.1 | Версия контейнерезированного образа БД postgres |
RADIUS_VERSION_TAG | 0.6 | Версия контейнерезированного образа FreeRadius |
NATS_VERSION_TAG | 0.6.1 | Версия контейнерезированного образа NATS |
ELTEX_HUB | hub.eltex-co.ru/naice | Внешний репозиторий со стабильными версиями сборок ПО |
BACKEND_HUB | ELTEX_HUB | Переменная, хранящая текущий выбранный репозиторий для загрузки сервисов бэкенда |
FRONTEND_HUB | ELTEX_HUB | Переменная, хранящая текущий выбранный репозиторий для загрузки сервиса фронтенда |
RADIUS_HUB | ELTEX_HUB | Переменная, хранящая текущий выбранный репозиторий для загрузки контейнера с FreeRADIUS |
CI_HUB | hub.eltex-co.ru | Внешний репозиторий для сборок сопутствующих продуктов (PostgreSQL) |
Переменные 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_DB | ursus | Наименование БД, используемой сервисом |
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. |
URSUS_OUI_UPDATE_TIME_S | 86400 | Периодичность обновления списка MAC OUI, с |
URSUS_OUI_UPDATE | True | Включить/выключить обновление списка MAC OUI |
URSUS_OUI_UPLOAD_FILE_URL | https://standards-oui.ieee.org/oui/oui.csv | Адрес списка MAC OUI, который используется для обновления |
Переменные 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 | 3600 | Время жизни токена в секундах. |
LEMMUS_REFRESH_TTL_S | 7200 | Время в секундах, в течении которого токен можно продлить. |
Переменные PostgreSQL | ||
POSTGRES_USER | postgres | Пользователь, создаваемый при установке и настройке СУБД. |
POSTGRES_PASSWORD | postgres | Пароль пользователя, создаваемый при установке и настройке СУБД. |
Переменные 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 | 86400 | Время жизни кэша naice-ovis в секундах, в течении которого он хранит настройки аутентификации и авторизации. По истечении этого времени настройки перечитываются. |
OVIS_SESSION_IDLE_S | 86400 | Время жизни неактивных сессии пользователей, с. |
OVIS_POSTGRES_JDBC_URL | jdbc:postgresql://{{ ansible_host }}:5432/ursus | Адрес подключения к БД |
OVIS_POSTGRES_USERNAME | ovis | Логин подключения к БД |
OVIS_POSTGRES_PASSWORD | ovis | Пароль подключения к БД |
Переменные 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-интерфейс. |
Переменные NATS | ||
NATS_PORT | 4222 | Порт, на котором работает сервис |
NATS_MONITORING_PORT | 8222 | Порт, через который выполняется мониторинг сервиса |
NATS_EXPORTER_PORT | 7777 | Порт, через который сервис отдает метрики в формате prometheus |
NATS_ADDRESS | nats://naice-nats:${NATS_PORT} | Адрес, на котором работает сервис |
NATS_PROMETHEUS_EXPORTER_ARGS | "-connz -varz -channelz -serverz -subz" | Аргументы командной строки, которые используется при формировании метрик prometheus |
Переменные Vulpus | ||
VULPUS_PORT | 8086 | Порт, на котором работает сервис внутри контейнера. |
VULPUS_HOST_PORT | 8086 | Порт, в который пробрасывается порт сервиса из контейнера на хостовую машину. Используется для взаимодействия с сервисом. |
VULPUS_GRPC_PORT | 8088 | Порт, в который пробрасывается порт сервиса из контейнера на хостовую машину. Используется для взаимодействия по gRpc. |
VULPUS_POSTGRES_USERNAME | vulpus | Логин для подключения к БД. |
VULPUS_POSTGRES_PASSWORD | vulpus | Пароль для подключения к БД. |
VULPUS_POSTGRES_JDBC_URL | jdbc:postgresql://{{ ansible_host }}:5432/lepus | Адрес БД для подключения. |
VULPUS_GRPC_SERVICE_ADDRESS | dns:/naice-vulpus:${VULPUS_GRPC_PORT} | Порт, на котором внутри контейнера работает gRpc сервер. |
Переменные Lepus | ||
LEPUS_PORT | 8087 | Порт, на котором работает сервис внутри контейнера. |
LEPUS_HOST_PORT | 8087 | Порт, в который пробрасывается порт сервиса из контейнера на хостовую машину. Используется для взаимодействия с сервисом. |
LEPUS_REPOSITORY_BATCH_SIZE | 500 | Размер пакета сохранения проб в БД (количество) |
LEPUS_POSTGRES_USERNAME | lepus | Логин для подключения к БД. |
LEPUS_POSTGRES_PASSWORD | lepus | Пароль для подключения к БД. |
LEPUS_POSTGRES_JDBC_URL | jdbc:postgresql://{{ ansible_host }}:5432/lepus | Адрес БД для подключения. |
LEPUS_DHCP_PROBE_ENABLED | true | Включение/отключение сбора DHCP проб. |
LEPUS_DHCP_PROBE_PORT | 1024 | Внутренний порт в контейнере для сбора DHCP проб. В него пробрасывается порт сервиса из контейнера на хостовую машину. |
LEPUS_DHCP_PROBE_HOST_PORT | 67 | Внешний порт сервиса для сбора DHCP проб. |
LEPUS_DHCP_PROBE_SCHEDULE_CLEAR_PROBES_AFTER_DAYS | 30 | Время хранения DHCP проб в БД. |
LEPUS_DHCP_PROBE_SCHEDULE_CLEAN_EXPIRED_CRON | 0 0 * * * * | Расписание для запуска задачи по очистке устаревших DHCP проб в БД. |
Переменные RADIUS | ||
RADIUS_AUTH_PORT | 1812 | Порт аутентификации для обработки RADIUS-запросов аутентификации. |
RADIUS_ACCT_PORT | 1813 | Порт для обработки RADIUS-аккаунтинга. |
RADIUS_EXPORTER_PORT | 9812 | Порт, через который сервис отдает метрики в формате prometheus. |
RADIUS_LOG_PATH | /var/log/radius | Файл на хостовой машине для хранения логов работы сервиса. |
RADIUS_REST_OVIS_IP | {{ ansible_host }} | IP-адрес для подключения к сервису NAICE-Ovis. |
RADIUS_REST_OVIS_PORT | 8084 | Порт для подключения к сервису NAICE-Ovis. |
RADIUS_POSTGRES_DB_HOST | {{ ansible_host }} | IP-адрес подключения к БД. |
RADIUS_POSTGRES_DB_PORT | 5432 | Порт подключения к БД. |
RADIUS_POSTGRES_DB_LOGIN | radius | Логин для подключения к БД. |
RADIUS_POSTGRES_DB_PASSWORD | radius | Пароль для подключения к БД. |
RADIUS_POSTGRES_DB_NAME | ursus | Наименование БД для подключения. |
RADIUS_CERTS_DIR_PATH | не задано | Директория, где располагается внешний (пользовательский) сертификат, который необходимо использовать при работе FreeRADIUS. По умолчанию не указывается, т.к. имеется встроенный валидный сертификат. |
RADIUS_CERTS_CA_CERT_FILE | trusted_server.crt | Наименование файла внешнего сертификата CA. |
RADIUS_CERTS_DH_FILE | dh | Наименование внешнего файла dh |
RADIUS_CERTS_PRIVATE_KEY_FILE | trusted_server.k | Наименование внешнего приватного ключа сертификата. |
RADIUS_CERTS_PRIVATE_KEY_PASSWORD | не задано | Пароль к внешнему приватному ключу сертифката. |
RADIUS_CERTS_CERTIFICATE_FILE | trusted_server_chain.crt | Наименование файла внешнего сертификата, который будет использовать FreeRADIUS. |
RADIUS_MS_AD | False | Включение/отлючение интеграции с MS AD. По умолчанию отлючено. |
RADIUS_MS_AD_IP | 192.168.1.1 | IP-адрес сервера MS AD. |
RADIUS_KERBEROS_AD_USER | fill_login | Логин для подключения к серверу MS AD. |
RADIUS_KERBEROS_AD_USER_PASSWORD | fill_password | Пароль для подключения к серверу MS AD. |
RADIUS_KERBEROS_ADMIN_SERVER | LABMS.WS.LOC | Полный адрес сервера MS AD. |
RADIUS_KERBEROS_KDC | WS.LOC | Полный адрес домена MS AD, в котором будет работать Eltex-NAICE. |
RADIUS_KERBEROS_WORKGROUP | WS | Домен MS AD, в котором будет работать Eltex-NAICE. |
RADIUS_KERBEROS_LOGS_PATH | /var/log/kerberos | Файл на хостовой машине для хранения логов работы kerberos. |
Переменные уровня логирования сервисов | ||
ROOT_LOGGING_LEVEL | DEBUG | Корневой уровень логирования. Логи сервисов выше данного уровня не отображаются. |
URSUS_LOGGING_LEVEL | DEBUG | Уровень логирования сервиса NAICE-Ursus |
GAVIA_LOGGING_LEVEL | DEBUG | Уровень логирования сервиса NAICE-Gavia |
LEMMUS_LOGGING_LEVEL | DEBUG | Уровень логирования сервиса NAICE-Lemmus |
OVIS_LOGGING_LEVEL | DEBUG | Уровень логирования сервиса NAICE-Ovis |
LEPUS_LOGGING_LEVEL | DEBUG | Уровень логирования сервиса NAICE-Lepus |
VULPUS_LOGGING_LEVEL | DEBUG | Уровень логирования сервиса NAICE-Vulpus |