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>
3.9 KiB
3.9 KiB
Секреты и переменные окружения
Все секреты задаются через 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__Issuer≡OpenIddict: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$'должен быть пуст.