iac/apps/cde/CONFIGURATION.md

18 KiB
Raw Blame History

Конфигурация проекта cde-orchestration-demo (Оркестратор)

Документ описывает все переменные окружения и способы конфигурирования сервиса.

Способы конфигурирования

Сервис настраивается только через переменные окружения. Разбор выполняется библиотекой github.com/sethvargo/go-envconfig: в каждом бинарнике вызывается envconfig.Process(ctx, config) со своей структурой Config (см. internal/app/http/config.go и internal/app/worker/*/config.go).

Особенности разбора:

  • Глобального префикса нет — в отличие от других сервисов Sarex, переменные не имеют общего префикса (напр. просто LOG_LEVEL, DATABASE_URL).
  • Вложенные секции задаются тегом env:", prefix=XXX_" на поле-структуре. Например поле Database DatabaseConfig с prefix=DATABASE_ и полем Url с тегом env:"URL" даёт переменную DATABASE_URL.
  • Структура Auth не имеет тега prefix, поэтому её поля читаются без префикса: AUTH_HOST, USERNAME, PASSWORD.
  • Значения по умолчанию задаются в теге через default=.... Отсутствие поля без дефолта не приводит к ошибке envconfig (пустое значение), но может привести к падению при инициализации зависимого клиента (напр. пустой PUBLIC_KEY вызовет панику при старте http).

Файл .env подгружается через github.com/lpernett/godotenv: в main вызывается godotenv.Load(*envFileFlag), путь задаётся флагом -env-file (по умолчанию .env). Если файла нет — загрузка пропускается, переменные берутся из окружения процесса.

Отдельного конфиг-файла (yaml/toml) у приложения нет.

Источники переменных по способам запуска:

Способ запуска Откуда берутся переменные
Локально (бинарник) Флаг -env-file.env (godotenv) и/или переменные окружения процесса
Локально (docker-compose) docker-compose.yml: у каждого сервиса env_file: .env
Kubernetes (Helm) .helm/values.yaml: блок envs (обычные значения) и secretEnvs (значения из k8s-секрета cde-secret) чарта universal-chart
Kubernetes (kustomize, этот репозиторий) Vault Agent инжектит секрет secrets/data/vault/apps/cde в файл /vault/secrets/cde-env, который экспортируется в окружение перед запуском бинарника (source /vault/secrets/cde-env)

Бинарники (точки входа)

Бинарник Точка входа Config Назначение
http cmd/http/main.go internal/app/http HTTP API оркестрации (процессы, подпись, загрузка BPMN)
copy cmd/worker/copy/main.go .../worker/copy Воркер копирования документов (copyDocuments)
copyv2 cmd/worker/copyv2/main.go .../worker/copyv2 Копирование документов v2 (copyDocumentsv2)
create_versions cmd/worker/create_versions/main.go .../worker/create_versions Создание версий (createVersions)
create_versionsv2 cmd/worker/create_versionsv2/main.go .../worker/create_versionsv2 Создание версий v2 (createVersionsv2)
flows_callback cmd/worker/flows_callback/main.go .../worker/flows_callback Обратный вызов в сервис flows (flowsCallback)
markings cmd/worker/markings/main.go .../worker/markings Маркировка документов (markDocuments)
markingsv2 cmd/worker/markingsv2/main.go .../worker/markingsv2 Маркировка v2 (markDocumentsv2)
sign cmd/worker/sign/main.go .../worker/sign Подпись документов (signDocuments)
signv2 cmd/worker/signv2/main.go .../worker/signv2 Подпись v2 (signDocumentsv2)
split_pdf cmd/worker/split_pdf/main.go .../worker/split_pdf Разбиение/обработка PDF (splitPDF)
update_bundles cmd/worker/update_bundles/main.go .../worker/update_bundles Обновление бандлов (updateBundles)

Воркеры — это Zeebe job-workers: они подключаются к Zeebe-gateway и обрабатывают Service Task соответствующего типа (ZEEBE_WORKER_JOB_TYPE). HTTP-сервер, помимо приёма запросов, обращается к Camunda Operate/Zeebe (см. ENDPOINTS.md).

Переменные приложения

Дефолт означает, что значения по умолчанию нет.

Общие (для всех бинарников)

Переменная Тип Значение по умолчанию Назначение
ENVIRONMENT string production (у воркеров) Окружение развёртывания. У http не читается
LOG_LEVEL string info (http) / debug (воркеры) Уровень логирования
IS_CONTOUR bool false Режим изолированного контура (влияет на инициализацию S3)

HTTP-сервер (cmd/http)

Переменная Тип Значение по умолчанию Назначение
ADDRESS string :8080 Адрес прослушивания Fiber
PROCESS_CACHE_TTL int (сек) 60 TTL кеша процессов
PROCESS_CACHE_CLEAR_INTERVAL int (сек) 60 Интервал очистки кеша процессов
PUBLIC_KEY string (PEM) RSA public key для проверки JWT. Обязателен: при пустом/некорректном значении сервис падает при старте
OPERATE_URL string Базовый URL Camunda Operate/REST
SAREX_BACKEND_BASE_URL string Базовый URL sarex-backend (проверка MRPA при подписи)

Camunda (CAMUNDA_*)

Переменная Тип Значение по умолчанию Назначение Где используется
CAMUNDA_KEYCLOAK_URL string URL Keycloak для OAuth (Zeebe/Operate) http + воркеры
CAMUNDA_CLIENT_ID string operate Client ID для Operate только http
CAMUNDA_CLIENT_SECRET string identity-secret-for-components Client secret для Operate только http
CAMUNDA_PROCESS_DEFINITION_ID string actionsOnApproval ID определения процесса только http

Zeebe (ZEEBE_*)

Переменная Тип Значение по умолчанию Назначение
ZEEBE_GATEWAY string Адрес Zeebe gateway
ZEEBE_CLIENT_ID string zeebe Client ID
ZEEBE_CLIENT_SECRET string identity-secret-for-components Client secret
ZEEBE_WORKER_JOB_TYPE string зависит от воркера Тип Service Task, который слушает воркер

Значения ZEEBE_WORKER_JOB_TYPE по умолчанию: markDocuments (http/markings), markDocumentsv2 (markingsv2), copyDocuments (copy), copyDocumentsv2 (copyv2), createVersions (create_versions), createVersionsv2 (create_versionsv2), flowsCallback (flows_callback), signDocuments (sign), signDocumentsv2 (signv2), splitPDF (split_pdf), updateBundles (update_bundles).

Database (DATABASE_*)

Переменная Тип Значение по умолчанию Назначение
DATABASE_URL string DSN подключения к PostgreSQL (pgx)
DATABASE_POOL_SIZE int32 10 Размер пула соединений

S3 (S3_*)

Переменная Тип Значение по умолчанию Назначение
S3_ENDPOINT_URL string https://storage.yandexcloud.net Эндпоинт S3
S3_ACCESS_KEY_ID string Access key
S3_SECRET_ACCESS_KEY string Secret key
S3_PARTITION_ID string yc Partition ID (aws-sdk-go-v2)
S3_SIGNING_REGION string ru-central1 Регион для подписи запросов

Auth (без префикса)

Поле-структура Auth не имеет префикса, поэтому переменные читаются напрямую.

Переменная Тип Значение по умолчанию Назначение
AUTH_HOST string Хост сервиса аутентификации (получение токенов пользователя/админа)
USERNAME string Логин админ-учётки
PASSWORD string Пароль админ-учётки

Flows (FLOWS_*)

Переменная Тип Значение по умолчанию Назначение
FLOWS_URL string Базовый URL сервиса flows
FLOWS_INTERNAL_URL string Внутренний URL flows (обновление документов review). Есть только в конфигах copy/copyv2

Workspaces (WORKSPACES_*)

Переменная Тип Значение по умолчанию Назначение
WORKSPACES_URL string URL сервиса рабочих областей (используется воркерами copy/copyv2)

Workflows (WORKFLOWS_*)

Используется воркером split_pdf.

Переменная Тип Значение по умолчанию Назначение
WORKFLOWS_HOST string Хост сервиса workflows
WORKFLOWS_IMAGE_TAG string latest Тег docker-образа задач обработки PDF

Container registry (cr.yandex/crp3ccidau046kdj8g9q) и флаг UploadResultsToS3=true заданы в коде воркера split_pdf (worker.go), а не через окружение.

System log (SYSTEM_LOG_*)

Переменная Тип Значение по умолчанию Назначение
SYSTEM_LOG_URL string URL сервиса системных логов (copy, copyv2, create_versions, create_versionsv2)

Telegram (TELEGRAM_*)

Клиент алертинга для воркеров.

Переменная Тип Значение по умолчанию Назначение
TELEGRAM_TOKEN string Токен бота
TELEGRAM_ALERT_GROUP_ID int64 ID группы для алертов
TELEGRAM_DEBUG bool false Debug-режим бота

AMQP / RabbitMQ (AMQP_*)

Используется воркерами markingsv2 и copyv2 (маркировка бандлов через RabbitMQ).

Переменная Тип Значение по умолчанию Назначение
AMQP_HOST string Хост RabbitMQ
AMQP_PORT string Порт RabbitMQ
AMQP_USER string Пользователь
AMQP_PASSWORD string Пароль
AMQP_PATH_API string Vhost / путь API в URL подключения

Матрица «переменная → бинарник»

Секция http copy copyv2 create_versions create_versionsv2 flows_callback markings markingsv2 sign signv2 split_pdf update_bundles
Общие
ADDRESS/PROCESS_CACHE_*
PUBLIC_KEY,OPERATE_URL,SAREX_BACKEND_BASE_URL,CAMUNDA_CLIENT_*,CAMUNDA_PROCESS_DEFINITION_ID
CAMUNDA_KEYCLOAK_URL,ZEEBE_*
DATABASE_*
S3_*
AUTH_*/USERNAME/PASSWORD
FLOWS_URL
FLOWS_INTERNAL_URL
WORKSPACES_URL
WORKFLOWS_*
SYSTEM_LOG_URL
AMQP_*
TELEGRAM_*

Матрица построена по структурам Config соответствующих бинарников. Наличие поля в структуре не всегда означает, что клиент инициализируется — см. замечания ниже.

Переменные в Helm-чарте (.helm/values.yaml)

Обычные значения (блок envs):

Переменная Значения по окружениям
SAREX_BACKEND_BASE_URL stage: https://stage.sarex.io, preprod: https://preprod.sarex.io, production: https://lk.sarex.io

Значения из секрета (блок secretEnvs, общий для всех сервисов через якорь *cde_secret_envs), берутся из k8s-секрета cde-secret одноимёнными ключами: ENVIRONMENT, LOG_LEVEL, ZEEBE_GATEWAY, DATABASE_URL, S3_ENDPOINT_URL, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, PUBLIC_KEY, PDM_URL, FLOWS_URL, FLOWS_INTERNAL_URL, USERNAME, PASSWORD, CAMUNDA_PROCESS_DEFINITION_ID, OPERATE_URL, CAMUNDA_KEYCLOAK_URL, CAMUNDA_CLIENT_ID, CAMUNDA_CLIENT_SECRET, WORKFLOWS_HOST, WORKSPACES_URL, AUTH_HOST, TELEGRAM_ALERT_GROUP_ID, TELEGRAM_TOKEN, IS_CONTOUR, AMQP_HOST, AMQP_PORT, AMQP_USER, AMQP_PASSWORD, AMQP_PATH_API, SYSTEM_LOG_URL.

Развёртывание через kustomize (этот репозиторий)

В iac/apps/cde секреты доставляются не через secretEnvs чарта, а через Vault Agent Injector: аннотации подов монтируют секрет secrets/data/vault/apps/cde в файл /vault/secrets/cde-env, который экспортируется перед запуском (source /vault/secrets/cde-env, затем exec /http или /worker). Дополнительно контейнерам задаётся S3_IS_CONTOUR=true (примечание: в коде используется переменная IS_CONTOUR).

Оверлеи: base (общие манифесты), brusnika-stage, brusnika-prod, yc-k8s-test.

Замечания и потенциальные проблемы

  • Нет глобального префикса. Имена переменных короткие (USERNAME, PASSWORD, AUTH_HOST) — легко пересечься с системными; следите за окружением процесса.
  • PUBLIC_KEY обязателен для http — при пустом/некорректном PEM сервис паникует на старте (server.go).
  • PDM_URL присутствует в secretEnvs Helm, но соответствующий клиент (internal/adapters/http/pdm) в текущей сборке нигде не инициализируется — переменная фактически не используется кодом.
  • S3_IS_CONTOUR задаётся в kustomize-манифестах, тогда как код читает IS_CONTOUR (без префикса S3_). Проверьте, что для влияния на поведение выставлен именно IS_CONTOUR.
  • FLOWS_INTERNAL_URL объявлен только в конфигах copy/copyv2; в остальных воркерах поля нет, хотя ключ есть в общем секрете.
  • Значения по умолчанию для секретов Camunda/Zeebe (identity-secret-for-components) подходят для локального стенда, но должны переопределяться в prod.
  • Приложение читает .env только если файл существует; иначе используются переменные окружения. make-целей для генерации .env в репозитории нет — используйте этот .env.example как шаблон.