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
|
|||
|
|
#
|
|||
|
|
# Заполняется один раз и правится осознанно: стек и 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
|