Общая информация о конфигурации сервисов

Для конфигурации сервисов используют переменные окружения, которые передаются из docker-compose. Данные переменные вынесены в файл конфигурации .env. Их можно изменять в зависимости от различных внешних условий.

Конфигурация ecss-clerk

Основными параметрами для изменения являются адрес адресной книги, логин и пароль от учетной записи keycloak.

Пример файла .env представлен ниже:

#####################################################
# Required
#####################################################
PEEPER_TOKEN=""
PEEPER_IP="" # IP сервера Peeper, на которое будет резолвиться доменное имя сервера Peeper
PEEPER_HOST="" # Доменное имя или IP адрес Peeper сервера
PEEPER_EXTERNAL_MODE="false" # false, если на сервере отсутствует external network в docker, true - если присутствует
HOSTNAME= # Имя хоста для Peeper. Не может содержать точек
DOCKER_GID=999 # GID группы docker на хостовой машине. Нужен peeper-telegraf для доступа к /var/run/docker.sock без запуска с root-правами.

#####################################################
# Базовые
#####################################################
TZ=Asia/Novosibirsk
LOCALTIME_PATH=/etc/localtime
RESTART_POLICY=always
LOG_LEVEL=info

#####################################################
# Реестры и теги образов
#####################################################
DOCKER_REPO_EXT=git.eltex.loc:4567/ecss-ext
DOCKER_REPO_ECSS=git.eltex.loc:4567/ecss

# Теги сервисов
TAG=2.7.0.53        # clerk
UI_TAG=2.7.0         # ecss-asr-ui
MONGO_TAG=4.4.22
MONGO_EXPORTER_TAG=0.51.0
VOSK_TAG=2.7.0.5    # asr-server/vosk-server

#####################################################
# Clerk
#####################################################
CLERK_HOST=clerk
CLERK_PORT=8000
METRICS_PATH=/metrics


PB_URL=http://eltex.loc/book2.vcf
PB_SOURCES=VCF

#Переменные связанные с AdB
AB_AUTH_TYPE=BY_KEYCLOAK_JWT
AB_API_KEY=               
AB_URL=http://localhost:4000/api/graphql/v1
AB_AUTH_HOST=keycloak
AB_AUTH_PORT=8085
AB_AUTH_REALM=clerk
AB_CLIENT_ID=address_book
AB_CLIENT_SECRET=secret_from_address_book

# Переопределения логов (опционально)
CLERK_LOG_LEVEL=
WEBBACKEND_LOG_LEVEL=
VOSK_LOG_LEVEL=
ASR_SERVER_LOG_LEVEL=
MONGO_LOG_LEVEL=
NGINX_LOG_LEVEL=
KEYCLOAK_LOG_LEVEL=
KEYCLOAK_DB_LOG_LEVEL=
KEYCLOAK_IMPORTER_LOG_LEVEL=

ASR_TIMEOUT=12s

#####################################################
# Mongo для истории Clerk
#####################################################
MONGO_DB_HOST=mongo
MONGO_PORT=27017
MONGO_DB_NAME=history-db
MONGO_INITDB_ROOT_USERNAME=root
MONGO_EXPORTER_PORT=9276

#####################################################
# Clerk-ui (asr-ui)
#####################################################
WEBBACKEND_PORT=8091
NGINX_CONTAINER_NAME=nginx
NGINX_EXTERNAL_PORT=8080

#####################################################
# ASR / VOSK
#####################################################
VOSK_SERVER_INTERFACE=vosk-server
VOSK_SERVER_PORT=2700
VOSK_SAMPLE_RATE=48000
VOSK_BUF_DIR=/buf_dir

ASR_HOST=asr-server
ASR_PORT=8003
VOSK_HOST=vosk-server

# Метрики VOSK
VOSK_METRIC_PORT=2701

#####################################################
# VAD
#####################################################
VAD_SILENCE_DURATION=1000
VAD_SPEECH_PAD=500
VAD_THRESHOLD=0.7
VAD_SAMPLERATE=16000
VAD_TARGET_DBFS=-30.0

#####################################################
# Keycloak
#####################################################
KEYCLOAK_HOST=keycloak
KEYCLOAK_PORT=8085
KEYCLOAK_REALM=clerk

# Клиент для авторизации пользователей в UI/Clerk
KEYCLOAK_CLIENT=clerk-client
KEYCLOAK_CLIENT_SECRET=Q4Cbf6NzPni9n4wprlgGuUPOyKIamWZ0

# Админ/БД Keycloak
KEYCLOAK_ADMIN=admin

KC_DB=postgres
KC_DB_URL=jdbc:postgresql://keycloak-db:5432/root
KC_DB_USERNAME=root

POSTGRES_DB=root
POSTGRES_USER=root

#####################################################
# PEEPER
#####################################################
APP_REGISTRY=nexus.eltex.loc:9007
APP_VERSION=1.1

PEEPER_PORT=443

PEEPER_TIMEZONE=Asia/Novosibirsk

DOCKER_SOCKET=/var/run/docker.sock
JOURNAL_PERSISTENT=/var/log/journal
JOURNAL_VOLATILE=/run/log/journal

TELEGRAM_BOT_TOKEN=some_token
TELEGRAM_CHAT_ID=some_token


MEM_LIMIT_AGENT=256m
MEM_LIMIT_PROVISIONER=256m
MEM_LIMIT_TELEGRAF=256m
MEM_LIMIT_VECTOR=256m

Описание переменных ecss-clerk

Ниже приведено описание основных переменных:

ПеременнаяОписание
TZ

Часовой пояс, в котором работают все контейнеры (логирование, планировщики и т.п.). Пример: Asia/Novosibirsk.

LOCALTIME_PATH

Путь к файлу локального времени хоста, монтируемому в контейнеры для синхронизации системного времени (/etc/localtime).

EXTERNAL_HOST

Внешний адрес/домен, по которому UI/Keycloak доступны пользователям (используется в webbackend для формирования ссылок авторизации).

LOGS_DIR / LOG_DIR

Каталог для хранения логов сервисов внутри томов (в Nginx/UI — каталог логов веб-интерфейса). В compose жёстко задан как /app/logs или /app/log.

PCM_CACHE / RECORD_DIR

Каталог для хранения временных/кеш‑файлов аудио (PCM/WAV). В Nginx используется RECORD_DIR=/app/records, данные складываются в volume clerk-pcm-data.

CLERK_HOST

Внутреннее имя хоста сервиса Clerk в Docker‑сети (в Nginx — clerk).

CLERK_PORT

Порт HTTP‑API сервиса Clerk (REST‑эндпоинты распознавания и управления). Пробрасывается наружу как ${CLERK_PORT}:${CLERK_PORT}.

WEBBACKEND_PORT

Порт HTTP/WebSocket‑backend’а UI (webbackend), через который Nginx проксирует запросы статуса и WebSocket.

WS_PORT

Порт, на котором webbackend принимает WebSocket‑подключения (устанавливается из WEBBACKEND_PORT).

NGINX_CONTAINER_NAME

Имя контейнера Nginx, используемого как фронтенд/UI‑прокси для ASR. В webbackend проброшено как NGINX_CONTAINER_NAME=nginx.

NGINX_EXTERNAL_PORT

Внешний порт для веб‑интерфейса (порт хоста, на котором доступен Nginx/UI, по умолчанию прокидывается в контейнер на 80).

ADDRESS_BOOK_URL

URL внешнего сервиса телефонного справочника (AddressBook), используемого Clerk для поиска контактов (GraphQL API).

PB_URL

URL внешнего источника телефонной книги в формате vCard (файл .vcf), который Clerk может использовать как источник контактов.

PB_SOURCES

Источники телефонной книги для Clerk (например, VCF, может быть комбинированный список).

ASR_HOST

Внутреннее имя хоста сервиса ASR‑сервера в Docker‑сети (asr-server).

ASR_PORT

Порт HTTP/WebSocket‑интерфейса ASR‑сервера (эндпоинты prepare_pb, compile, ws/asr_vad и др.).

ASR_TIMEOUT

Таймаут ожидания ответа от ASR‑сервиса при распознавании (например, 12s). Используется в Clerk и в коде API (context.WithTimeout).

VOSK_SERVER_INTERFACE

Адрес/интерфейс на котором Vosk‑сервер слушает входящие WebSocket‑подключения (для asr-server).

VOSK_SERVER_PORT

Порт, на котором Vosk‑сервер принимает WebSocket‑подключения от asr-server.

VOSK_SAMPLE_RATE

Частота дискретизации аудио используемая Vosk‑сервером (Гц).

VOSK_BUF_DIR / BUF_DIR

Каталог буфера Vosk: сюда выкладывается скомпилированный граф модели для последующей загрузки Vosk, а также временные файлы.

VOSK_HOST

Имя хоста Vosk‑сервера в Docker‑сети к которому подключается asr-server (vosk-server).

VAD_SILENCE_DURATION

Минимальная длительность тишины (мс) для фиксации конца речи в VAD. Рекомендуется не менять, если всё работает; при «обрыве» фраз можно увеличить на 200–300 мс.

VAD_SPEECH_PAD

Дополнительная «припадка» (мс) вокруг сегмента речи для более естественной обрезки. При обрезании первых/последних букв можно увеличить на 50–100 мс.

VAD_THRESHOLD

Порог чувствительности VAD (0–1), определяющий, что считать речью. При наличии речи без распознавания — уменьшить на 0.05–0.1; при распознавании шумов — увеличить на 0.1–0.2.

VAD_SAMPLERATE

Частота дискретизации используемая внутри алгоритма VAD (Гц).

VAD_TARGET_DBFS

Целевой уровень громкости (dBFS) для нормализации сегментов перед отправкой в Vosk. При слишком тихой речи/плохих распознаваниях — увеличить на 5–10; при перегрузах — уменьшить на 5–10.

MONGO_DB_HOST

Имя хоста MongoDB в Docker‑сети (mongo).

MONGO_PORT / MONGO_DB_PORT

Порт MongoDB внутри Docker‑сети (по умолчанию 27017).

MONGO_DB_NAME / MONGO_INITDB_DATABASE

Имя базы данных MongoDB используемой для хранения истории и статистики (например history-db).

MONGO_INITDB_ROOT_USERNAME

Имя администратора MongoDB создаваемого при инициализации контейнера.

MONGO_INITDB_ROOT_PASSWORD_FILE

Путь внутри контейнера к файлу с паролем администратора MongoDB (используется секрет /run/secrets/mongo_root_password).

MONGO_USERNAME

Пользователь MongoDB, под которым Clerk подключается к базе (берётся из MONGO_INITDB_ROOT_USERNAME).

MONGO_DB_PASSWORD

Пароль MongoDB, под которым Clerk подключается к базе (читается из секрета mongo_root_password).

MONGO_TAG

Версия (тег) Docker‑образа MongoDB (в compose использован образ 4.4.22, фактически зашит в image).

AUTH_TYPE

Тип авторизации в Clerk. В примере: BY_KEYCLOAK_JWT — авторизация по JWT, выданным Keycloak.

KEYCLOAK_HOST

Имя хоста Keycloak в Docker‑сети (keycloak), также используется webbackend’ом как EXTERNAL_HOST при работе внутри сети.

KEYCLOAK_PORT / KC_HTTP_PORT

Порт, на котором доступен веб‑интерфейс и API Keycloak. Пробрасывается наружу.

KEYCLOAK_REALM / AUTH_REALM / AB_AUTH_REALM

Realm в Keycloak, в котором настроен клиент и пользователи (в примере clerk).

KEYCLOAK_CLIENT / AUTH_CLIENT

Имя клиента (client) в Keycloak, используемого Clerk и UI для авторизации пользователей (clerk-client).

KEYCLOAK_CLIENT_SECRET / AUTH_SECRET

Секрет клиента Keycloak используемый для получения токенов.

KEYCLOAK_ADMIN

Имя администратора Keycloak создаваемого при инициализации (admin).

KC_DB

Имя драйвера/типа БД для Keycloak (postgres).

KC_DB_URL

JDBC‑URL к базе данных Postgres для Keycloak (jdbc:postgresql://keycloak-db:5432/root).

KC_DB_USERNAME

Имя пользователя базы данных Postgres для Keycloak (root).

KC_DB_PASSWORD

Пароль пользователя БД Keycloak (подтягивается из секрета keycloak_db_password).

POSTGRES_DB

Имя базы данных в контейнере Postgres для Keycloak (root).

POSTGRES_USER

Имя пользователя базы данных Postgres для Keycloak (root).

POSTGRES_PASSWORD_FILE

Путь к файлу с паролем пользователя Postgres (секрет postgres_password).

AB_AUTH_HOST

Хост Keycloak, к которому обращается Clerk для получения токена при запросах в AddressBook (в примере localhost, если AddressBook снаружи).

AB_AUTH_PORT

Порт Keycloak для авторизации запросов Clerk -> AddressBook (совпадает с KEYCLOAK_PORT: 8085).

AB_CLIENT_ID

Идентификатор клиента Keycloak под которым Clerk получает токен для обращения к AddressBook.

AB_CLIENT_SECRET

Секрет этого клиента для авторизации запросов к AddressBook.

METRICS_PATH

HTTP‑путь, по которому сервисы экспортируют метрики Prometheus (по умолчанию /metrics).

LOG_LEVEL

Уровень логирования сервисов ASR (info, debug и т.п.). Если задали значение отличное от info, debug, warn,error заполните переменные: CLERK_LOG_LEVEL,  ASR_SERVER_LOG_LEVEL,  VOSK_LOG_LEVEL в соотвествии с правилами указаными в описании этих переменных.

LOG_FILE

Путь к файлу логов внутри контейнера Clerk (/app/log/clerk.log).

CLERK_LOG_LEVELУровень логов только для clerk. Если пусто — берётся LOG_LEVEL, если и его нет — info. (поддерживаются: info, debug, warn,error)
WEBBACKEND_LOG_LEVELУровень логов только для webbackend. Если пусто — берётся LOG_LEVEL, если и его нет — info.
ASR_SERVER_LOG_LEVELУровень логов только для asr-server. Если пусто — берётся LOG_LEVEL, если и его нет — info. (поддерживаются: info, debug, warn,error)
VOSK_LOG_LEVEL

Уровень логов только для vosk-server. Если пусто — берётся LOG_LEVEL, если и его нет — info. (поддерживаются: info, debug, warn,error)

APP_REGISTRY

Адрес реестра контейнеров, из которого будут скачиваться образы Peeper.

APP_VERSION

Версия образов Peeper (agent, provisioner, telegraf, vector), используемая в docker-compose.

PEEPER_IP

IP-адрес сервера Peeper, на который будет резолвиться доменное имя PEEPER_HOST.

PEEPER_HOST

Доменное имя или IP-адрес сервера Peeper, к которому подключаются Peeper-клиенты.

PEEPER_PORT

Сетевой порт сервера Peeper (HTTPS по умолчанию).

PEEPER_EXTERNAL_MODE

Режим работы с Docker-сетью external: false — сети нет, true — сеть external существует.

PEEPER_TIMEZONE

Часовой пояс для контейнеров Peeper (формат tz database, см. список таймзон).

DOCKER_SOCKET

Путь к Docker-сокету хоста, используемому для сбора метрик и информации о контейнерах.

DOCKER_GID

GID группы docker на хостовой машине. Нужен peeper-telegraf для доступа к /var/run/docker.sock без запуска с root-правами.

HOSTNAME

Имя хоста для peeper-agent.

JOURNAL_PERSISTENT

Путь к persistent-журналам systemd (JournalD), монтируемым в Peeper Vector.

JOURNAL_VOLATILE

Путь к volatile-журналам systemd (JournalD), монтируемым в Peeper Vector.

PEEPER_TOKEN

Токен доступа к серверу Peeper для авторизации запросов (используется provisioner).

TELEGRAM_BOT_TOKEN

Токен Telegram-бота для предварительной настройки уведомлений из Peeper/Grafana.

TELEGRAM_CHAT_ID

Идентификатор Telegram-чата или группы, куда отправляются уведомления.

MEM_LIMIT_AGENT

Лимит оперативной памяти для контейнера peeper-agent.

MEM_LIMIT_PROVISIONER

Лимит оперативной памяти для контейнера peeper-provisioner.

MEM_LIMIT_TELEGRAF

Лимит оперативной памяти для контейнера peeper-telegraf.

MEM_LIMIT_VECTOR

Лимит оперативной памяти для контейнера peeper-vector.


Конфигурация ecss-tts

Основными параметрами для изменения являются адрес/доменное имя и порт, на котором сервер будет принимать запросы на синтез речи.

Пример файла .env представлен ниже:

#####################################################
# Global config
#####################################################
DOCKER_REPO="hub-ims.eltex-co.ru/tts"
TAG="2.5.1"

#####################################################
# TTS
#####################################################
TTS_HOST="tts-server"
TTS_PORT="7890"
TTS_COUNT_WORKERS="1"
TTS_MODEL_RU_PATH="./tts_models/vosk_0.10"

Описание переменных ecss-tts

Ниже приведено описание основных переменных:

Переменная

Значение по умолчанию

Описание

TTS_HOST

tts-server

ip address/hostname для входящих запросов на синтез речи

TTS_PORT7890

Порт для входящих запросов на синтез речи

TTS_COUNT_WORKERS1

Количество воркеров ттс сервера

TTS_MODEL_RU_PATH./tts_models/vosk_0.10

Путь до модели для генерации речи внутри контейнера