9.7 KiB
Конфигурация проекта workspaces-api
Документ описывает все переменные окружения и способы конфигурирования сервиса.
Способы конфигурирования
Сервис настраивается только через переменные окружения. Разбор выполняется в config/config.go через библиотеку envconfig (функция config.FromEnv()). Отдельного конфиг-файла (yaml/toml) у приложения нет.
Источники переменных по способам запуска:
| Способ запуска | Откуда берутся переменные |
|---|---|
| Локально (docker-compose) | Файл .env в корне (env_file: .env); поднимает только контейнер Postgres, сам API-сервис в compose закомментирован |
| Локально (бинарник) | Переменные окружения процесса; пример значений — в .env, приватные — в .private.env (см. .private.env.example) |
| Kubernetes (Helm) | .helm/values.yaml: блок envs (обычные значения) и secretEnvs (значения из k8s-секретов) |
| CI/CD (GitLab) | .gitlab-ci.yml: переменные пайплайна и build-args для сборки образа |
Порядок запуска в контейнере (entrypoint.sh): сначала выполняются миграции (/migrations migrate), затем стартует API (/api).
Переменные приложения (config.Config)
Читаются напрямую по имени. Пустые обязательные значения не приводят к ошибке старта (envconfig не помечает их как required) — но без корректных значений БД/documentation сервис работать не будет.
| Переменная | Тип | Значение по умолчанию | Назначение |
|---|---|---|---|
POSTGRES_ADDRESS |
string | — | Хост PostgreSQL |
POSTGRES_PORT |
string | — | Порт PostgreSQL |
POSTGRES_USER |
string | — | Пользователь БД |
POSTGRES_PASSWORD |
string | — | Пароль пользователя БД |
POSTGRES_DB |
string | — | Имя базы данных |
POSTGRES_POOL_SIZE |
int | 0 |
Размер пула соединений к БД |
API_ADDRESS |
string | — | Адрес прослушивания HTTP-сервера (host:port), напр. 0.0.0.0:8000 |
DOCUMENTATION_HOST |
string | — | Базовый URL сервиса документации (documentation service) |
DOCUMENTATION_ORIGINATOR |
string | — | Идентификатор источника, передаваемый в сервис документации |
DOCUMENTATION_LOGGER_FEATURE |
bool | false |
Включает фичу логирования обращений к сервису документации |
SENTRY_DSN |
string | — | DSN для отправки ошибок в Sentry |
SENTRY_DEBUG |
bool | false |
Debug-режим Sentry |
ENVIRONMENT |
string | — | Имя окружения (передаётся в Sentry как environment) |
BUNDLES_RETRY_COUNT |
int | 3 |
Кол-во ретраев клиента bundles (если задано <= 0, берётся 3) |
BUNDLES_NJOBS |
int | 3 |
Кол-во параллельных задач при работе с bundles (если <= 0, берётся 3) |
ENABLE_SQL_QUERY |
bool | false |
Логировать SQL-запросы (добавляет query-hook в go-pg) |
YC-PG-CERTIFICATE |
string | — | Содержимое (PEM) CA-сертификата PostgreSQL; используется при ENABLE_SSL=1 |
ENABLE_SSL |
bool | false |
Подключаться к PostgreSQL по TLS с проверкой по YC-PG-CERTIFICATE |
TRACER_USE |
bool | false |
Включает OpenTelemetry-трейсинг и otel-логгер |
TRACER_HOST |
string | localhost:4317 |
Адрес OTLP-коллектора |
SERVICE_NAME |
string | workspaces |
Имя сервиса в трейсах |
TRACER_USE_INSECURE |
bool | true |
Небезопасное (без TLS) подключение к коллектору |
TRACER_LOGGER_NAME |
string | tracer_logger |
Имя otel-логгера |
Тип
boolв envconfig принимает1/0,true/false,t/fи т.п.
Переменные инфраструктуры, сборки и вспомогательных утилит
Не читаются основным кодом приложения, но участвуют в запуске/сборке/деплое.
| Переменная | Где используется | Назначение |
|---|---|---|
POSTGRES_EXTERNAL_PORT |
docker-compose.yml |
Внешний порт проброса контейнера Postgres |
API_PORT |
.env, docker-compose.yml (закомментированный сервис) |
Порт API при локальном запуске в контейнере |
FAKE_API_ADDRESS |
fake_bundle_api/main.go |
Адрес фейкового bundle-API (только для локальной разработки/тестов) |
GITLAB_CREDENTIALS |
api.Dockerfile (build-arg) |
Креды https://<user>:<token>@gitlab.sarex.io для доступа к приватным Go-модулям при сборке |
CI_COMMIT_SHORT_SHA |
api.Dockerfile (build-arg) → APP_VERSION |
Версия/хэш коммита, зашиваемая в бинарь при сборке (make api) |
APP_VERSION |
Makefile (make api) |
Версия приложения при сборке |
Переменные из Helm-чарта (.helm/values.yaml)
Обычные переменные (envs) — переопределяют дефолты по окружениям (_default/stage/preprod/production):
| Переменная | Значение _default |
Примечание |
|---|---|---|
POSTGRES_POOL_SIZE |
3 |
|
BUNDLES_RETRY_COUNT |
5 |
|
BUNDLES_NJOBS |
5 |
|
API_ADDRESS |
0.0.0.0:8000 |
В preprod/production — порт 8080 |
NAMESPACE |
workspaces |
Задаётся в чарте, но кодом приложения не читается |
ENABLE_SQL_QUERY |
0 |
|
ENABLE_SSL |
1 |
|
DOCUMENTATION_HOST |
http://documentations-api-svc.documentations:8000 |
Зависит от окружения |
DOCUMENTATION_LOGGER_FEATURE |
0 |
|
DOCUMENTATION_ORIGINATOR |
stage_ws |
В prod — prod_ws |
SENTRY_DSN |
https://…@o279218.ingest.sentry.io/6229949 |
|
SENTRY_DEBUG |
0 |
|
ENVIRONMENT |
stage |
В prod — prod |
TRACER_USE |
1 |
|
TRACER_HOST |
signoz-otel-collector.signoz.svc.cluster.local:4317 |
Зависит от окружения |
SERVICE_NAME |
workspaces-api.platform |
Зависит от окружения |
TRACER_USE_INSECURE |
1 |
|
INTERNAL_PATH |
/internal/ |
Задаётся в чарте, но кодом приложения не читается |
Переменные из секретов (secretEnvs, секрет workspaces-postgresql-secret / ya-pg-secret):
| Переменная | Ключ секрета |
|---|---|
POSTGRES_USER |
username |
POSTGRES_PASSWORD |
password |
YC-PG-CERTIFICATE |
ca.crt |
POSTGRES_ADDRESS |
host |
POSTGRES_PORT |
port |
POSTGRES_DB |
database |
JWT-ключи
RSA-ключи для JWT лежат в .pub_keys/ и при сборке образа копируются в /etc/sarex/keys (см. api.Dockerfile). Пути к ключам передаются в функции работы с токенами (pkg/gotools/auth/jwt.go) как аргументы, отдельной переменной окружения для пути к ключам в текущем коде нет.
Замечания и потенциальные проблемы
- В файле
.envпеременная названаPOSTGRES_POLL_SIZE(опечатка), тогда как код читаетPOSTGRES_POOL_SIZE. При локальном запуске из.envразмер пула не применится и останется0. - Имя переменной
YC-PG-CERTIFICATEсодержит дефисы — envconfig сопоставляет её по точному совпадению тега. - В
.helm/values.yamlуsecretEnvs.POSTGRES_PORTзначение_default.secretNameуказано какa-pg-secret(похоже на опечатку, ожидаетсяya-pg-secret/workspaces-postgresql-secret). - Переменные
NAMESPACEиINTERNAL_PATHзадаются в Helm-чарте, но не используются в коде приложения.
Минимальный набор для локального запуска
Для запуска сервиса локально (Postgres — через docker-compose, API — бинарником) нужно задать:
POSTGRES_ADDRESS,POSTGRES_PORT,POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_DBAPI_ADDRESS(напр.0.0.0.0:6666)DOCUMENTATION_HOST,DOCUMENTATION_ORIGINATORENVIRONMENT(напр.local)- при необходимости —
SENTRY_DSN,ENABLE_SQL_QUERY
См. пример значений в .env.