# deploy/.env.prod.example — шаблон production-окружения «Дейла» (compose.prod.yml, Ruling 9; Task 14). # # Использование: # cp deploy/.env.prod.example deploy/.env.prod # # заполнить ВСЕ секреты (пустое значение = config упадёт с подсказкой — fail-fast, Ruling 9) # docker compose --env-file deploy/.env.prod -f deploy/compose.prod.yml config # проверка # docker compose --env-file deploy/.env.prod -f deploy/compose.prod.yml up -d --build # # + наблюдаемость (профиль): ... up -d --build --profile observability # # Пароли/токены/ключи НЕ имеют значений-дефолтов (генерация: openssl rand -base64 32 и т.п.). # DEAL_OPERATOR_* можно оставить пустыми: оператор тогда НЕ создаётся при старте (Ruling 1) — # заведёте позже env + рестартом core. # ── Обязательные секреты (пусто → docker compose config: ошибка с именем переменной) ── # Пароль Postgres (пользователь/БД фиксированы: deal/deal). DEAL_PG_PASSWORD= # Ключ AES-256-GCM шифрования секретов настроек core (32 байта, base64): openssl rand -base64 32. # Альтернатива — файл data/encryption.key на volume deal_api_data (см. техдок §13.4a). DEAL_ENCRYPTION_KEY= # Общий service-token процессов (gRPC-metadata; один на весь стек). DEAL_SERVICE_TOKEN= # Ключ AES-256-GCM файлов сессий telegram-service (32 байта, base64): openssl rand -base64 32. DEAL_TELEGRAM_SESSION_KEY= # Креды MinIO (root; S3 API и консоль). Бакет deal-files создаётся лениво (Ruling 4). MINIO_ROOT_USER= MINIO_ROOT_PASSWORD= # Origin фронта для CORS/Origin-проверки core (Ruling 9/10). При статике за caddy тот же домен: DEAL_ALLOWED_ORIGINS=https://deal.example # ── Оператор (Ruling 1): пусто = bootstrap пропущен (стартовый warning), заводится позже env+рестарт ── DEAL_OPERATOR_LOGIN= DEAL_OPERATOR_PASSWORD= # ── mTLS внутреннего gRPC (Ruling 6; Task 13/14) ── # 0/пусто — plaintext + service-token внутри изолированной сети; 1 — TLS + клиентский сертификат. # Сертификаты: запустите scripts/mtls-certs.sh (deploy/certs/*) и задайте пароль PFX: DEAL_MTLS_ENABLED=0 DEAL_MTLS_CERT_PASSWORD= # При DEAL_MTLS_ENABLED=1 схемы внутренних endpoint'ов обязаны стать https:// (иначе рукопожатие # падает — код схему сам не переключает, см. task-13-report). Порт/имя менять не нужно: DEAL_ML_ENDPOINT=http://ml-service:5103 DEAL_AI_ENDPOINT=http://ai-service:5102 DEAL_TELEGRAM_ENDPOINT=http://telegram-service:5101 DEAL_CORE_INGRESS=http://core:5082 # ── Необязательные (дефолты в compose.prod.yml) ── # Каталог сертификатов mTLS на хосте (монтируется в /etc/deal/certs контейнеров): # DEAL_CERTS_DIR=./certs # Дефолт-бюджет ИИ нового тенанта (токенов/месяц; константа кода — 10 000 000): # DEAL_DEFAULT_AI_BUDGET= # ── Observability-профиль (только при --profile observability; см. compose.prod.yml) ── # Пароль admin'а Grafana. Задать ПЕРЕД подъёмом профиля (пусто — grafana не получит пароль): DEAL_GRAFANA_ADMIN_PASSWORD= # DEAL_GRAFANA_ADMIN_USER=admin