axe/.env.prod.example

96 lines
4.1 KiB
Plaintext
Raw Normal View History

2026-10-18 19:07:25 +00:00
# Прод-окружение стека compose.prod.yaml. Скопировать на сервер:
#
# mkdir -p /opt/building-mgmt && cp .env.prod.example /opt/building-mgmt/.env
# chmod 600 /opt/building-mgmt/.env # секреты, только root
#
# Заполняется один раз и правится осознанно: стек и CI читают его
2026-10-18 19:07:25 +00:00
# по пути /opt/building-mgmt/.env. Пароли и секреты в git не входят.
# --- Обязательные переменные (compose упадёт без них: :? фейл-фаст) ---
# Роль и база postgres внутри стека. Пароль: openssl rand -base64 32
POSTGRES_USER=building
POSTGRES_PASSWORD=
POSTGRES_DB=building_mgmt
# S3-ключи (они же MINIO_ROOT_* — одна пара секретов на всё).
# Access key: минимум 3 символа (требование MinIO), пароль — 8+.
S3_ACCESS_KEY=
S3_SECRET_KEY=
# Имя бакета фотоотчёта: создаётся сам при старте api. S3_REGION
# опционален (пустой = us-east-1 у aws sdk).
S3_BUCKET=building-mgmt
# Секрет подписи JWT: минимум 32 случайных символа.
# Сгенерировать: openssl rand -base64 48
JWT_SECRET=
# Ключ шифрования токенов Telegram-ботов (AES-256-GCM).
# Сгенерировать: openssl rand -base64 32
# Пусто — ввод личного токена бота в вебе выключен; для уведомлений
# достаточно TELEGRAM_BOT_TOKEN.
DATA_ENCRYPTION_KEY=
# --- Режим и безопасность ---
# Прод: включает lockdown (seed отказывается работать) и подсказывает
# агрегатору логов, что это боевой запуск.
APP_ENV=production
# Secure-флаг на refresh-куке: сайт за TLS — только true.
COOKIE_SECURE=true
# Swagger UI выключен: открытая схема API наружу не нужна.
SWAGGER=false
# Режим gin: release убирает баннер и цветной access-log.
GIN_MODE=release
# Доверенные reverse proxy для X-Forwarded-For. web-контейнер стоит в
# сети bridge compose (172.16.0.0/12) и ПЕРЕЗАПИСЫВАЕТ XFF ($remote_addr),
# поэтому доверяем подсети docker. Без этого все запросы придут с IP
# nginx-контейнера и лимиты логина сложатся в один общий ключ.
TRUSTED_PROXIES=172.16.0.0/12
# CORS не нужен: страница и API с одного домена (nginx проксирует).
CORS_ORIGINS=
# Логи: json — когда собирает агрегатор; иначе text.
LOG_LEVEL=info
LOG_FORMAT=json
# --- Ссылки и лимиты ---
# Публичный адрес приложения (в письмах и Telegram-уведомлениях).
APP_BASE_URL=
# Пул PostgreSQL (см. .env.example): на прод-машине держим потолок.
DB_MAX_CONNS=20
DB_MIN_CONNS=2
DB_MAX_CONN_LIFETIME=1h
DB_MAX_CONN_IDLE_TIME=30m
# Фотоотчёт и автоочистка закрытых заявок (дни; 0 — выключено).
PHOTO_MAX_BYTES=10485760
PHOTO_MAX_PER_TICKET=20
TICKET_RETENTION_DAYS=60
# --- SMTP писем подтверждения и сброса пароля ---
# Пустой SMTP_HOST — письма не шлются (в проде обычно настроен).
# SMTP_TLS: tls | starttls | none; пусто = tls для 465, иначе starttls.
SMTP_HOST=
SMTP_PORT=587
SMTP_USER=
SMTP_PASSWORD=
SMTP_FROM=
SMTP_TLS=
# --- Telegram (уведомления о заявках, не взятых в работу) ---
# Один инстанс API на сервер обязателен: очередь getUpdates у бота
# одна на процесс (см. README, «Известные ограничения»).
TELEGRAM_BOT_TOKEN=
TELEGRAM_API_URL=
TELEGRAM_NOTIFY_AFTER=24h
TELEGRAM_TICK_EVERY=1m