- Описание функциональных характеристик системы
- Поддержание жизненного цикла
- Установка PromUC
- Настройка сервисов
- Обновление PromUC
- Резервное копирование и восстановление базы данных Promuc FrameWork
- Рекомендации по безопасности
- Руководство по эксплуатации и администрированию
- Module GIS
- Конфигурирование правил и сценариев
- Module Framework
- Module Interface
- Технологии проекта
- Эксплуатация КТС
- Единый сервис аутентификации
- Информация о релизах
Настройка сервисов¶
Файлы сервисов PromUC располагаются в отдельных каталогах пути установки, по умолчанию /opt/promuc
, а также в каталоге хранения томов Docker, по умолчанию /var/lib/docker/volumes
.
Основные файлы framework
:
Путь |
Назначение |
---|---|
conf |
Каталог с конфигурационными файлами |
docker-compose-cert.yml |
Шаблон конфигурации Docker Compose, используемый при генерации сертификатов или использовании имеющихся |
docker-compose-le.yml |
Шаблон конфигурации Docker Compose, используемый при генерации сертификатов посредством сервиса Let’s Encrypt |
install.sh |
Скрипт установки |
template.env |
Шаблон файла .env |
Timescale DB¶
Конфигурационные файлы¶
В каталоге postgres/conf
располагаются файлы инициализации баз данных:
200_disable_telemetry.sql |
Отключает телеметрию |
201_framework-init.sql |
Инициализация БД |
201_gitea-init.sql |
Инициализация БД |
202_metrics-init.sql |
Инициализация БД |
Файл .env¶
В файле-шаблоне template.env
указаны переменные, значения которых будут использованы для создания соответствующих файлов docker-секретов в папке .secrets
. В файл .env они не переносятся при установке сервиса.
FRAMEWORK_DB
FRAMEWORK_DB_USER
FRAMEWORK_DB_PASS
|
postgres/.secrets/framework-db postgres/.secrets/framework-db-user postgres/.secrets/framework-db-pass |
GITEA_DB
GITEA_DB_USER
GITEA_DB_PASS
|
postgres/.secrets/gitea-db postgres/.secrets/gitea-db-user postgres/.secrets/gitea-db-pass |
METRICS_DB
METRICS_DB_USER
METRICS_DB_PASS
|
postgres/.secrets/metrics-db postgres/.secrets/metrics-db-user postgres/.secrets/metrics-db-pass |
POSTGRES_PASSWORD
|
postgres/.secrets/postgres-passwd |
Публикация доступа к Timescale DB¶
В случае если требуется предоставить сторонний доступ к контейнеру postgres
необходимо:
в файле
postgres/docker-compose.yml
снять комментирование строк:
## внешнее подключение к postgres # extends: # service: postgres # file: ./extends.docker-compose.yml
в файле
proxy/conf/traefik.yml
снять комментирование строк:
## внешнее подключение к postgres # postgres: # address: :5432
в файле
proxy/docker-compose.yml
снять комментирование строк:
## внешнее подключение к postgres # - 5432:5432
выполнить рестарт сервисов:
# docker compose up -d --force-recreate proxy postgres
PromUC FrameWork¶
Файл config_postgres.json¶
Конфигурационный файл-шаблон framework/conf/template.config_postgres.json
хранит настройки подключения к БД:
{
"host": "172.16.16.254",
"port": "5432",
"dbname": "",
"user": "",
"password": ""
}
При установке FrameWork значения параметров dbname
, user
, password
заполняются из файлов:
dbname |
postgres/.secrets/framework-db |
user |
postgres/.secrets/framework-db-user |
password |
postgres/.secrets/framework-db-pass |
Настройки процесса fcgi¶
Для индивидуальной настройки параметров контейнера FrameWork необходимо получить из него файл конфигурации lighttpd.conf
:
Полученный файл необходимо добавить в качестве тома в конфигурацию Docker Compose:
docker-compose.yml:
services:
framework:
...
volumes:
...
- ./conf/lighttpd.conf:/app/lighttpd.conf:ro
lighttpd.conf:
server.modules = (
"mod_fastcgi",
)
fastcgi.debug = 0
fastcgi.server = (
"/" => ((
"bin-path" => "/var/www/html/api/index.fcgi",
"socket" => "/tmp/app.sock",
"check-local" => "disable",
"max-procs" => 1,
"write-timeout" => 15,
"read-timeout" => 15,
))
)
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
server.document-root = "/var/www/html"
server.compat-module-load = "disable"
server.http-parseopt-host-strict = "disable"
server.http-parseopts = (
"url-normalize" => "disable",
)
Дополнительные настройки процесса FrameWork¶
Параметры настройки fcgi-процесса FrameWork содержатся в секции fastcgi.server
.
"max-procs" => 1
- не рекомендуется устанавливать значения более 1, т.к. FrameWork не поддерживает в текущей версии более 1-го процесса.
"write-timeout" => 15
- количество секунд до прерывания при попытке записи на сервер FCGI (по умолчанию: 0; тайм-аут отсутствует). Оптимальная величина подбирается на основании обрабатываемой FrameWork нагрузки.
"read-timeout" => 15
- количество секунд до прерывания при попытке чтения из сервера FCGI (по умолчанию: 0; тайм-аут отсутствует). Оптимальная величина подбирается на основании обрабатываемой FrameWork нагрузки.
"connect-timeout"
- количество секунд до прерывания подключения к серверу FCGI (по умолчанию: 8). Рекомендуется увеличивать если старт FrameWork длится более 8 с.
Документация https://redmine.lighttpd.net/projects/lighttpd/wiki/Mod_fastcgi
Дополнительные настройки сервера lighttpd¶
"server.listen-backlog"
- размер очереди соединений (по умолчанию: 1024).
"server.max-connections"
- максимальное количество соединений (по умолчанию: 1024). Устанавливается не более трети или половины от значения "server.max-fds"
.
"server.max-fds"
- максимальное количество файловых дескрипторов (по умолчанию равен значению ulimit -n
).
Документация https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ConfigurationOptions
Настройка Gitea¶
Файл .env¶
GITEA_IMG
- используемый docker-образ GiteaGITEA_TAG
- тег используемого docker-образаRUNNER_TAG
- тег используемого docker-образа Act RunnerGITEA_ORG
- название организации создаваемой в GiteaFLUENTBIT_ADDR
- адрес сервера fluentbitGITEA_ENABLE_ACTIONS
- включает или отключает использование сервиса Gitea Act runner и Gitea GITEA_ENABLE_ACTIONSНастройка контейнер-плагинов¶
PromUC позволяет запускать дополнительный функционал в отдельных контейнер-плагинах с исполнением пользовательского кода.
При установке в Gitea загружаются репозитории шаблоны с примерами пользовательского кода на Python, Go, FastCGI. Список репозиториев указан в файле repos.yml
.
Для управления запуском и остановки контейнеров используется сервис Updater, при установке которого функционируется Systemd-сервис promuc-updater.service
. Данный сервис принимает webhook от Gitea об изменениях в репозиториях плагинов и запускает или останавливает контейнеры.
Для создания плагина необходимо создать новый репозиторий на основе соответствующего щаблона и выполнить соотвествующие настройки.
Дополнительный модуль с Python-приложением¶
Реализация дополнительного модуля (plugin) PromUC в виде docker-контейнера и Python web-приложения.
После запуска данного модуля возможно обращение к приложению посредством отправки запросов по адресу http://plugin_ИмяОрганизации_ИмяРепозитория
или с указанием TCP-порта http://plugin_ИмяОрганизации_ИмяРепозитория:Порт
. Например:
Настройка модуля¶
Код приложения помещается в папку src
. Изменение функционала контейнера, например, добавление дополнительных библиотек, настройка сборки приложения и прочее выолняется конфигурирование файла Dockerfile
. Контейнер плагина запускается в сети PromUC c параметрами:
без публикации сетевых портов на хосте
--network proxy_backend
- в сети PromUC--user 1
- выполнением процессов с правами ограниченного пользователя--restart=on-failure:2
- рестарт после ошибки ограниченное число раз
Параметры дополнительного модуля задаются в файле plugin.yml
.
Запуск модуля¶
Для запуска дополнительного модуля необходимо указать run: true
в plugin.yml
. Соответственно, для остановки указать run:false
.
При старте модуля производится сборка docker-образа, поэтому первичный запуск или после внесения изменений в содержимое репозитория модуля выполняется с задержкой, длина которой зависит от сложности сборки приложения модуля, производительности хоста PromUC и его текущей нагрузки.
После управляемой остановки модуля его контейнер удаляется, при аварийной остаётся выключенным.
Информация о запущенном контейнере добавляется в файл install/config.json
, при остановке удаляеется.
Управление модулем из операционной системы хоста PromUC¶
Остановка дополнительного модуля:
Старт дополнительного модуля:
Если модуль ранее не запускался, отсутствует docker-образ модуля, то команды выполнится с ошибкой и модуль не будет запущен.
При рестарте операционной системы хоста служба promuc-updater выполняет старт дополнительных модулей указанных в файле install/config.json
Контроль работы модуля¶
С помощью docker-cli:
С помощью Portainer, в разделе Containers.
Состав дополнительного модуля¶
docker-контейнер на базе
python:slim
приложение
app
Файл конфигурации¶
plugin.yml:
type:container
- обозначает тип дополнительного модуляport:<integer>
- номер TCP-порта веб-сервераforks:<integer>
- количество запускаемых форков приложенияrun:<true|false>
- признак запуска дополнительного модуля
Дополнительный модуль с Go-приложением¶
Реализация дополнительного модуля (plugin) PromUC в виде docker-контейнера и Go web-приложения.
После запуска данного модуля возможно обращение к приложению посредством отправки запросов по адресу http://plugin_ИмяОрганизации_ИмяРепозитория
или с указанием TCP-порта http://plugin_ИмяОрганизации_ИмяРепозитория:Порт
. Например:
Настройка модуля¶
Код приложения помещается в папку src
. Изменение функционала контейнера, например, добавление дополнительных библиотек, настройка сборки приложения и прочее выолняется конфигурирование файла Dockerfile
. Контейнер плагина запускается в сети PromUC c параметрами:
без публикации сетевых портов на хосте
--network proxy_backend
- в сети PromUC--user 1
- выполнением процессов с правами ограниченного пользователя--restart=on-failure:2
- рестарт после ошибки ограниченное число раз
Параметры дополнительного модуля задаются в файле plugin.yml
.
Запуск модуля¶
Для запуска дополнительного модуля необходимо указать run: true
в plugin.yml
. Соответственно, для остановки указать run:false
.
При старте модуля производится сборка docker-образа, поэтому первичный запуск или после внесения изменений в содержимое репозитория модуля выполняется с задержкой, длина которой зависит от сложности сборки приложения модуля, производительности хоста PromUC и его текущей нагрузки.
После управляемой остановки модуля его контейнер удаляется, при аварийной остаётся выключенным.
Информация о запущенном контейнере добавляется в файл install/config.json
, при остановке удаляеется.
Управление модулем из операционной системы хоста PromUC¶
Остановка дополнительного модуля:
Старт дополнительного модуля:
Если модуль ранее не запускался, отсутствует docker-образ модуля, то команды выполнится с ошибкой и модуль не будет запущен.
При рестарте операционной системы хоста служба promuc-updater выполняет старт дополнительных модулей указанных в файле install/config.json
Контроль работы модуля¶
С помощью docker-cli:
С помощью Portainer, в разделе Containers.
Состав дополнительного модуля¶
docker-контейнер на базе
debian:stable-slim
приложение
app
файл plugin.yml
Файл конфигурации¶
plugin.yml:
type:container
- обозначает тип дополнительного модуляport:<integer>
- номер TCP-порта веб-сервераforks:<integer>
- количество запускаемых форков приложенияrun:<true|false>
- признак запуска дополнительного модуля
Дополнительный модуль с FastCGI-приложением¶
Реализация дополнительного модуля (plugin) PromUC в виде docker-контейнера и FastCGI web-приложения.
После запуска данного модуля возможно обращение к приложению посредством отправки запросов по адресу http://plugin_ИмяОрганизации_ИмяРепозитория
или с указанием TCP-порта http://plugin_ИмяОрганизации_ИмяРепозитория:Порт
. Например:
Настройка модуля¶
Код приложения помещается в папку src
. Изменение функционала контейнера, например, добавление дополнительных библиотек, настройка сборки приложения и прочее выолняется конфигурирование файла Dockerfile
. Контейнер плагина запускается в сети PromUC c параметрами:
без публикации сетевых портов на хосте
--network proxy_backend
- в сети PromUC--user 1
- выполнением процессов с правами ограниченного пользователя--restart=on-failure:2
- рестарт после ошибки ограниченное число раз
Параметры дополнительного модуля задаются в файле plugin.yml
.
Запуск модуля¶
Для запуска дополнительного модуля необходимо указать run: true
в plugin.yml
. Соответственно, для остановки указать run:false
.
При старте модуля производится сборка docker-образа, поэтому первичный запуск или после внесения изменений в содержимое репозитория модуля выполняется с задержкой, длина которой зависит от сложности сборки приложения модуля, производительности хоста PromUC и его текущей нагрузки.
После управляемой остановки модуля его контейнер удаляется, при аварийной остаётся выключенным.
Информация о запущенном контейнере добавляется в файл install/config.json
, при остановке удаляеется.
Управление модулем из операционной системы хоста PromUC¶
Остановка дополнительного модуля:
Старт дополнительного модуля:
Если модуль ранее не запускался, отсутствует docker-образ модуля, то команды выполнится с ошибкой и модуль не будет запущен.
При рестарте операционной системы хоста служба promuc-updater выполняет старт дополнительных модулей указанных в файле install/config.json
.
Контроль работы модуля¶
С помощью docker-cli:
С помощью Portainer, в разделе Containers.
Состав модуля¶
docker-контейнер на базе
debian:stable-slim
web-сервер
lighttpd
с включённым модулемmod_fastcgi
приложение
app
использующее для взимодействия с web-сервером протокол FastCGI
Файл конфигурации plugin.yml¶
plugin.yml:
type:container
- обозначает тип дополнительного модуляport:<integer>
- номер TCP-порта веб-сервераforks:<integer>
- количество запускаемых форков приложенияrun:<true|false>
- признак запуска дополнительного модуля
PromUC RuleEngine¶
Данный сервис включает в себя выполнение контейнеров: ruleengine
, ruleengine-front
, ruleengine-transport
, ruleengine-cov
. Дополнительно для управления данными используется сервис redis
.
Для взаимодействия с другими компонентами и потребителями в сети заказчика используются сетевые tcp-порты: 5555
, 5554
, 7777
.
Конфигурация PromUC RuleEngine хранится в репозитории, название которого и адрес определяются посредством переменных в файле .env
:
RULEENGINE_REPO=ruleengine-config
RULEENGINE_REPO_URL=https://${SERVICE_DOMAIN:-localhost}/promuc/ruleengine-config.git
Сервис использует локальную копию репозитория в docker-томе promuc_storage
, которую синхронизирует с центральным репозиторием в Gitea посредством сервиса Updater
.
Updater¶
Данный сервис используется для синхронизации репозитория с конфигурацией PromUC RuleEngine и управления контейнерами плагинов.
При установке настраивается сервис systemd promuc-updater.service
, который в обрабатывает поступающие HTTP POST запросы и выполняет необходимые команды по синхронизации и пуск/остановку контейнеров плагинов.
Проверить состояние сервиса:
$ systemctl status promuc-updater.service
● promuc-updater.service - PromUC local Updater service
Loaded: loaded (/usr/local/lib/systemd/system/promuc-updater.service; enabled; preset: enabled)
Active: active (running) since Mon 2024-12-16 20:43:55 MSK; 1 day 16h ago
Docs: https://promuc.ru/#doc
Process: 628487 ExecStartPost=/opt/promuc/updater/host/start_plugins.sh (code=exited, status=0/SUCCESS)
Main PID: 628485 (webhook)
Tasks: 8 (limit: 4644)
Memory: 11.1M
CPU: 586ms
CGroup: /system.slice/promuc-updater.service
└─628485 /opt/promuc/updater/webhook -hotreload -hooks /opt/promuc/updater/host/hooks.yaml -verbose -ip 192.168.0.2 -port 9090
Dec 17 12:32:51 vpn1 webhook[628485]: [webhook] 2024/11/17 12:32:51 [983bdc] 200 | 2 B | 13.893µs | | OPTIONS /
Dec 17 12:33:24 vpn1 webhook[628485]: [webhook] 2024/11/17 12:33:24 [2b7599] 200 | 2 B | 36.584µs | www | GET /
Dec 17 17:44:55 vpn1 webhook[628485]: [webhook] 2024/11/17 17:44:55 [4566fd] 200 | 2 B | 74.42µs | 185.90.50.107:9090 | GET /
systemctl restart promuc-updater.service
.systemctl stop promuc-updater.service
.systemctl start promuc-updater.service
.