Конфигурация (env)¶
Всё настраивается через переменные окружения. Эталонный пример —
backend/.env.example.
Никогда не коммитьте секреты
backend/internal/config/.env*, корневой .env и backend.env — все в
gitignore. Добавляя переменную, задокументируйте её в README — но никогда не её значение.
Основное¶
| Переменная | Пример | Назначение |
|---|---|---|
PORT |
8080 |
Порт, который слушает API |
ENVIRONMENT |
production |
Включает строгие продакшен-проверки |
DEBUG |
false |
Подробное логирование |
ALLOWED_ORIGINS |
https://gerege.mn |
Список разрешённых origin для CORS (через запятую; * запрещён) |
TRUSTED_PROXIES |
— | Адреса обратных прокси |
База данных и Redis¶
| Переменная | Назначение |
|---|---|
DB_POSTGRE_DSN / DB_POSTGRE_URL |
Строка подключения |
DB_MAX_OPEN_CONNS, DB_MAX_IDLE_CONNS, DB_CONN_MAX_LIFE_MINS |
Настройка пула |
REDIS_HOST, REDIS_PASS, REDIS_EXPIRED |
Подключение к Redis и TTL |
В продакшене DSN должен использовать sslmode=verify-full
Этого требует продакшен-проверка. Стек Docker Compose намеренно работает с
ENVIRONMENT=development, потому что у его внутренней базы нет TLS.
API не должен подключаться суперпользователем
RLS работает только тогда, когда приложение подключается ролью с минимальными
правами. Роль суперпользователя или с BYPASSRLS прерывает старт в продакшене.
JWT и сессии¶
| Переменная | Назначение |
|---|---|
JWT_SECRET |
≥32 символов. Смена делает все сессии недействительными |
JWT_EXPIRED, JWT_REFRESH_EXPIRED |
Время жизни access / refresh |
JWT_ISSUER |
Обычно домен приложения. Смена делает все выданные токены недействительными |
eID (доверяющая сторона)¶
| Переменная | Назначение |
|---|---|
EID_BASE_URL |
Базовый адрес e-ID Gerege /v3 (или ретранслятор подписи SSO) |
EID_RP_UUID, EID_RP_SECRET |
Учётные данные RP |
SIGN_RELAY_TOKEN |
Общий токен для ретрансляции подписи (пусто — выключено) |
Сторона провайдера OIDC (приложение как провайдер)¶
| Переменная | Назначение |
|---|---|
OAUTH_ISSUER |
Например, https://gerege.mn. Провайдер включается только при заданном значении |
SSO_STATE_KEY |
Ключ HMAC для временного состояния входа/согласия (≥32 байт) |
SSO_FIRSTPARTY_CLIENTS |
Собственные клиенты, пропускающие экран согласия |
SSO_ADMIN_API_KEYS, SSO_ADMIN_SUBS |
Доступ к административному API |
Сторонние сервисы и хранилище¶
| Переменная | Назначение |
|---|---|
GEMINI_API_KEY |
AI-конвейер. Без него /ai/* возвращает настоящую 500 |
GOOGLE_CLIENT_ID / SECRET |
Привязка Google (кнопка скрыта, если пусто) |
VERIFY_API_BASE, VERIFY_API_KEY, VERIFY_CHANNEL |
Проверка граждан / организаций |
XYP_API_BASE, XYP_CLIENT_ID, XYP_CLIENT_SECRET |
Запросы к государственному реестру |
GSPACE_* |
Собственное SFTP-хранилище приложения (квота на пользователя) |
INTEGRATION_ENC_KEY |
≥16 байт. Шифрует OAuth-токены и MFA суперадмина |
INTEGRATION_ENC_KEY обязателен
Развёртывания требуют этот ключ, и после установки его нельзя менять — ротация сломает все ранее зашифрованные значения.
Наблюдаемость¶
| Переменная | Назначение |
|---|---|
OTEL_EXPORTER, OTEL_SAMPLE_RATIO |
Трассировка OpenTelemetry |
OBSERVABILITY_TOKEN |
Bearer-токен, закрывающий /metrics и /swagger в продакшене |
Фронтенд¶
| Переменная | Назначение |
|---|---|
BACKEND_URL |
Внутренний адрес, к которому обращается BFF (например, http://api:8080) |
Имя api может конфликтовать в общей сети
Когда несколько стеков делят одну сеть Docker, http://api:8080 может
разрешиться в другой контейнер, и каждый вызов /api/v1/* превратится в 404.
В таком случае укажите в BACKEND_URL полное имя своего контейнера api.