Конфигурация проекта workflows-engine
workflows-engine (внутреннее имя образа — kubernetes-engine) — это фоновый сервис-оркестратор (демон без REST API), который вычитывает workflow/задачи из PostgreSQL и запускает их либо как Job'ы в Kubernetes, либо публикует в RabbitMQ (AMQP-исполнитель). Конфигурируется исключительно через переменные окружения.
Способы конфигурирования
- Библиотека парсинга:
github.com/ilyakaznacheev/cleanenv.
- Точка входа конфигурации:
config/config.go, функция config.New() вызывает cleanenv.ReadEnv(cfg) и заполняет структуру Config из переменных окружения процесса.
- Формат тегов: каждое поле помечено тегом
env:"ИМЯ"; значение по умолчанию задаётся тегом env-default:"...". Префикса имён переменных нет.
- Составная структура
Config собирается из встроенных (embedded) структур:
App, Log, Executor, Kubernetes, Resources, Storages, Pooling, Workflows, Security — объявлены в config/config.go;
pgxconnection.Postgres — объявлена в pkg/pgxconnection/postgres.go (переменные POSTGRES_*);
rabbitmq.RabbitMQ — объявлена в pkg/rabbitmq/config.go (переменные RABBITMQ_*).
- Кастомный парсинг: поле
WORKFLOW_PRIORITY имеет тип entity.WorkflowPriority с методом SetValue (internal/entity/workflow.go); допустимые значения: default, high, low (регистр не важен).
- Важно: часть переменных из
config.env и Helm-чарта не читается структурой конфигурации. Они либо читаются напрямую через os.Getenv(...) в pkg/kube_services/services.go и пробрасываются в env запускаемых Job-подов (а не потребляются самим engine), либо не используются кодом вовсе (см. раздел «Замечания и потенциальные проблемы»).
Режимы запуска / исполнители
Бинарь один (cmd/engine), «режим» определяется набором включённых исполнителей и приоритетом.
| Режим |
Как включается |
Назначение |
| Kubernetes-исполнитель |
ENABLE_KUBERNETES_EXECUTOR=1 (по умолчанию true) |
Запуск задач как batchv1.Job в кластере Kubernetes |
| AMQP-исполнитель |
ENABLE_AMQP_EXECUTOR=1 (по умолчанию false) |
Публикация задач в RabbitMQ и приём результатов |
| backend (обычный приоритет) |
Helm-деплой backend, WORKFLOW_PRIORITY=low |
Обработка обычных workflow |
| backend-high-priority |
Helm-деплой backend-high-priority, WORKFLOW_PRIORITY=high |
Обработка высокоприоритетных workflow |
Оба Helm-деплоя разворачивают один и тот же образ; отличаются только значением WORKFLOW_PRIORITY (и MAX_WORKFLOWS_LIMIT).
Точки входа (entrypoints)
| Путь |
Тип |
Описание |
cmd/engine/main.go |
main-пакет |
Единственная точка входа. Поднимает pprof-сервер на :8081, читает конфиг, создаёт engine.New(cfg, logger) и вызывает Run() |
internal/apps/engine/engine.go |
приложение |
Основная логика: подключение к Postgres, инициализация исполнителей (K8s/AMQP), pooling-контроллер и оркестратор, graceful shutdown по SIGINT |
Запуск контейнера
- Dockerfile: multi-stage сборка на
golang:1.20-buster, финальный образ FROM scratch.
- CMD/ENTRYPOINT:
ENTRYPOINT ["/engine"] — запускается собранный бинарь напрямую, без shell-скрипта/entrypoint-обёртки.
- Внутри процесса дополнительно поднимается HTTP-сервер
net/http/pprof на порту :8081 (профилирование). Полноценного REST API нет (см. раздел про API_ADDRESS).
Переменные приложения
Приложение и логирование (App, Log)
| Переменная |
Тип |
Значение по умолчанию |
Назначение |
APP_NAME |
string |
kubernetes-engine |
Имя приложения (в Helm переопределяется на kubernetes-engine/kubernetes-engine-high-priority) |
APP_VERSION |
string |
v1 |
Версия приложения |
LOG_LEVEL |
string |
info |
Уровень логирования |
PostgreSQL (pkg/pgxconnection)
| Переменная |
Тип |
Значение по умолчанию |
Назначение |
POSTGRES_ADDRESS |
string |
localhost |
Хост БД |
POSTGRES_DB |
string |
processing_db |
Имя базы данных |
POSTGRES_USER |
string |
user |
Пользователь БД |
POSTGRES_PASSWORD |
string |
password |
Пароль БД |
POSTGRES_PORT |
string |
5432 |
Порт БД |
POSTGRES_POOL_SIZE |
int |
20 |
Размер пула соединений |
ENABLE_SQL_QUERY |
bool |
true |
Логирование SQL-запросов |
YC-PG-CERTIFICATE |
string |
"" |
TLS-сертификат CA для подключения к БД (значение сертификата) |
POSTGRES_SSL_USE |
bool |
false |
Использовать SSL при подключении к БД |
RabbitMQ (pkg/rabbitmq) — используется только при ENABLE_AMQP_EXECUTOR=1
| Переменная |
Тип |
Значение по умолчанию |
Назначение |
RABBITMQ_HOST |
string |
— |
Хост брокера |
RABBITMQ_PORT |
string |
— |
Порт брокера |
RABBITMQ_USER |
string |
— |
Пользователь |
RABBITMQ_PASS |
string |
— |
Пароль |
RABBITMQ_VHOST |
string |
— |
Виртуальный хост |
RABBITMQ_USE_SSL |
bool |
— |
Использовать TLS |
RABBITMQ_CERTIFICATE |
string |
— |
TLS-сертификат |
RABBITMQ_CREATE_EXCHANGE |
string |
— |
Exchange для отправки задач на запуск |
RABBITMQ_CANCEL_EXCHANGE |
string |
— |
Exchange для отмены задач |
RABBITMQ_CREATE_ROUTING_KEY |
string |
— |
Routing key для запуска |
RABBITMQ_CANCEL_TOPIC |
string |
— |
Topic/ключ отмены |
RABBITMQ_COMPLETENESS_EXCHANGE |
string |
— |
Exchange для получения результатов выполнения |
RABBITMQ_COMPLETENESS_TOPIC |
string |
— |
Topic результатов выполнения |
Примечание: в config.env присутствуют также RABBITMQ_CREATE_TOPIC — переменной RABBITMQ_CREATE_TOPIC в коде нет (в структуре есть только CreateRoutingKey).
Исполнители и воркеры (Executor)
| Переменная |
Тип |
Значение по умолчанию |
Назначение |
COUNT_RUNNING_WORKERS |
int |
— (0) |
Кол-во воркеров запуска задач |
COUNT_CANCELING_WORKERS |
int |
— (0) |
Кол-во воркеров отмены задач |
COUNT_HANDLE_JOB_WORKERS |
int |
— (0) |
Кол-во воркеров обработки Job'ов |
ENABLE_AMQP_EXECUTOR |
bool |
false |
Включить AMQP-исполнитель (RabbitMQ) |
ENABLE_KUBERNETES_EXECUTOR |
bool |
true |
Включить Kubernetes-исполнитель |
Kubernetes (Kubernetes)
| Переменная |
Тип |
Значение по умолчанию |
Назначение |
JOBS_NAMESPACE |
string |
— |
Namespace, в котором создаются Job'ы задач |
KUBE_CONFIG |
string |
— |
Путь к kubeconfig. Если пусто — используется in-cluster конфигурация; если задан — out-of-cluster |
KUBE_CONTEXT |
string |
— |
Контекст kubeconfig (для out-of-cluster) |
KUBE_ADDR |
string |
— |
Адрес API-сервера кластера (для out-of-cluster; используется с InsecureSkipTLSVerify) |
Ресурсы и планирование подов (Resources)
Управляют NodeSelector/Tolerations/requests для запускаемых Job'ов в зависимости от service_requests задачи (см. README.md).
| Переменная |
Тип |
Значение по умолчанию |
Назначение |
CPU_COUNT |
int |
— |
CPU requests для high-resources/persistent |
MEMORY_GI |
int |
— |
Memory (Gi) requests для high-resources/persistent |
CPU_COUNT_LOW_RESOURCES |
int |
— |
CPU для low-resources |
MEMORY_GI_LOW_RESOURCES |
int |
— |
Memory (Gi) для low-resources |
CPU_COUNT_HIGH_MEM |
int |
— |
CPU для super-high-resources |
MEMORY_GI_HIGH_MEM |
int |
— |
Memory (Gi) для super-high-resources |
ENABLE_TOLERATION |
bool |
— |
Включить набор сервисов ресурсов (toleration/nodeselector) |
TOLERATION_KEY |
string |
— |
Ключ toleration/nodeselector для high/low ресурсов |
TOLERATION_VALUE |
string |
— |
Значение toleration/nodeselector для high/low ресурсов |
TOLERATION_KEY_HIGH_MEM |
string |
— |
Ключ toleration для super-high-resources |
TOLERATION_VALUE_HIGH_MEM |
string |
— |
Значение toleration для super-high-resources |
TOLERATION_KEY_PERSISTENT |
string |
— |
Ключ toleration для persistent |
TOLERATION_VALUE_PERSISTENT |
string |
— |
Значение toleration для persistent |
DJANGO_BASIC_AUTH |
string |
— |
Базовая авторизация Django (поле присутствует в конфиге, но не используется в бизнес-логике; в под задачи прокидывается хардкод-путь DJANGO_BASIC_AUTH_PATH) |
DEFAULT_TOLERATION_KEY |
string |
— |
Ключ toleration по умолчанию для всех подов |
DEFAULT_TOLERATION_VALUE |
string |
— |
Значение toleration по умолчанию |
DEFAULT_NODE_SELECTOR_KEY |
string |
— |
Ключ NodeSelector по умолчанию |
DEFAULT_NODE_SELECTOR_VALUE |
string |
— |
Значение NodeSelector по умолчанию |
DEFAULT_IMAGE_PULL_POLICY |
string |
always |
ImagePullPolicy для подов задач |
DEFAULT_CPU_REQUESTS |
string |
100m |
CPU requests по умолчанию |
DEFAULT_MEMORY_REQUESTS |
string |
64Mi |
Memory requests по умолчанию |
Хранилища и внешние сервисы (Storages)
Флаги ENABLE_* включают соответствующий «сервис» (набор env/секретов/volume), который добавляется в под задачи в зависимости от service_requests. URL'ы прокидываются в поды mesh/pdm-сервисов.
| Переменная |
Тип |
Значение по умолчанию |
Назначение |
S3_SERVICE_ACCOUNT |
string |
— |
Путь к service account JSON для S3 (в коде для подов путь по факту хардкодится) |
ENABLE_S3_STORAGE |
bool |
— |
Включить сервис s3 |
ENABLE_S3V2_STORAGE |
bool |
— |
Включить сервис s3v2 |
ENABLE_PDM_STORAGE |
bool |
— |
Включить сервис pdm |
ENABLE_URL_STORAGE |
bool |
— |
Включить сервис url |
ENABLE_LOCAL |
bool |
— |
Включить локальное хранилище |
ENABLE_BIM_API_DB |
bool |
— |
Включить сервис bim_api_db |
ENABLE_BIM_API_CH |
bool |
— |
Включить сервис bim_api_ch (ClickHouse) |
ENABLE_BIM_API_V2_DB |
bool |
— |
Включить сервисы bim_api_v2_db (+ db_2/3/4) |
ENABLE_PDM_API_DB |
bool |
— |
Включить сервис pdm_api_db |
ENABLE_COMPARISONS_API_DB |
bool |
— |
Включить сервис comparison-api-db |
ENABLE_ISSUE_API_DB |
bool |
— |
Включить сервис issues-api-db |
ENABLE_RESOURCES_API |
bool |
— |
Включить сервис resources-api |
ENABLE_MAIL_GUN |
bool |
— |
Включить сервис mailgun |
ENABLE_SMTP |
bool |
— |
Включить сервис smtp |
ENABLE_WORKSPACE_API_DB |
bool |
— |
Включить сервис workspace_api_db |
ENABLE_CROSS_SECTION_API_DB |
bool |
— |
Включить сервис cross-section-api-db |
BIM_API_DEBUG |
bool |
— |
Флаг debug для BIM API (также пробрасывается в под, см. ниже) |
COMPARISONS_API_DEBUG |
string |
— |
Флаг debug для Comparisons API (также пробрасывается в под) |
INTERNAL_PDM_URL |
string |
— |
Внутренний URL PDM |
EXTERNAL_PDM_URL |
string |
— |
Внешний URL PDM |
INTERNAL_FILESTREAM_URL |
string |
— |
Внутренний URL filestream |
EXTERNAL_FILESTREAM_URL |
string |
— |
Внешний URL filestream |
INTERNAL_REMARK_URL |
string |
— |
Внутренний URL remarks |
EXTERNAL_REMARK_URL |
string |
— |
Внешний URL remarks |
DJANGO_HOST |
string |
— |
URL Django-хоста (ЛК) |
INTERNAL_WORKSPACE_URL |
string |
— |
Внутренний URL workspaces |
EXTERNAL_WORKSPACE_URL |
string |
— |
Внешний URL workspaces |
Пулинг (Pooling)
| Переменная |
Тип |
Значение по умолчанию |
Назначение |
MAX_WORKFLOWS_LIMIT |
uint64 |
— (0) |
Лимит одновременно обрабатываемых workflow при выборке |
MAX_RUNNING_JOBS |
int64 |
200 |
Максимум одновременно выполняющихся Job'ов |
Workflow (Workflows)
| Переменная |
Тип |
Значение по умолчанию |
Назначение |
DEFAULT_GET_SINCE_LAST_HOURS |
uint64 |
168 |
Глубина выборки задач в часах (нужно для FIFO; 168 ч = 7 дней) |
WORKFLOW_PRIORITY |
enum (default/high/low) |
default |
Приоритет обрабатываемых workflow (задаёт «роль» инстанса) |
Безопасность (Security)
| Переменная |
Тип |
Значение по умолчанию |
Назначение |
ENABLE_RUNASUSER |
bool |
false |
Запускать контейнеры задач под фиксированным UID |
USER_RUNASUSER |
int64 |
1000 |
UID для runAsUser |
Переменные, читаемые через os.Getenv и пробрасываемые в под'ы задач
Эти переменные не входят в структуру Config и не потребляются самим engine. Они читаются напрямую в pkg/kube_services/services.go и добавляются как env в контейнер запускаемой задачи (Job), когда включён соответствующий ENABLE_*-флаг. Тип — всегда строка (передаётся «как есть»).
| Переменная |
Куда прокидывается (условие) |
Назначение |
BIM_API_DB |
сервис bim_api_db (при ENABLE_BIM_API_DB) |
Путь к JSON-конфигу БД BIM API |
BIM_API_DEBUG |
сервис bim_api_db |
Флаг debug |
BIM_API_CH |
сервис bim_api_ch (при ENABLE_BIM_API_CH) |
Путь к JSON-конфигу ClickHouse |
BIM_API_CH_DEBUG |
сервис bim_api_ch |
Флаг debug |
BIM_API_V2_DB |
сервис bim_api_v2_db (при ENABLE_BIM_API_V2_DB) — в под прокидывается под именем BIM_API_DB |
Путь к JSON-конфигу БД BIM API v2 |
BIM_API_V2_DEBUG |
сервис bim_api_v2_db |
Флаг debug |
BIM_API_V2_DB_2 |
сервис bim_api_v2_db_2 — в под как BIM_API_DB_2 |
Путь к JSON-конфигу 2-й БД BIM v2 |
BIM_API_V2_DB_3 |
сервис bim_api_v2_db_3 — в под как BIM_API_DB_3 |
Путь к JSON-конфигу 3-й БД BIM v2 |
BIM_API_V2_DB_4 |
сервис bim_api_v2_db_4 — в под как BIM_API_DB_4 |
Путь к JSON-конфигу 4-й БД BIM v2 |
COMPARISONS_API_DB |
сервис comparison-api-db (при ENABLE_COMPARISONS_API_DB) |
Путь к JSON-конфигу БД Comparisons |
COMPARISONS_API_DEBUG |
сервис comparison-api-db |
Флаг debug |
ISSUE_API_DB |
сервис issues-api-db (при ENABLE_ISSUE_API_DB) |
Путь к JSON-конфигу БД Issues |
ISSUE_API_DEBUG |
сервис issues-api-db |
Флаг debug |
RESOURCES_API_INTERNAL_HOST |
сервис resources-api (при ENABLE_RESOURCES_API) |
Внутренний хост Resources API |
SMTP |
сервис smtp (при ENABLE_SMTP) — в под как SMTP_CONFIG_PATH |
Путь к JSON-конфигу SMTP |
PDM_API_DB |
сервис pdm_api_db (при ENABLE_PDM_API_DB) |
Путь к JSON-конфигу БД PDM |
PDM_API_DEBUG |
сервис pdm_api_db |
Флаг debug |
WORKSPACE_API_DB |
сервис workspace_api_db (при ENABLE_WORKSPACE_API_DB) |
Путь к JSON-конфигу БД Workspace |
WORKSPACE_API_DEBUG |
сервис workspace_api_db |
Флаг debug |
CROSS_SECTION_API_DB |
сервис cross-section-api-db (при ENABLE_CROSS_SECTION_API_DB) |
Путь к JSON-конфигу БД Cross-section |
CROSS_SECTION_API_DEBUG |
сервис cross-section-api-db |
Флаг debug |
WORKFLOWS_SENTRY_DSN |
сервис Default (всегда) |
Sentry DSN для подов задач |
WORKFLOWS_SENTRY_DEBUG |
сервис Default (всегда) |
Флаг debug Sentry |
ENVIRONMENT |
сервис Default (всегда) |
Имя окружения для подов задач |
Пути BIM_API_V2_DB_2/3/4, MAILGUN, SMTP и т.п. задаются в Helm-чарте (.helm/values.yaml) — в config.env присутствуют не все из них.
Переменные инфраструктуры/сборки
| Переменная |
Где |
Назначение |
CGO_ENABLED=0, GOOS=linux, GOARCH=amd64 |
Dockerfile (build stage) |
Статическая сборка бинаря под Linux/amd64 |
CI_COMMIT_SHORT_SHA |
.gitlab-ci.yml → build-arg |
Прокидывается в сборку образа |
SERVICE_NAME=workflows-engine |
.gitlab-ci.yml |
Имя сервиса/чарта в CI |
DOCKERFILE_PATH=Dockerfile |
.gitlab-ci.yml |
Путь к Dockerfile |
BUILD_ARGS |
.gitlab-ci.yml |
Аргументы сборки образа |
CI_TRIGGER_SOURCE=app |
.gitlab-ci.yml |
Источник триггера пайплайна |
IMAGE_NAME, CI_COMMIT_SHA, CI_PROJECT_URL, CI_JOB_URL, CI_PROJECT_NAMESPACE |
.gitlab-ci.yml → HELM_SET_ARGS |
Метаданные деплоя, пробрасываются в universal-chart |
Сборка/деплой наследуются из внешних CI-шаблонов проекта generic/common-ci (universal-pipeline.yaml, common-security-scan.yaml). Юнит-тесты: стадия test, образ golang:1.20, команда make unit-tests.
Переменные из Helm-чарта
Чарт (.helm/values.yaml) построен на universal-chart; секреты монтируются как env (secretEnvs) и как volume'ы. Ниже — маппинг секретных env (общий для backend и backend-high-priority). Имя секрета зависит от окружения (_default / stage / preprod / production).
| Переменная |
Секрет (secret_name) |
Ключ (secret_key) |
POSTGRES_ADDRESS |
ya-pg-secret (stage: processing-postgresql-secret) |
host |
POSTGRES_PORT |
ya-pg-secret (stage: processing-postgresql-secret) |
port |
POSTGRES_DB |
ya-pg-secret (stage: processing-postgresql-secret) |
database |
POSTGRES_USER |
ya-pg-secret (stage: processing-postgresql-secret) |
username |
POSTGRES_PASSWORD |
ya-pg-secret (stage: processing-postgresql-secret) |
password |
RABBITMQ_USER |
rabbitmq-secret |
username |
RABBITMQ_PASS |
rabbitmq-secret |
password |
YC-PG-CERTIFICATE |
yc-pg-certificate (stage: processing-postgresql-secret) |
certificate (stage: ca.crt, preprod/prod: certificate) |
Секреты, монтируемые как volume'ы (файлы JSON-конфигов внешних БД и т.п.):
| Volume / секрет |
mountPath |
yc-s3 |
/etc/sarex/yc-s3 |
bim-api-db |
/etc/sarex |
bim-api-v2-db-2 |
/etc/sarex/second-bim-bd |
bim-api-v2-db-3 |
/etc/sarex/third-bim-bd |
bim-api-v2-db-4 |
/etc/sarex/fourth-bim-bd |
comparison-api-db |
/etc/comparisons |
pdm-api-db |
/etc/pdm |
ws-api-db |
/etc/ws |
mailgun-secret |
/etc/mailgun-secret |
smtp-secret |
/etc/smtp-secret |
issues-api-db |
/etc/issues |
cross-section-api-db |
/etc/cross_section |
tmp-volume (emptyDir) |
/tmp |
Прочие значимые переменные окружения задаются в .helm/values.yaml секцией envs для каждого сервиса (значения зависят от окружения _default/stage/preprod/production) — в т.ч. пути к JSON-конфигам (BIM_API_DB, PDM_API_DB, …), URL'ы сервисов, POD_NAME=$(K8S_POD_NAME), WORKFLOW_PRIORITY (low для backend, high для backend-high-priority). Также в чарте описан meshConfig (Istio) — включён только для production.
Переменные в CI
Определяются в workflow.rules файла .gitlab-ci.yml по ветке/тегу:
| Триггер |
STAND |
NAMESPACE |
universal-chart env |
CHART_VERSION |
K8S_HUSTLER_BRANCH |
ветка stage |
stage |
platform |
stage |
0.0.1-stage |
universal-chart-stage |
ветка master |
preprod |
processing-preprod |
preprod |
0.0.1-preprod |
universal-chart-preprod |
тег (CI_COMMIT_TAG) |
production |
processing-prod |
production |
0.0.1-prod |
universal-chart-production |
| Merge Request |
— (сборка образа выключена: ENABLE_BUILD_IMAGE=false) |
— |
— |
— |
— |
RELEASE_NAME во всех случаях — workflows-engine. Для каждого стенда деплоятся оба сервиса: backend и backend-high-priority.
Замечания и потенциальные проблемы
- Нет HTTP REST API, но
API_ADDRESS присутствует. Переменная API_ADDRESS=0.0.0.0:8080 есть в config.env и в Helm (envs), но не читается ни одной строкой Go-кода. Реальный HTTP-сервер — только net/http/pprof на :8081 (cmd/engine/main.go). В Helm у сервисов service.enabled: false, liveness/readiness-пробы выключены. Переменную стоит либо удалить, либо реализовать сервер. По этой причине openapi.yaml для сервиса не создаётся.
- Дубликаты в
config.env:
ENABLE_BIM_API_V2_DB=1 указана дважды (строки 18 и 19);
JOBS_NAMESPACE задаётся дважды с разными значениями: processing-stage и processing-testing — побеждает последнее;
POD_NAME задаётся дважды: fieldRef(v1:metadata.name) и workflows-backend-869584d795-b7p2b — второе значение это «замороженное» имя конкретного пода, что явно ошибочно для шаблона.
- Хардкод локальных путей разработчика в
config.env:
S3_SERVICE_ACCOUNT=/Users/khannanov/sarex/yc-s3-service-account.json;
KUBE_CONFIG=/Users/khannanov/.kube/config.
Эти пути специфичны для машины конкретного разработчика и не должны попадать в общий конфиг (в Helm S3_SERVICE_ACCOUNT корректно указывает на /etc/sarex/yc-s3/...).
- Переменные из
config.env/Helm, которые не читаются кодом engine вообще (кандидаты на удаление либо потребляются исключительно другими компонентами): API_ADDRESS, CONTROL_PLANE_PERIOD, ENABLE_GOOGLE_STORAGE, GOOGLE_STORAGE_BUCKET, GOOGLE_STORAGE_PROJECT, ENABLE_SRX_TMP, MAX_TASKS_IN_PERIOD, ENABLE_PDM_DB, POD_NAME. Ни Getenv, ни struct-тега для них нет.
config.env частично устарел относительно config/config.go и Helm. Ряд переменных, реально используемых кодом/чартом, в config.env отсутствует (WORKFLOW_PRIORITY, DEFAULT_TOLERATION_*, DEFAULT_NODE_SELECTOR_*, ENABLE_ISSUE_API_DB, ENABLE_RESOURCES_API, ENABLE_WORKSPACE_API_DB, ENABLE_CROSS_SECTION_API_DB, RESOURCES_API_INTERNAL_HOST, WORKFLOWS_SENTRY_DSN, пути *_API_DB для issues/ws/cross_section и т.д.). Источником истины следует считать config/config.go + .helm/values.yaml, а не config.env.
- Расхождение
env-default и реальных значений. У ряда флагов (ENABLE_S3_STORAGE, ENABLE_TOLERATION, CPU_COUNT, воркеры и др.) в коде нет env-default, поэтому при отсутствии переменной поле останется нулевым (0/false/"") — сервис молча стартует с «пустой» конфигурацией планирования. Значения обязательно должны задаваться через окружение (Helm).
DJANGO_BASIC_AUTH / COMPARISONS_API_DEBUG / BIM_API_DEBUG объявлены в структуре конфига, но фактически в бизнес-логике engine не задействованы (debug-флаги повторно читаются через os.Getenv и прокидываются в поды; DJANGO_BASIC_AUTH не используется — в под задачи попадает хардкод-путь DJANGO_BASIC_AUTH_PATH=/etc/sarex/django-auth.json).
RABBITMQ_CREATE_TOPIC присутствует в config.env, но в конфиге RabbitMQ такого поля нет (используется RABBITMQ_CREATE_ROUTING_KEY) — переменная не читается.
Минимальный набор для локального запуска
Для локального старта достаточно поднять PostgreSQL и указать доступ к нему; исполнители и внешние интеграции можно выключить.
# Логирование
LOG_LEVEL=debug
# PostgreSQL (обязательно — engine сразу подключается к БД)
POSTGRES_ADDRESS=localhost
POSTGRES_PORT=5432
POSTGRES_DB=processing_db
POSTGRES_USER=user
POSTGRES_PASSWORD=password
POSTGRES_POOL_SIZE=5
POSTGRES_SSL_USE=false
ENABLE_SQL_QUERY=true
# Исполнители: выключаем AMQP; для Kubernetes нужен доступ к кластеру
ENABLE_AMQP_EXECUTOR=0
ENABLE_KUBERNETES_EXECUTOR=1
KUBE_CONFIG=/path/to/your/.kube/config # если пусто — используется in-cluster
KUBE_CONTEXT=your-context
JOBS_NAMESPACE=processing-testing
# Воркеры
COUNT_RUNNING_WORKERS=1
COUNT_CANCELING_WORKERS=1
COUNT_HANDLE_JOB_WORKERS=1
# Пулинг / выборка
MAX_WORKFLOWS_LIMIT=10
MAX_RUNNING_JOBS=10
DEFAULT_GET_SINCE_LAST_HOURS=168
WORKFLOW_PRIORITY=default
# Дефолты планирования подов (иначе будут пустыми)
DEFAULT_IMAGE_PULL_POLICY=IfNotPresent
DEFAULT_CPU_REQUESTS=100m
DEFAULT_MEMORY_REQUESTS=64Mi
# Хранилища/внешние БД можно отключить для минимального запуска
ENABLE_S3_STORAGE=0
ENABLE_S3V2_STORAGE=0
ENABLE_PDM_STORAGE=0
ENABLE_URL_STORAGE=0
ENABLE_LOCAL=0
ENABLE_BIM_API_DB=0
ENABLE_BIM_API_CH=0
ENABLE_BIM_API_V2_DB=0
ENABLE_PDM_API_DB=0
ENABLE_COMPARISONS_API_DB=0
ENABLE_ISSUE_API_DB=0
ENABLE_RESOURCES_API=0
ENABLE_MAIL_GUN=0
ENABLE_SMTP=0
ENABLE_WORKSPACE_API_DB=0
ENABLE_CROSS_SECTION_API_DB=0
ENABLE_TOLERATION=0
Запуск: go run ./cmd/engine. Если Kubernetes-исполнитель не нужен вовсе — установите ENABLE_KUBERNETES_EXECUTOR=0 (тогда KUBE_*/JOBS_NAMESPACE не требуются), но учтите, что без единого включённого исполнителя сервис не будет запускать задачи. Профилирование доступно на http://localhost:8081/debug/pprof/.