food-market/docs/secrets.md
nns 45326281f9 docs(deploy): .env.example + secrets.md, проброс OpenIddict env в compose (P0-8)
deploy/.env.example — все required/опц. переменные (POSTGRES_PASSWORD, REGISTRY,
*_TAG, OPENIDDICT_ISSUER/CERT_PASSWORD, FM_* бэкапа, Cors/RateLimiting/MoySklad).
docs/secrets.md — таблица переменных, где живут секреты (SMTP в БД, сертификаты в
volume), ротация, гигиена. compose: api получает OpenIddict__Issuer (за прокси
обязателен) и OpenIddict__CertPassword из .env. compose config валиден.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 02:51:13 +05:00

3.9 KiB
Raw Blame History

Секреты и переменные окружения

Все секреты задаются через deploy/.env.gitignore, не коммитится). Шаблон со всеми переменными — deploy/.env.example. docker-compose читает .env автоматически из каталога запуска (deploy/).

cp deploy/.env.example deploy/.env
$EDITOR deploy/.env          # заполнить значения
chmod 600 deploy/.env        # ограничить доступ

Перечень

Переменная Обяз. Назначение Где используется Как получить
POSTGRES_PASSWORD пароль БД food_market контейнер postgres + ConnectionStrings__Default API openssl rand -base64 24
REGISTRY реестр образов image-ссылки в compose стейдж: 127.0.0.1:5001
API_TAG / WEB_TAG / PUBLIC_TAG теги образов image-ссылки тег из CI / latest
OPENIDDICT_ISSUER (прод) публичный issuer токенов API OpenIddict__Issuer публичный URL админки, напр. https://admin.food-market.kz/
OPENIDDICT_CERT_PASSWORD пароль PFX-сертификатов API OpenIddict__CertPassword свой пароль или пусто (self-signed без пароля)
FM_BACKUP_DIR / FM_UPLOADS_DIR / FM_BACKUP_RETENTION_DAYS параметры бэкапа food-market-backup.sh дефолты совпадают с compose
Cors__AllowedOrigins__N CORS-origins API переопределяет appsettings.json
RateLimiting__* антибрутфорс лимиты API дефолты 5/мин, 20/час
MoySklad__BaseUrl база API МойСклад API дефолт боевой api.moysklad.ru

__ (двойное подчёркивание) — разделитель секций конфигурации .NET (OpenIddict__IssuerOpenIddict:Issuer).

Где ещё живут секреты

  • SMTP (отправка писем)НЕ в env. Хранятся в БД (platform_settings), правятся из SuperAdmin-консоли (раздел «Платформа → SMTP»). Перечитываются на каждой отправке без рестарта (см. MailKitEmailSender).
  • Сертификаты OpenIddict — PFX в volume api-data (/app/App_Data). Генерируются self-signed при отсутствии. Можно принести свои — см. openiddict-keys.md.
  • Учётки БД/Forgejo на сервере — вне репозитория (см. приватные заметки оператора).

Ротация

Секрет Как ротировать Влияние
POSTGRES_PASSWORD ALTER USER food_market PASSWORD '…', обновить .env, docker compose up -d рестарт API
OpenIddict-сертификаты заменить/удалить PFX, рестарт API все токены инвалидируются — повторный логин
SMTP-пароль через SuperAdmin-консоль без рестарта

Гигиена

  • deploy/.env — права 600, владелец — пользователь деплоя.
  • Не логировать значения секретов. Serilog настроен без дампа окружения.
  • При утечке — ротировать затронутый секрет (таблица выше) и пересоздать токены.
  • Проверка, что секреты не утекли в git: git ls-files | grep -E '\.env$' должен быть пуст.