# Прод-окружение стека 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