iac/apps/documentations/cde-api.CONFIGURATION.md
diamondrigido d318ea3f16 feat: дополнительные поддержка
1. outbox-relay для кафка
2. маршрутизация
2026-10-30 16:46:21 +02:00

23 KiB
Raw Blame History

Конфигурация cde-api и его воркеров

Документ описывает переменные окружения cde-api и воркеров, развёрнутых в неймспейсе documentations. Манифесты — base/cde-api*.yaml (канонический вариант) и одноимённые файлы в оверлеях контуров. Источник значений — cde-api/.helm/values.yaml; значения в таблицах — из base (контуры переопределяют URL зависимостей, см. ниже).

Процессы

HelmRelease Deployment Образ Service Назначение
cde-api cde-api cde-api cde-api:8000 HTTP-API (CDE_API_HTTP_PORT=8000)
cde-api-worker-s32d-create-upload worker-s32d-create-upload cde-api-worker-s32d-create-upload — воркер S32D: создание и загрузка s3→disk
cde-api-worker-s32d-process-workflows worker-s32d-process-workflows cde-api-worker-s32d-process-workflows — воркер S32D: запуск workflow-обработки
cde-api-worker-s32d-publish-documents worker-s32d-publish-documents cde-api-worker-s32d-publish-documents — воркер S32D: публикация документов
cde-api-worker-s32d-handle-error worker-s32d-handle-error cde-api-worker-s32d-handle-error — воркер S32D: обработка ошибок
cde-api-worker-copy worker-copy cde-api-worker-copy — воркер копирования
cde-api-worker-move worker-move cde-api-worker-move — воркер перемещения

Не развёрнуты (в universal-chart нет поддержки cronjobs): workspace-recovery, resource-id-backfill, sizer — остаются в cde-api/.helm.

Назначение воркеров выведено из имён образов и переменных CDE_API_S32D_*; точное поведение — в коде cde-api/cmd.

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

  • Только переменные окружения с префиксом CDE_API_; вложенные секции задаются через __ (CDE_API_DATABASE__HOST).
  • Несекретные значения — envs в HelmRelease. Секреты: в vault-контурах (base, а значит sarex-contour, yc-k8s-test, d8-ugmk-prod, uralkal, vad) — Vault Agent Injector (файлы в /vault/secrets/, которые command: /bin/sh -ec загружает в окружение перед exec /opt/main / exec /opt/worker, как у documentations-api); в остальных (ugok, brusnika-*, wb) — k8s secretEnvs.
  • Образы cde-api содержат /bin/sh (статический busybox): он нужен для Vault-обёртки запуска (exec /opt/main / exec /opt/worker).
  • Postgres, Valkey и S3 — общие с documentations (отдельных ресурсов у cde-api нет): БД и креды те же, что у documentations-api; Valkey — внутрикластерный redis:6379 (ns documentations, без TLS и пароля, DB 5); S3 — доступ MinIO из secrets/data/minio/apps/documentations.
  • Файл /etc/app/tasks_execution_config.json (CDE_API_WORKFLOWS_CONFIG_FILEPATH) монтируется из ConfigMap tasks-execution-config-documentation-v2 (tasks-execution-config.yaml; содержимое — cde-api/.example.tasks_execution_config.json, в реальных контурах заменить боевыми ресурсами задач).
  • Значения по умолчанию в values.yaml источника — для stage; в iac всегда global.env=_default, поэтому здесь взяты prod-значения, а URL зависимостей — по конвенции соответствующего контура (из его api.yaml).

Секреты в Vault (vault-контуры)

Инжектируются Vault Agent (role documentations, SA documentations-vault); каждый путь — отдельный файл /vault/secrets/cde-api-<имя>.

Файл Путь Vault Переменные Процессы
postgres secrets/data/apps/documentations/postgres (общий с documentations) CDE_API_DATABASE__HOST/PORT/NAME/USER/PASSWORD все
s3 secrets/data/minio/apps/documentations (общий) CDE_API_S3_ENDPOINT/ACCESS_KEY/SECRET_KEY все
zeebe secrets/data/apps/cde-api/zeebe (нужно создать: gateway_address, client_id, client_secret, auth_server_url) CDE_API_ZEEBE_* все
rabbitmq secrets/data/rabbitmq/apps/cde CDE_API_RABBITMQ__USER/PASSWORD/VHOST (хост и порт — в envs) api, copy, move
django-auth secrets/data/vault/common/django_auth (ключ key) CDE_API_USERS_AUTH_TOKEN api
rsa-public secrets/data/vault/common/rsa_keys (ключ public_key) CDE_API_PUBLIC_KEY api

Точный состав файлов у каждого процесса — в podAnnotations его HelmRelease.

Секреты k8s-контуров (ugok, brusnika-*, wb; ns documentations)

Postgres — тот же хост/БД, что у documentations-api контура (литералы в envs), логин/пароль из его секрета (postgres-secret или documentations-postgresql-secret, ключи username/password); Valkey — redis. S3 и RabbitMQ — Secret'ы, которые в контуре уже используют hasher / pdf-markings / api; новый нужен только для Zeebe (cde-api-zeebe-secret).

Контур S3 (endpoint / access / secret) RabbitMQ
ugok documentations-s3-secret: endpoint / access_key / secret_key documentations-rabbitmq-secret: host, port, username, password, vhost
brusnika-prod hasher-s3-secret: endpoint / access_key / secret_key rabbitmq: host, port, username, password, vhost
brusnika-stage yc-s3: endpoint_url / key_id / access_key rabbitmq: как выше
wb yc-s3: endpoint_url / key_id / access_key как в wb/api.yaml: host/port/vhost (cde) — литералы в envs, user/password — hasher-rabbitmq-secret (user, password)

Таблица ниже — для справки по wb (остальные контуры отличаются именами Secret'ов и ключей, см. таблицу выше):

Secret Ключи Переменные
public-key key CDE_API_PUBLIC_KEY
postgres-secret username, password CDE_API_DATABASE__USER, CDE_API_DATABASE__PASSWORD
yc-s3 endpoint_url, key_id, access_key CDE_API_S3_ENDPOINT, CDE_API_S3_ACCESS_KEY, CDE_API_S3_SECRET_KEY
cde-api-zeebe-secret gateway_address, client_id, client_secret, auth_server_url CDE_API_ZEEBE_GATEWAY_ADDRESS, CDE_API_ZEEBE_CLIENT_ID, CDE_API_ZEEBE_CLIENT_SECRET, CDE_API_ZEEBE_AUTH_SERVER_URL
django-auth key CDE_API_USERS_AUTH_TOKEN
hasher-rabbitmq-secret user, password CDE_API_RABBITMQ__USER, CDE_API_RABBITMQ__PASSWORD

Переменные окружения

Колонка «Процессы»: api, create-upload, process-workflows, publish-documents, handle-error, copy, move. Если значение различается между процессами, показано значение первого процесса из списка.

Переменная Значение (base) Процессы
CDE_API_APP_NAME cde-api (различается) все
CDE_API_BIMAPI_RETRY_COUNT 3 api, process-workflows, copy, move
CDE_API_BIMAPI_RETRY_WAIT_MS 1000 api
CDE_API_BIMAPI_TIMEOUT_MS 30000 api, process-workflows, copy, move
CDE_API_BIMAPI_TIMEOUT_V2_MS 300000 api, process-workflows, copy, move
CDE_API_BIMAPI_URL http://backend-svc.bim.svc.cluster.local:80 api, process-workflows, copy, move
CDE_API_BIMAPI_V2_URL http://backend-svc.bim.svc.cluster.local:80 api, process-workflows, copy, move
CDE_API_CONTAINER_REGISTRY cr.yandex/crp3ccidau046kdj8g9q api, process-workflows, copy, move
CDE_API_CONVERTED_PDF_TO_S3 true api, process-workflows, copy, move
CDE_API_CONVERT_DWG_TO_GEOJSON true api, process-workflows, copy, move
CDE_API_CONVERT_DXF_TO_GEOJSON true api, process-workflows, copy, move
CDE_API_COPY_JOB_TIMEOUT_MINUTES 30 copy
CDE_API_COPY_MAX_SYNC_WAIT_MS 300000 api
CDE_API_COPY_S3_PARALLELISM 1 copy
CDE_API_COPY_STEP_PARALLELISM 1 copy
CDE_API_COPY_WORKER_JOBS "" copy
CDE_API_DATABASE_HEALTH_CHECK_PERIOD 30s все
CDE_API_DATABASE_MAX_CONN_IDLE_TIME 10m все
CDE_API_DATABASE_MAX_CONN_LIFETIME 30m все
CDE_API_DATABASE_OBSERVABILITY_ENABLE false api
CDE_API_DATABASE_POOL_SIZE 10 (различается) все
CDE_API_DATABASE__INSECURE_SKIP_TLS false все
CDE_API_DATABASE__SSLMODE disable все
CDE_API_DIAGNOSTICS_SLOW_OPERATION_THRESHOLD 30s api
CDE_API_DISK_BUCKET_NAMESPACE documentations api
CDE_API_DJANGO_HOST http://backend-svc.django.svc.cluster.local:80 api, process-workflows, copy, move
CDE_API_DOCUMENTATION_V2_URL http://backend-api-svc.documentations.svc.cluster.local:80 api, process-workflows, copy, move
CDE_API_EAV_HOST http://backend-svc.eav.svc.cluster.local:80 все
CDE_API_EAV_TIMEOUT_MS 10000 api
CDE_API_ENVIRONMENT production api, process-workflows, copy, move
CDE_API_FLOWS_URL http://backend-svc.flows.svc.cluster.local:80 все
CDE_API_HTTP_IDLE_TIMEOUT 120s api
CDE_API_HTTP_PORT 8000 api
CDE_API_HTTP_READ_BUFFER_SIZE 96 api
CDE_API_HTTP_READ_TIMEOUT 0s api
CDE_API_HTTP_WRITE_TIMEOUT 0s api
CDE_API_INTERNAL_URL http://cde-api.documentations:8000 api, process-workflows, copy, move
CDE_API_ISSUES_BASE_URL http://issues-service.platform:8000 copy
CDE_API_ISSUES_RETRY_COUNT 3 copy
CDE_API_ISSUES_SYNC_ENABLED false copy
CDE_API_ISSUES_TIMEOUT_MS 30000 copy
CDE_API_LAST_MASTER_BIM 36311 api, process-workflows, copy, move
CDE_API_LAST_SLAVE_1_BIM 94015 api, process-workflows, copy, move
CDE_API_LAST_SLAVE_2_BIM 135771 api, process-workflows, copy, move
CDE_API_LOG_LEVEL debug (различается) все
CDE_API_MAILER_BASE_URL http://mailer-service.mailer:8000 все
CDE_API_MAILER_FROM_EMAIL noreply@sarex.io все
CDE_API_MAILER_RETRY_COUNT 2 api
CDE_API_MAILER_TIMEOUT_MS 10000 api
CDE_API_MOVE_JOB_TIMEOUT_MINUTES 30 move
CDE_API_MOVE_WORKER_JOBS "" move
CDE_API_OBSERVABILITY_ENABLE false все
CDE_API_PUBLIC_LINK_HOST https://document-link-srx.wb.ru api
CDE_API_RABBITMQ__HASHER_EXCHANGE hash.compute api, copy, move
CDE_API_RABBITMQ__HASHER_ROUTING_KEY hash.compute.normal api, copy, move
CDE_API_RABBITMQ__HOST rabbitmq.rabbitmq.svc.cluster.local api, copy, move
CDE_API_RABBITMQ__MARKS_ROUTING_KEY pdf_markings_input api, copy, move
CDE_API_RABBITMQ__PORT 5672 api, copy, move
CDE_API_REDIS__DB 5 api
CDE_API_REDIS__DEFAULT_TTL_MINUTES 10 все
CDE_API_REDIS__DIAL_TIMEOUT_MS 5000 все
CDE_API_REDIS__HOST redis все
CDE_API_REDIS__MIN_IDLE_CONNS 2 (различается) все
CDE_API_REDIS__PERMISSION_CACHE_ENABLED false все
CDE_API_REDIS__POOL_SIZE 10 (различается) все
CDE_API_REDIS__PORT 6379 все
CDE_API_REDIS__READ_TIMEOUT_MS 3000 все
CDE_API_REDIS__SSL false все
CDE_API_REDIS__WRITE_TIMEOUT_MS 3000 все
CDE_API_RESOURCES_BASE_URL http://iams.iam.svc.cluster.local:8080 api
CDE_API_RESOURCES_TIMEOUT 10s api
CDE_API_S32D_MAX_ARCHIVE_SIZE_BYTES 1099511627776 api
CDE_API_S32D_MAX_FILES_COUNT 500 api
CDE_API_S32D_READERAT_BLOCK_SIZE_MB 8 create-upload
CDE_API_S32D_READERAT_CACHE_BLOCKS 8 create-upload
CDE_API_S32D_WORKER_CREATE_UPLOAD_MAX_JOBS 2 create-upload
CDE_API_S32D_WORKER_CREATE_UPLOAD_TIMEOUT_MIN 240 create-upload
CDE_API_S32D_WORKER_HANDLE_ERROR_MAX_JOBS 4 handle-error
CDE_API_S32D_WORKER_HANDLE_ERROR_TIMEOUT_MIN 10 handle-error
CDE_API_S32D_WORKER_PROCESS_WORKFLOWS_MAX_JOBS 2 process-workflows
CDE_API_S32D_WORKER_PROCESS_WORKFLOWS_TIMEOUT_MIN 480 process-workflows
CDE_API_S32D_WORKER_PUBLISH_DOCUMENTS_MAX_JOBS 2 publish-documents
CDE_API_S32D_WORKER_PUBLISH_DOCUMENTS_TIMEOUT_MIN 10 publish-documents
CDE_API_S3_BUCKET_LOOKUP auto все
CDE_API_S3_BUCKET_NAME documentations все
CDE_API_S3_CHECK_BUCKET false все
CDE_API_S3_CONNECT_TIMEOUT 10s api
CDE_API_S3_INSECURE_SKIP_TLS false все
CDE_API_S3_MAX_PART_SIZE 524288000 все
CDE_API_S3_MAX_SINGLE_UPLOAD_SIZE 5368709120 все
CDE_API_S3_TLS_HANDSHAKE_TIMEOUT 10s api
CDE_API_S3_UPLOAD_STALL_TIMEOUT 10m все
CDE_API_S3_USE_SSL true все
CDE_API_SYSTEMLOG_BASE_URL http://backend-svc.system-log.svc.cluster.local:80 api, publish-documents, copy, move
CDE_API_SYSTEMLOG_TIMEOUT_MS 10000 api, publish-documents, copy, move
CDE_API_TRANSMITTALS_URL http://transmittal-service.transmittal.svc.cluster.local:80 все
CDE_API_USERS_BASE_URL http://backend-svc.django.svc.cluster.local:80 api
CDE_API_USERS_ORIGINATOR docs_prod api
CDE_API_USERS_TIMEOUT_MS 10000 api
CDE_API_USE_BIMV1_FOR_BIMV2 true api, process-workflows, copy, move
CDE_API_USE_BIM_INSERTER true api, process-workflows, copy, move
CDE_API_USE_LEGACY_BIM_FLOW 0 api, process-workflows, copy, move
CDE_API_WORKFLOWS_CONFIG_FILEPATH /etc/app/tasks_execution_config.json все
CDE_API_WORKFLOWS_IMAGES_VERSION master api, process-workflows, copy, move
CDE_API_WORKFLOW_BASE_URL http://backend-svc.processing.svc.cluster.local:80 api, process-workflows, copy, move
CDE_API_WORKFLOW_RETRY_COUNT 3 api, process-workflows, copy, move
CDE_API_WORKFLOW_RETRY_WAIT_MS 500 api
CDE_API_WORKFLOW_TIMEOUT_MS 30000 api, process-workflows, copy, move
CDE_API_WORKSPACE_BASE_URL http://backend-svc.workspaces.svc.cluster.local:80 api, publish-documents, copy, move
CDE_API_WORKSPACE_RETRY_COUNT 3 api, publish-documents, copy, move
CDE_API_WORKSPACE_TIMEOUT_MS 10000 api, publish-documents, copy, move
CDE_API_ZEEBE_USE_PLAINTEXT true все

Переменные из k8s-секретов (ugok, brusnika-*, wb)

Переменная Secret / ключ Процессы
CDE_API_DATABASE__PASSWORD postgres-secret / password все
CDE_API_DATABASE__USER postgres-secret / username все
CDE_API_PUBLIC_KEY public-key / key api
CDE_API_RABBITMQ__PASSWORD hasher-rabbitmq-secret / password api, copy, move
CDE_API_RABBITMQ__USER hasher-rabbitmq-secret / user api, copy, move
CDE_API_S3_ACCESS_KEY yc-s3 / key_id все
CDE_API_S3_ENDPOINT yc-s3 / endpoint_url все
CDE_API_S3_SECRET_KEY yc-s3 / access_key все
CDE_API_USERS_AUTH_TOKEN django-auth / key api
CDE_API_ZEEBE_AUTH_SERVER_URL cde-api-zeebe-secret / auth_server_url все
CDE_API_ZEEBE_CLIENT_ID cde-api-zeebe-secret / client_id все
CDE_API_ZEEBE_CLIENT_SECRET cde-api-zeebe-secret / client_secret все
CDE_API_ZEEBE_GATEWAY_ADDRESS cde-api-zeebe-secret / gateway_address все

Различия по контурам

От контура к контуру меняются URL зависимостей, внешний хост публичных ссылок и источник образов:

Контур Тип оверлея Что отличается
sarex-contour, yc-k8s-test наследуют base ничего (значения base)
d8-ugmk-prod, uralkal, vad патчи на все 7 HelmRelease (cde-api*.yaml, список envs заменяется целиком) поверх base CDE_API_PUBLIC_LINK_HOST (только api), TLS к S3 (см. ниже)
ugok полная копия HelmRelease, chart 0.1.9 URL зависимостей (порты 8000/8080), образы из 10.4.10.187:80/library, pull-secret dockerhub
brusnika-prod, brusnika-stage полная копия, chart 0.1.7 URL зависимостей; stage — профиль stage (CDE_API_ENVIRONMENT=stage, bucket documentations-stage)
wb полная копия, chart 0.1.7 URL зависимостей, CDE_API_PUBLIC_LINK_HOST=https://document-link-srx.wb.ru

Правка base на полные копии (ugok, brusnika-*, wb) не влияет.

SSL / TLS по контурам

В исходном values.yaml cde-api все соединения с TLS (Postgres verify-full, Valkey SSL, S3 SSL с пропуском проверки). В iac соседние сервисы работают иначе, поэтому значения выставлены по контуру:

Соединение Переменные Значение в iac Почему
Postgres CDE_API_DATABASE__SSLMODE disable везде у documentations-api/pdf-markings во всех контурах sslmode=disable; CA-сертификат (CERT_BASE64) не передаётся
Valkey CDE_API_REDIS__SSL false везде внутрикластерный redis:6379 без TLS
RabbitMQ CDE_API_RABBITMQ__SSL не задана (по умолчанию false) порт 5672, как у marks/hasher
S3 CDE_API_S3_USE_SSL / CDE_API_S3_INSECURE_SKIP_TLS см. таблицу ниже повторяют флаги pdf-markings / hasher, которые ходят в тот же S3-секрет
Kafka (outbox-relay) KAFKA__SECURITY_PROTOCOL, KAFKA__INSECURE_SKIP_VERIFY SASL_SSL (base) / SSL (Strimzi-контуры), INSECURE_SKIP_VERIFY=true, CA не нужен как у pm; см. outbox-relay.CONFIGURATION.md

S3 по контурам (USE_SSL / INSECURE_SKIP_TLS):

Контур USE_SSL INSECURE_SKIP_TLS Источник значения
base (sarex-contour, yc-k8s-test) true false MARKS_S3__USE_SSL=true, SSL_VERIFY=true в base
d8-ugmk-prod true true pdf-markings: USE_SSL=true, SSL_VERIFY=false
uralkal, vad false false pdf-markings: USE_SSL=false
ugok false false YANDEX_S3_USE_SSL=0
brusnika-prod true false hasher: USE_SSL=true, VERIFY=true (тот же hasher-s3-secret)
brusnika-stage false false pdf-markings (тот же yc-s3): USE_SSL=false; hasher там true — проверить
wb false false pdf-markings: USE_SSL=false

Эндпоинт S3 приходит из секрета (endpoint); если он содержит схему https:///http://, она должна совпадать с USE_SSL.

Допущения и что нужно проверить

  • CDE_API_DJANGO_HOST и CDE_API_USERS_BASE_URL повторяют DJANGO_HOST из api.yaml контура (внутренний адрес Django, не внешний хост из исходного values.yaml); documentations использует один и тот же адрес и для получения пользователей.
  • CDE_API_DISK_BUCKET_NAMESPACE=documentations — как NAMESPACE у documentations-api во всех контурах (в коде cde-api это префикс бакетов компаний <namespace>-<companyID>-<slug>, совместимый с legacy doc-api). CDE_API_S3_BUCKET_NAME=documentations — только запасной бакет клиента S3 (CHECK_BUCKET=false), у documentations-api такой настройки нет.
  • CDE_API_EAV_HOST, CDE_API_TRANSMITTALS_URL выбраны по конвенции остальных приложений контура (backend-svc.eav, eav-service.eav, transmittal-service.transmittal); сверить с inventory.yaml.
  • Sentry и SigNoz отключены: переменные CDE_API_SENTRY_* и CDE_API_OBSERVABILITY_{HOST,PORT,SERVICE_NAME,INSECURE} удалены, CDE_API_OBSERVABILITY_ENABLE=false, CDE_API_DATABASE_OBSERVABILITY_ENABLE=false.
  • Реплики всех процессов (api и воркеры) — 1 (в исходном prod-конфиге cde-api у create-upload и process-workflows было 0).
  • Порт: в источнике deployment.port=8080 при CDE_API_HTTP_PORT=8000 и service.targetPort=8000; здесь везде 8000.
  • Общая с documentations БД: cde-api применяет свои миграции в той же базе — проверить отсутствие конфликтов имён таблиц/схемы и версий миграций (отдельная схема или префикс при необходимости).
  • Общий Valkey без пароля и TLS (в источнике cde-api — управляемый Valkey с TLS и логином): подтвердить, что cde-api работает без CDE_API_REDIS__USERNAME/PASSWORD. DB 5 совпадает с VALKEY_DB=5 у documentations-api (в stage так же).
  • secrets/data/apps/cde-api/zeebe в Vault нужно создать; в k8s-контурах нужен только Secret cde-api-zeebe-secret; S3 и RabbitMQ используют существующие Secret'ы hasher / pdf-markings / api (таблица выше). Если в Secret'ах S3 другие права или бакет, чем нужны cde-api, заменить на отдельный.
  • Значения секретов из Vault подставляются в окружение через . file без кавычек — как у documentations-api; пароли со спецсимволами shell ломают этот способ.