96 lines
4.1 KiB
Plaintext
96 lines
4.1 KiB
Plaintext
# Прод-окружение стека compose.prod.yaml. Скопировать на сервер:
|
||
#
|
||
# mkdir -p /opt/building-mgmt && cp .env.prod.example /opt/building-mgmt/.env
|
||
# chmod 600 /opt/building-mgmt/.env # секреты, только root
|
||
#
|
||
# Заполняется один раз и правится осознанно: стек и CI читают его
|
||
# по пути /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
|