ELTEX Cloud Configuration Manager
Инструкция по установке ECCM
Версия ПО 1.5.0
Для стабильной работы сервер должен отвечать следующим требованиям:
операционная система семейства Linux, поддерживающая docker (рекомендуется Ubuntu server 20 и новее);
объем оперативной памяти от 8 ГБ;
процессор, поддерживающий виртуализацию и имеющий от 4-х ядер;
от 40 ГБ свободного места на жестком диске;
наличие сетевого интерфейса 1 Гбит/с.
Получение привилегий sudo без дополнительного ввода пароля (опционально)
От имени непривилегированного пользователя необходимо выполнить команду:
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" | sudo EDITOR='tee -a' visudo
Далее необходимо ввести пароль. После этого для выполнения команд с sudo
или перехода в режим суперпользователя дополнительный ввод пароля не потребуется.
Установочный архив
Файлы, необходимые для запуска проекта, распространяются в виде tar-архива. Их можно получить с общедоступного ftp-сервера. Загрузите архив на сервер и распакуйте его. Рекомендуется распаковывать архив в заранее созданную отдельную директорию.
Пример команд:
wget ftp://wifiguest:GuestWiFi@ftp.eltex.org/eccm/eccm-1.5.tar.gz mkdir eccm sudo tar -zxvf eccm-1.5.tar.gz eccm/
Установка docker и docker-compose
Наиболее простой и быстрый способ установки — перейти в директорию, в которую был распакован установочный архив, и воспользоваться скриптом compose-tools.sh
, используя флаг --install
:
cd eccm sudo ./compose-tools.sh --install
Для проверки установленных docker можно выполнить команды:
docker --version
Убедиться, что команда возвращает версию docker не ниже указанной в примере:
Docker version 20.10.8, build 3967b7
Для проверки установленного docker-compose можно выполнить команды:
docker-compose --version
Убедиться, что команда возвращает версию docker-compose не ниже указанной в примере:
docker-compose version 1.29.2, build 5becea4
Запуск ECCM
Проект ECCM в данное время распространяется в виде набора файлов, позволяющих запустить все необходимые сервисы с помощью docker-compose. Проект разделен на три docker-стека:
- база данных (PostgreSQL 12.5),
- провайдер авторизации (OSS на основе ORY Hydra и Oathkeeper),
- стек сервисов ECCM.
Такое разделение обусловлено необходимостью обеспечения горизонтального масштабирования проекта и созданием возможности интеграции с другими проектами компании, например Eltex.EDM.
Скрипт для запуска ECCM
Ввиду обилия параметров запуска системы, был подготовлен скрипт, выполняющий запуск проекта на одном хосте с параметрами производительности, позволяющими обслуживать около 100 устройств (фактическая производительность зависит от многих факторов, включающих производительность аппаратной части и сложность обслуживаемых сетевых устройств).
Для запуска проекта нужно перейти в директорию с файлами установочного архива и выполнить команду:
sudo ./compose-tools.sh --start <ECCM ADDRESS>
,где **ECCM ADDRESS**
- это IP-адрес, по которому будет выполняться подключение к серверу. Например, если адрес сервера 100.110.2.2
, команда будет выглядеть:
sudo ./compose-tools.sh --start 100.110.2.2
Стоит отметить, что скрипт применяет указанный адрес к запускаемым контейнерам, но при этом не переписывает его в файлах с переменными (описаны в следующем разделе). Если использовать ключ --start
без указания адреса, то при запуске будут использованы адреса, указанные в файлах с переменными.
Пример вывода в консоль при успешном запуске:
Starting postgres... Creating network "postgres_default" with the default driver Creating volume "postgres_postgres" with default driver Creating postgres_postgres_1 ... done Postgres started set IDENTITY_PROVIDER_WEB_ADDRESS=100.110.2.2 set POSTGRES_HOST=100.110.2.2 Starting identity-provider... WARNING: The JAEGER_AGENT_HOST variable is not set. Defaulting to a blank string. Creating network "identity-provider_default" with the default driver Creating volume "identity-provider_hydra-config" with default driver Creating identity-provider_postgres-configurator_1 ... done Creating identity-provider_hydra_1 ... done Creating identity-provider_identity-provider_1 ... done Creating identity-provider_nginx-proxy_1 ... done Identity-provider started set ECCM_WEB_ADDRESS=100.110.2.2 set IDENTITY_PROVIDER_HOST=100.110.2.2 set ECCM_BACKBONE_ADDRESS=100.110.2.2 set POSTGRES_HOST=100.110.2.2 Starting ECCM services... WARNING: The DHCP_ENABLED variable is not set. Defaulting to a blank string. Creating network "eccm_eltex-internal" with the default driver Creating network "eccm_default" with the default driver Creating volume "eccm_upgrader-data" with default driver Creating volume "eccm_git-templates-data" with default driver Creating volume "eccm_git-config-data" with default driver Creating volume "eccm_monitoring-server-alertscripts" with default driver Creating volume "eccm_monitoring-server-externalscripts" with default driver Creating volume "eccm_monitoring-server-modules" with default driver Creating volume "eccm_monitoring-server-enc" with default driver Creating volume "eccm_monitoring-server-ssh_keys" with default driver Creating volume "eccm_monitoring-server-ssl-certs" with default driver Creating volume "eccm_monitoring-server-ssl-keys" with default driver Creating volume "eccm_monitoring-server-ssl-ssl_ca" with default driver Creating volume "eccm_monitoring-server-snmptraps" with default driver Creating volume "eccm_monitoring-server-mibs" with default driver Creating volume "eccm_monitoring-server-export" with default driver Creating volume "eccm_monitoring-web-ssl-nginx" with default driver Creating volume "eccm_rabbitmq-data" with default driver Creating volume "eccm_oathkeeper-config" with default driver Creating volume "eccm_hydra-configurator" with default driver Creating volume "eccm_dhcp" with default driver Creating eccm_oathkeeper-proxy_1 ... done Creating eccm_hydra-configurator_1 ... done Creating eccm_rabbitmq-service_1 ... done Creating eccm_monitoring-service-worker_1 ... done Creating eccm_dhcp_1 ... done Creating eccm_postgres-configurator_1 ... done Creating eccm_monitoring-service_1 ... done Creating eccm_postgres-monitoring-bouncer_1 ... done Creating eccm_monitoring-server_1 ... done Creating eccm_monitoring-web_1 ... done Creating eccm_diff-checker_1 ... done Creating eccm_upgrade-finish-checker_1 ... done Creating eccm_monitoring-adapter_1 ... done Creating eccm_data-presenter_1 ... done Creating eccm_license-manager_1 ... done Creating eccm_polemarch_1 ... done Creating eccm_map-manager_1 ... done Creating eccm_ztp-manager_1 ... done Creating eccm_backend-ui_1 ... done Creating eccm_device-manager_1 ... done Creating eccm_cron-manager_1 ... done Creating eccm_communicator_1 ... done Creating eccm_git-connector_1 ... done Creating eccm_upgrader_1 ... done Creating eccm_web-gui_1 ... done ECCM started
Для остановки проекта выполните команду:
sudo ./compose-tools.sh --stop
Для обновления образов всех контейнеров ECCM выполните команду:
sudo ./compose-tools.sh --pull
Для очистки всех контейнеров, томов и сетей ECCM выполните команду:
sudo ./compose-tools.sh --clean
При запуске скрипта с флагом --clean
данные с БД Postgres также будут удалены. Рекомендуем использовать данный флаг только при полной деинсталляции ECCM с сервера.
Для запуска проекта с нужным уровнем логирования выполните команду:
sudo ./compose-tools.sh --logging DEBUG
В версии 1.5 в проект добавлен DHCP-сервер с поддержкой функциональности Zero Touch Provisioning (ZTP), автоматически добавляющий устройства в систему. По умолчанию отключен, для его активации необходимо добавить ключ --dhcp в строку запуска:
sudo ./compose-tools.sh --start 100.110.2.2 --dhcp
Переменные окружения
Файлы, необходимые для запуска ECCM и содержащие переменные окружения и конфигурации, находятся в директории, в которую вы распаковали установочный архив:
postgres/.env postgres/data/postgresql.conf identity-provider/.env eccm/.env
postgres/.env
В postgres/.env
находятся переменные, определяющие поведение БД Postgres при запуске её в контейнере. В таблице представлен перечень данных переменных:
Переменная | Значение по умолчанию | Описание |
---|---|---|
COMPOSE_PROJECT_NAME | postgres | Название проекта в docker-compose (используется для идентификации, в случае если на сервере запущено несколько проектов) |
POSTGRES_USER | Параметр, позволяющий переопределить логин по умолчанию для доступа к базе данных | |
POSTGRES_PASSWORD | Параметр, позволяющий переопределить пароль по умолчанию для доступа к базе данных | |
POSTGRES_TIMEZONE | Asia/Novosibirsk | Временной пояс, в котором работает система (указывается в соответствии с tz database, например Asia/Novosibirsk) |
POSTGRES_SHM_SIZE | 2gb | Ограничение выделенной оперативной памяти для работы с БД Postgres |
postgres/data/postgresql.conf
Файл содержит параметры, влияющие на производительность базы данных. Настройки по умолчанию достаточны для тестового запуска и поддержки около 100 устройств. Инструкции по изменению конфигурации можно найти на странице ECCM на сайте https://eltex-co.ru/ или обратиться в службу технической поддержки ELTEX.
identity-provider/.env
В файле identity-provider/.env
находятся переменные, определяющие поведение группы контейнеров, отвечающих за авторизацию пользователя в системе ECCM.
# Внешний адрес nginx proxy, необходимо задать корректный внешний адрес при инсталляции IDENTITY_PROVIDER_WEB_ADDRESS=<IP сервера> IDENTITY_PROVIDER_WEB_PORT=9090 ## Postgres # Внешний адрес контейнера Postgres, необходимо задать корректный внешний адрес при инсталляции POSTGRES_HOST=<IP сервера> POSTGRES_PORT=5432 POSTGRES_USER=tester POSTGRES_PASSWORD=tester
В таблице представлен перечень данных переменных:
Переменная | Значение по умолчанию | Описание |
---|---|---|
COMPOSE_PROJECT_NAME | eccm | Название проекта в docker-compose (используется для идентификации, в случае если на сервере запущено несколько проектов) |
ECCM_PROFILE | production | |
IDENTITY_PROVIDER_TAG | 1.5 | |
IDENTITY_PROVIDER_REGISTRY | hub.eltex-co.ru | Адрес docker-registry, с которого будет выполняться получение образов системы. Если используется локальное зеркало, то можно указать его адрес |
IDENTITY_PROVIDER_WEB_ADDRESS | 192.168.0.1 | Адрес, на котором будет работать сервис identity-provider |
IDENTITY_PROVIDER_WEB_PORT | 9090 | Порт для доступа к сервису identity-provider |
POSTGRES_HOST | 192.168.0.1 | Адрес, на котором работает БД Postgres |
POSTGRES_PORT | 5432 | Порт для доступа к БД Postgres |
POSTGRES_USER | Параметр, позволяющий переопределить логин по умолчанию для доступа к базе данных | |
POSTGRES_PASSWORD | Параметр, позволяющий переопределить пароль по умолчанию для доступа к базе данных |
eccm/.env
В файле eccm/.env
находятся переменные, определяющие поведение проекта.
COMPOSE_PROJECT_NAME=eccm ECCM_PROFILE=production ECCM_TAG=1.5 ECCM_REGISTRY=hub.eltex-co.ru # Необходимо поменять на реальные адреса при инсталляции ECCM_BACKBONE_ADDRESS=192.168.0.1 ECCM_WEB_ADDRESS=192.168.0.1 # Identity provider (external) # Необходимо указать реальный внешний адрес identity-provider IDENTITY_PROVIDER_HOST=192.168.0.1 IDENTITY_PROVIDER_PORT=9090 IDENTITY_PROVIDER_PATH=/identity-provider IDENTITY_PROVIDER_HYDRA_PUBLIC_PATH=/hydra/public IDENTITY_PROVIDER_HYDRA_ADMIN_PATH=/hydra/admin ECCM_WEB_PORT=80 ECCM_TIMEZONE=Asia/Novosibirsk ECCM_LOGLEVEL=INFO # Количество одновременно выполняемых операций с устройствами # Не может превышать количество ядер процессора MAX_PARALLEL_TASKS=4
В таблице представлен перечень данных переменных:
Переменная | Значение по умолчанию | Описание |
---|---|---|
COMPOSE_PROJECT_NAME | eccm | Название проекта в docker-compose (используется для идентификации, в случае если на сервере запущено несколько проектов) |
ECCM_PROFILE | production | |
ECCM_TAG | 1.5 | |
ECCM_REGISTRY | hub.eltex-co.ru | Адрес docker-registry, с которого будет выполняться получение образов системы. Если используется локальное зеркало, то можно указать его адрес |
ECCM_BACKBONE_ADDRESS | 192.168.0.1 | Внутренний адрес, на котором будет работать система ECCM с устройствами в сети |
ECCM_WEB_ADDRESS | 192.168.0.1 | Адрес, на котором будет работать web-интерфейс системы ECCM |
IDENTITY_PROVIDER_HOST | 192.168.0.1 | Внешний адрес сервиса identity-provider |
IDENTITY_PROVIDER_PORT | 9090 | Порт для доступа к сервису identity-provider |
ECCM_WEB_PORT | 80 | Порт для доступа к web-интерфейсу |
ECCM_TIMEZONE | Asia/Novosibirsk | Временной пояс, в котором работает система (указывается в соответствии с tz database, например Asia/Novosibirsk) |
ECCM_LOGLEVEL | 'INFO' | Уровень логирования в проекте |
MAX_PARALLEL_TASKS | 4 | Количество одновременно выполняемых операций с устройствами |
ECCM_MONITORING_SERVER_MEM_HARD_LIMIT | 512M | Ограничение физической памяти для docker-контейнера |
ECCM_MONITORING_WEB_MEM_HARD_LIMIT | 256M | Ограничение физической памяти для docker-контейнера |
POSTGRES_HOST | 192.168.0.1 | Адрес, на котором работает БД Postgres |
POSTGRES_PORT | 5432 | Порт для доступа к БД Postgres |
POSTGRES_USER | Параметр, позволяющий переопределить логин по умолчанию для доступа к базе данных | |
POSTGRES_PASSWORD | Параметр, позволяющий переопределить пароль по умолчанию для доступа к базе данных |
Доступ к web-интерфейсу
Для подключения к web-интерфейсу ECCM нужно ввести в браузере следующий адрес:
http://<IP-адрес вашего сервера (ECCM_WEB_ADDRESS)>/
Учетные данные, используемые по умолчанию: логин 'eccm', пароль 'eccm'.
Известные проблемы и методы решения
Ошибки, возникающие при запуске проекта
Ошибка:
ERROR: Couldn't connect to Docker daemon at http+[docker://localhost](docker://localhost) - is it running?
Возможная причина: docker-демон не запущен. Для проверки нужно выполнить команду:
sudo systemctl status docker
Если в строке Active статус отличается от Active (running), значит проблема заключается в этом.
Решение: Запустить docker командой:
sudo systemctl start docker
Ошибка:
Got permission denied while trying to connect to the Docker daemon socket at [unix:///var/run/docker.sock](unix://intdocs.eltex.loc/var/run/docker.sock): Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/json: dial unix /var/run/docker.sock: connect: permission denied
Возможная причина: запуск производился от непривилегированного пользователя, который не был добавлен в группу docker.
Решения:
Предпочтительное: добавить пользователя в группу docker. Это можно сделать с помощью команды:
sudo usermod -aG docker $(whoami)
Выполнять все операции с привилегиями root.
Ошибка:
Services starting...
Creating network "eccm_eltex-internal" with the default driver
ERROR: Pool overlaps with other one on this address space
Возможная причина: подсеть, указанная в ECCM_INTERNAL_SUBNETWORK
, уже используется докером.
Решение: Необходимо выбрать другую подсеть в файле .env
. Посмотреть уже созданные докером подсети можно с помощью команды:
sudo docker network inspect $(docker network ls --filter "DRIVER=bridge" --format '{{ .Name }}') -f '{{ .Name }} {{ (index .IPAM.Config 0).Subnet }}'
Ошибки, возникающие при остановке проекта
Ошибка:
ERROR: error while removing network: network eccm_eltex-internal id 324bd72dd9c107cf2ea48effb75d9e7ad2dfbc8f5f7317b89cd7f318d61d5c4b has active endpoints
Возможная причина: docker не полностью очистил кэш.
Решение: перезапуск docker с помощью команды:
sudo systemctl restart docker