iac/apps/processing/workflows-engine.CONFIGURATION.md

30 KiB
Raw Blame History

Конфигурация проекта 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_PRIORITYMAX_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.ymlHELM_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.

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

  1. Нет 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 для сервиса не создаётся.
  2. Дубликаты в 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 — второе значение это «замороженное» имя конкретного пода, что явно ошибочно для шаблона.
  3. Хардкод локальных путей разработчика в 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/...).
  4. Переменные из 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-тега для них нет.
  5. 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.
  6. Расхождение env-default и реальных значений. У ряда флагов (ENABLE_S3_STORAGE, ENABLE_TOLERATION, CPU_COUNT, воркеры и др.) в коде нет env-default, поэтому при отсутствии переменной поле останется нулевым (0/false/"") — сервис молча стартует с «пустой» конфигурацией планирования. Значения обязательно должны задаваться через окружение (Helm).
  7. 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).
  8. 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/.