Перейти к содержанию

Конфигурация (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.