axe/.env.prod.example
2026-10-18 22:07:25 +03:00

96 lines
4.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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