Предварительная установка дополнительного ПО на сервере
Для запуска Offline ELM на сервере требуется произвести установку дополнительного ПО:
1. Установить последнюю стабильную версию Docker.
2. Установить последнюю стабильную версию Docker Compose.
Дальнейшие инструкции предполагают, что пользователь обладает правами взаимодействия с Docker и запуска Docker Compose без повышения привилегий командой sudo. Для формирования таких прав у текущего пользователя рекомендуется изучить следующий раздел
официальной документации Docker.
Получение файлов, необходимых для запуска Offline ELM
Набор файлов, необходимых для запуска Offline ELM и сервисов мониторинга, можно скачать по ссылке с актуальной версией elm1.4.
Рисунок 1 — Скачивание файлов для запуска Offline ELM с ownCloud
Структура архива:
Архив должен быть загружен на целевой сервер и распакован в любой удобной для дальнейшей эксплуатации директории.
У администраторов Offline ELM для запуска, остановки и редактирования конфигурации Offline ELM должны быть права на чтение и запись распакованных файлов.
Первый запуск Offline ELM
Первоначальное конфигурирование с помощью скрипта инсталляции
1. Для упрощенного запуска Offline ELM поставляется скрипт инсталляции install-offline.sh.
2. Перед выполнением скрипта необходимо выдать ему права на исполнение с помощью команды:
sudo chmod +x ./install-offline.sh
3. Посмотреть информацию о скрипте можно с помощью флага --help.
$ ./install-offline.sh Script usage: ./install-offline.sh [OPTIONS] Options: --elm-images <ARCHIVE> path to archive with images --elm-data <ARCHIVE> path to archive with config and compose files --monitoring-images <ARCHIVE> path to archive with images for monitoring --monitoring-data <ARCHIVE> path to archive with data for monitoring --env <FILE> path to .env file usage with option --elm-images --elm-dir <DIRECTORY> path to directory where need to unpack archive with data files usage with option --elm-data --monitoring-dir <DIRECTORY> path to directory where need to unpack archive with data files for monitoring usage with option --monitoring-data -h, --help output this help Required options: One of the options --elm-images, --elm-data, --monitoring-images, --monitoring-data must be set
4. Пример запуска скрипта с распаковкой архива конфигурационных файлов и загрузкой образов из архивов.
$ ./install-offline.sh --elm-images elm-offline-images-1.4-1.tar.gz --elm-data elm-offline-data-1.4-1.tar.gz INFO: Extract files: elm-offline-data-1.4-1/ elm-offline-data-1.4-1/docker-compose.yml elm-offline-data-1.4-1/config/ elm-offline-data-1.4-1/config/telegraf/ elm-offline-data-1.4-1/config/telegraf/telegraf.conf elm-offline-data-1.4-1/install/ elm-offline-data-1.4-1/install/install-offline.sh elm-offline-data-1.4-1/docker-compose-remote.yml elm-offline-data-1.4-1/.env elm-offline-data-1.4-1/data/ elm-offline-data-1.4-1/data/elmi-offline-web-ui/ elm-offline-data-1.4-1/data/elmi-offline-web-ui/ssl/ elm-offline-data-1.4-1/data/elmi-offline-web-ui/ssl/autocreated-cert.crt elm-offline-data-1.4-1/data/elmi-offline-web-ui/ssl/autocreated-cert.key elm-offline-data-1.4-1/data/elmi-offline-db/ elm-offline-data-1.4-1/data/elmi-offline-db/init-db/ elm-offline-data-1.4-1/data/elmi-offline-db/init-db/init-db.sql elm-offline-data-1.4-1/data/elmi-offline-db/enable_triggers.sql elm-offline-data-1.4-1/data/elmi-offline-db/postgresql.conf elm-offline-data-1.4-1/docker-compose-cli.yml Loaded image: elmi-offline-server:1.4-1 Loaded image: elmi-offline-init:1.4-1 Loaded image: elmi-offline-cli:1.4-1 Loaded image: elmi-web-ui:1.4-1 Loaded image: pcscd:alpine Loaded image: postgres:16.2 Loaded image: telegraf:1.30.0 INFO: The file ./elm-offline-data-1.4-1/.env does not changed, it contains actual environment variable ELM_TAG Success!
5. В результате были загружены образы и распакованы конфигурационные файлы в папку elm-offline-data-1.4-1.
elm-offline-data-1.4-1 ├── config │ └── telegraf │ └── telegraf.conf ├── data │ ├── elmi-offline-db │ │ ├── enable_triggers.sql │ │ ├── init-db │ │ │ └── init-db.sql │ │ └── postgresql.conf │ └── elmi-offline-web-ui │ └── ssl │ ├── autocreated-cert.crt │ └── autocreated-cert.key ├── docker-compose-cli.yml ├── docker-compose-remote.yml ├── docker-compose-db.yml ├── docker-compose.yml └── .env
Первоначальное конфигурирование в ручном режиме
Для запуска Offline ELM требуется произвести следующие шаги:
1. Перейти в директорию с содержимым распакованного архива.
2. Распаковать архив elm-offline-data-1.4-1.tar.gz с файлами, необходимыми для работы Offline ELM.
3. Открыть файл .env любым удобным текстовым редактором.
4. Для переменной ELM_TAG указать актуальную версию Offline ELM 1.4. Если существует возможность указать конкретный номер сборки Offline ELM — его необходимо указать после версии через дефис (например, для билда под номером 1 значение переменной будет "1.4-1").
ELM_TAG="1.4"
ELM_INSTANCE_ID задается при первом запуске Offline ELM и не должен меняться в течение работы. При необходимости смены значения ELM_INSTANCE_ID требуется чистая установка Offline ELM.
5. Установить в переменной ELM_INSTANCE_ID номер инстанса (ноды) текущей инсталляции Offline ELM. Если это единственная инсталляция, то "ELM_INSTANCE_ID=node1". Если используется резервирование Offline ELM, то на одной ноде "ELM_INSTANCE_ID=node1, а на второй — "ELM_INSTANCE_ID=node2".
ELM_INSTANCE_ID=node1
6. Установить в переменной DOCKER_GROUP_ID значение группы пользователя docker. Узнать id группы docker можно командой:
$ getent group docker| cut -d: -f3 999
DOCKER_GROUP_ID="999"
Для мониторинга состояния контейнеров Telegraf необходимо предоставить ему доступ к сокету Docker демона, для этого необходимо передать id группы пользователей docker.
7. Установить другие необходимые переменные окружения. Полный список переменных окружения Offline ELM 1.4.
8. Загрузить образы Offline ELM из архива на хост:
$ docker load < elm-offline-images-1.4-1.tar.gz
9. Проверить загруженные образы:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE elmi-web-ui 1.4-1 27e9fe0ffbc8 20 hours ago 28.6MB elmi-offline-cli 1.4-1 f89431b1dc57 20 hours ago 736MB elmi-offline-init 1.4-1 23a53b77cc61 20 hours ago 16.4MB elmi-offline-server 1.4-1 fa093d421389 20 hours ago 761MB pcscd alpine 8713840a2dc3 2 months ago 39.2MB telegraf 1.30.0 7942930461a6 4 months ago 453MB postgres 16.2 8e4fc9e18489 5 months ago 431MB
10. Убедиться, что токен вставлен и был обнаружен системой:
$ lsusb | grep "Aktiv Rutoken ECP" Bus 001 Device 008: ID 0a89:0030 Aktiv Rutoken ECP
11. Убедиться, что демон pcscd, если он установлен, остановлен:
# service pcscd status ● pcscd.service - PC/SC Smart Card Daemon Loaded: loaded (/lib/systemd/system/pcscd.service; indirect; vendor preset: enabled) Active: active (running) since Fri 2024-07-26 14:11:30 +07; 1s ago TriggeredBy: ● pcscd.socket Docs: man:pcscd(8) Main PID: 1639189 (pcscd) Tasks: 5 (limit: 38220) Memory: 1.1M CPU: 12ms CGroup: /system.slice/pcscd.service └─1639189 /usr/sbin/pcscd --foreground --auto-exit июл 26 14:11:30 user-pc systemd[1]: Started PC/SC Smart Card Daemon.
# systemctl stop pcscd.socket
Запуск сервисов Offline ELM
Запуск сервисов Offline ELM на одном хосте
1. Перейти в папку с конфигурационными файлами Offline ELM, где расположены docker-compose.yml файлы.
2. Запустить Offline ELM командой:
$ docker compose up -d
3. После запуска убедиться, что все контейнеры Offline ELM запустились корректно (имеют статус "running (healthy)"):
$ docker compose ps
Теперь с Offline ELM можно взаимодействовать через интерфейс командной строки, далее CLI.
После первого запуска Offline ELM в текущем каталоге появятся новые директории:
- db — содержит файлы базы данных, используемой в Offline ELM;
- log — содержит логи сервисов Offline ELM.
4. Запустить CLI Offline ELM.
Для запуска CLI требуется произвести следующие действия:
4.1. Перейти в директорию с файлом docker-compose-cli.yml.
4.2. Выполнить следующую команду:
$ docker compose --file docker-compose-cli.yml run --rm elmi-offline-cli
$ docker compose --file docker-compose-cli.yml run --rm elmi-offline-cli WARN[0000] Found orphan containers ([elmi-offline-web-ui elmi-offline-server elmi-offline-init elmi-offline-db elm-token]) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up. 2024-07-26 16:26:54.786 INFO 1 --- [ main] org.eltex.elm.cli.Launcher : Starting Launcher using Java 21.0.2 on a413a808c5ef with PID 1 (/classes started by root in /) 2024-07-26 16:26:54.792 INFO 1 --- [ main] org.eltex.elm.cli.Launcher : No active profile set, falling back to 1 default profile: "default" 2024-07-26 16:26:55,598 INFO c.z.h.HikariDataSource.getConnection (line:110) - HikariPool-1 - Starting... 2024-07-26 16:26:55,775 INFO c.z.h.HikariDataSource.getConnection (line:123) - HikariPool-1 - Start completed. 2024-07-26 16:26:55,884 INFO l.l.c.JavaLogger.log (line:37) - Set default schema name to public 2024-07-26 16:26:56,291 INFO l.l.c.JavaLogger.log (line:37) - Reading from public.elm_database_changelog 2024-07-26 16:26:56,375 INFO l.l.c.JavaLogger.log (line:37) - Database is up to date, no changesets to execute 2024-07-26 16:26:56,377 INFO l.l.c.JavaLogger.log (line:37) - Reading from public.elm_database_changelog 2024-07-26 16:26:56,385 INFO l.l.c.JavaLogger.log (line:37) - UPDATE SUMMARY 2024-07-26 16:26:56,385 INFO l.l.c.JavaLogger.log (line:37) - Run: 0 2024-07-26 16:26:56,385 INFO l.l.c.JavaLogger.log (line:37) - Previously run: 3 2024-07-26 16:26:56,385 INFO l.l.c.JavaLogger.log (line:37) - Filtered out: 0 2024-07-26 16:26:56,386 INFO l.l.c.JavaLogger.log (line:37) - ------------------------------- 2024-07-26 16:26:56,386 INFO l.l.c.JavaLogger.log (line:37) - Total change sets: 3 2024-07-26 16:26:56,386 INFO l.l.c.JavaLogger.log (line:37) - Update summary generated 2024-07-26 16:26:56,405 INFO l.l.c.JavaLogger.log (line:37) - Successfully released change log lock 2024-07-26 16:26:56,407 INFO l.l.c.JavaLogger.log (line:37) - Command execution complete 2024-07-26 16:26:56,465 INFO o.r.Reflections.scan (line:219) - Reflections took 24 ms to scan 1 urls, producing 5 keys and 5 values 2024-07-26 16:26:56,516 INFO o.r.Reflections.scan (line:219) - Reflections took 45 ms to scan 2 urls, producing 8 keys and 185 values *** Eltex License Manager CLI 1.4 *** *** Input 'help' to view available commands *** > main users settings iprules license elmi>
В результате выполнения команды пользователь получит доступ к CLI Offline ELM.
5. Выполнить инсталляцию бандла Offline ELM.
Для установки бандла Offline ELM необходимо выполнить следующие действия:
5.1. Скопировать файл бандла в папку share/ в корне Offline ELM. Запустить CLI Offline ELM:
$ docker compose --file docker-compose-cli.yml run --rm elmi-offline-cli
5.2. В разделе "main" выполнить команду инсталляции бандла "install bundle --file":
elmi> install bundle --file /share/ECMC0000001.bundle You will install offline licensing bundle from '/share/ECMC0000001.bundle'. Are you sure? (y/N) y License data registration command db1d39a3-f295-3391-a977-544d4367da47 (node1) is created. Please wait... elmi> License data registration command db1d39a3-f295-3391-a977-544d4367da47 (node1) is done! elmi>
Запуск сервисов Offline ELM с удаленной базой данных
1. Распаковать архив с данными на удаленном сервере, где будет запускаться база данных.
2. Установить переменные ELM_TAG и ELM_DB_HOST в .env файле. Иначе интерфейс из контейнера elmi-offline-db не будет проброшен на хост, и база данных не будет доступна.
ELM_TAG="1.4" ELM_DB_HOST=192.168.1.2
3. Запустить контейнеры БД командой. При этом, если это первый запуск, контейнер elmi-offline-db может иметь состояние unhealthy — это корректное поведение. Состояние healthy установится после подключения к базе данных сервера Offline ELM (контейнер elmi-offline-db).
$ docker compose -f docker-compose-db.yml up -d
4. Перейти в папку с конфигурационными файлами Offline ELM на другом сервере, где расположен docker-compose-remote.yml файл.
5. Установить переменные окружения ELM_TAG, ELM_DB_CONNECT_HOST и ELM_DB_CONNECT_PORT в соответствии с необходимыми значениями:
ELM_TAG="1.4" ELM_DB_CONNECT_HOST=192.168.1.2 ELM_DB_CONNECT_PORT=5432
6. Запустить Offline ELM командой:
$ docker compose -f docker-compose-remote.yml up -d
7. После запуска убедиться, что все контейнеры Offline ELM запустились корректно (имеют статус "running (healthy)"):
$ docker compose ps
Остановка Offline ELM
Для остановки Offline ELM требуется произвести следующие шаги:
1. Перейти в директорию с файлами работающего Offline ELM.
2. Выполнить команду:
$ docker compose down --remove-orphans
Обновление Offline ELM в рамках версии 1.4
Для обновления Offline ELM в рамках версии 1.4 требуется произвести следующие шаги (показан пример обновления с версии 1.4-1 на 1.4-2):
1. Перейти в директорию с compose-файлами работающего Offline ELM.
2. Остановить Offline ELM командой:
$ docker compose down --remove-orphans
3. Произвести резервное копирование всех рабочих файлов в текущей директории:
$ zip -q -r elm_backup.zip elm/
После формирования резервной копии всех служебных файлов её рекомендуется перенести в другую директорию на хосте или на удаленный сервер для сохранности сформированной резервной копии.
4. Скопировать в текущую директорию следующие файлы и директории с заменой, если по ним было изменение:
- docker-compose.yml
- docker-compose-cli.yml
5. В .env файле указать новое значение переменной ELM_TAG:
ELM_TAG="1.4-2"
6. Запустить Offline ELM командой:
$ docker compose up -d
7. После запуска убедиться, что все Docker-контейнеры сервисов Offline ELM запустились корректно (имеют статус "running (healthy)"):
$ docker compose ps
8. Запустить Offline ELM CLI и, введя команду "show elm" в разделе "main" CLI, убедиться, что версия Offline ELM сервисов стала 1.4-2:
Обновление Offline ELM завершено.
Удаление Offline ELM
Для полного удаления Offline ELM с хоста требуется произвести следующие шаги:
1. Перейти в директорию с файлами работающего Offline ELM.
2. Выполнить команду:
$ docker compose down --remove-orphans --rmi all --volumes
В результате выполнения команды Offline ELM будет остановлен. В случае, если на момент выполнения команды он еще функционировал, будут удалены служебные сети, хранилища и образы в Offline.
3. Удалить оставшиеся от Offline ELM каталоги и служебные файлы:
# rm -rf .env config/ data/ db/ docker-compose-cli.yml docker-compose.yml log/ share/
Offline ELM полностью удален с хоста.
Просмотр логов сервисов Offline ELM
Логи сервисов Offline ELM можно разбить на две группы:
- логи, которые пишутся в отдельные файлы в файловой системе хоста (все логи системы Offline ELM);
- логи, которые пишутся в систему логирования Docker (все логи системы Offline ELM + логи контейнера elm-token).
Данные логи расположены в директории log в рабочем каталоге Offline ELM в следующей иерархии:
log/ ├── elmi-cli │ ├── db.log │ ├── debug.log │ ├── kernel.log │ └── networking.log └── elmi-server ├── commerce.log ├── db.log ├── debug.log ├── engine.log ├── hosts.log ├── kernel.log ├── networking.log ├── resources.log ├── security.log └── users.log 2 directories, 14 files
Логи разбиты по файлам, в каждый файл пишутся логи соответствующего функционала Offline ELM:
db.log — логи взаимодействия сервиса Offline ELM с БД Offline ELM;
debug.log — отладочные логи сервиса Offline ELM;
engine.log и kernel.log — логи операций сервиса Offline ELM;
hosts.log — логи доступа хостов к Offline ELM;
networking.log — логи сетевого взаимодействия сервиса Offline ELM с другими компонентами системы ELM;
security.log — логи событий безопасности Offline ELM;
Для каждого файла отрабатывает ротация, которая настраивается параметрами "ELM_LOG_FILE_MAX_SIZE" и "ELM_LOG_FILE_MAX_COUNT" в .env файле в рабочем каталоге Offline ELM.
Для просмотра логов можно использовать инструменты Docker или плагина Docker Compose:
$ docker logs elmi-offline-init Fri Jul 26 15:26:17 +07 2024: Setting elmi-offline config files Fri Jul 26 15:26:17 +07 2024: Setting elmi-offline-cli config files Fri Jul 26 15:26:17 +07 2024: ELM_DB_USER variable has changed Fri Jul 26 15:26:17 +07 2024: ELM_DB_PASSWORD variable has changed Fri Jul 26 15:26:27 +07 2024: Connecting to database ... 1 Fri Jul 26 15:26:27 +07 2024: Successfully connected to database Fri Jul 26 15:26:27 +07 2024: Setting instanceID variable value Fri Jul 26 15:26:27 +07 2024: Setting instanceID variable value Fri Jul 26 15:26:27 +07 2024: Docker containers elmi-offline is ready to start
Более подробно о работе системы логирования Docker можно узнать из официальной документации.
Список переменных окружения Offline ELM
Название параметра | Описание параметра | Значение по умолчанию | Обязательность параметра | Варианты значений/Примечания |
---|---|---|---|---|
ELM_TAG | Версия используемых ELM образов в формате "<версия ELM>-<номер сборки>" | - | Да | 1.4-1/1.4-2 и т.д. |
ELM_INSTANCE_ID | Определяет основной или резервный сервер | node1 | Нет | node1/node2 |
ELM_SERVER_HOST | IP-адрес хоста, на котором будет работать серверная часть Offline ELM (контейнер elmi-offline-server) | 0.0.0.0 | Нет | - |
ELM_SERVER_PORT | Номер порта для подключения к Offline ELM (контейнер elmi-offline-server) | 8099 | Нет | - |
ELM_DB_HOST | IP-адрес, на котором будет поднят порт для подключения к БД (контейнер elmi-offline-db) | 127.0.0.1 | Нет | - |
ELM_DB_PORT | Номер порта, на котором развернута БД (контейнер elmi-offline-db) | 5432 | Нет | - |
ELM_DB_CONNECT_HOST | Имя хоста (или IP-адрес) для подключения соответствующего приложения к БД (к контейнеру elmi-offline-db) | elmi-offline-db | Нет | - |
ELM_DB_CONNECT_PORT | Номер порта для подключения соответствующего приложения к БД (к контейнеру elmi-offline-db) | 5432 | Нет | - |
ELM_DB_USER | Имя служебного пользователя БД сервера ELM | elm | Нет | - |
ELM_DB_PASSWORD | Пароль служебного пользователя БД ELM | - | Нет | - |
ELM_THREAD_LIMIT | Максимальное количество одновременно поддерживаемых сессий | 10 | Нет | - |
ELM_QUEUE_LIMIT | Максимальный размер очереди клиентов, ожидающих подключения | 100 | Нет | - |
ELM_DOS_FILTER_MAX_REQUESTS_PER_SECOND | Максимальная частота запросов в секунду от одного хоста, превышение которой приведет к блокировке | 50 | Нет | - |
ELM_DOS_FILTER_DELAY_MS | Максимальное время отклика хоста, превышение которого приведет к блокировке | 200 | Нет | - |
ELM_LOG_FILE_MAX_SIZE | Максимальный размер одного log-файла в МБ | 10 | Нет | - |
ELM_LOG_FILE_MAX_COUNT | Максимальное количество log-файлов в ротации | 4 | Нет | - |
ELM_KERNEL_LOG_LEVEL | Уровень логирования логов типа "kernel" для сервисов ELM | info | Нет | info/debug |
ELM_NETWORKING_LOG_LEVEL | Уровень логирования логов типа "networking" для сервисов ELM | info | Нет | info/debug |
ELM_DEBUG_LOG_LEVEL | Уровень логирования логов типа "debug" для сервисов ELM | off | Нет | info/debug |
ELM_ENGINE_LOG_LEVEL | Уровень логирования логов типа "engine" для сервисов ELM | info | Нет | info/debug |
ELM_DB_LOG_LEVEL | Уровень логирования логов типа "db" для сервисов ELM | info | Нет | info/debug |
ELM_USERS_LOG_LEVEL | Уровень логирования логов типа "users" для сервисов ELM | info | Нет | info/debug |
ELM_SECURITY_LOG_LEVEL | Уровень логирования логов типа "security" для сервисов ELM | info | Нет | info/debug |
ELM_HOSTS_LOG_LEVEL | Уровень логирования логов типа "hosts" для сервисов ELM | info | Нет | info/debug |
ELM_COMMERCE_LOG_LEVEL | Уровень логирования логов типа "commerce" для сервисов ELM | info | Нет | info/debug |
ELM_CLI_KERNEL_LOG_LEVEL | Уровень логирования логов типа "kernel" для CLI ELM | error | Нет | error/debug |
ELM_CLI_DEBUG_LOG_LEVEL | Уровень логирования логов типа "debug" для CLI ELM | off | Нет | off/debug |
ELM_CLI_DB_LOG_LEVEL | Уровень логирования логов типа "db" для CLI ELM | error | Нет | error/debug |
ELM_CLI_NETWORKING_LOG_LEVEL | Уровень логирования логов типа "networking" для CLI ELM | error | Нет | error/debug |
ELM_PCSCD_LOG_LEVEL | Уровень логирования логов для демона pcscd | off | Нет | off/debug |
COMMON_TZ | Часовой пояс, используемый для работы всех сервисов | UTC | Нет | - |
ELM_WEB_UI_PORT | Порт web-интерфейса на Docker-хосте | 8092 | Нет | - |
DOCKER_GROUP_ID | Добавление пользователя Docker в контейнер | - | Нет | Docker Daemon Permissions |