refactor(env): unify Docker env vars — canonical AUTH_SECRET_KEY, remove JWT_SECRET fallback

Canonical variables:
  - AUTH_SECRET_KEY — JWT signing key for backend + agent (was split across
    AUTH_SECRET_KEY / JWT_SECRET)
  - SERVICE_JWT — agent→backend service token
  - No JWT_SECRET fallback: decoder fails with migration guidance if only
    JWT_SECRET is set

Compose files unified:
  - docker-compose.yml, docker-compose.enterprise-clean.yml,
    docker-compose.e2e.yml — all use AUTH_SECRET_KEY
  - build.sh generated compose now passes AUTH_SECRET_KEY + ENCRYPTION_KEY
    to backend

Env examples unified and completed:
  - .env.example — comprehensive template, all compose vars
  - .env.enterprise-clean.example — production template
  - backend/.env.example — backend-only run
  - docker/.env.agent.example — agent-only run
  - NEW: .env.current.example, .env.master.example,
    .env.e2e.example, frontend/.env.example

Tests aligned:
  - conftest sets AUTH_SECRET_KEY (canonical value matched across test files)
  - test mocks use canonical name
  - 1176 passed, 0 failed
This commit is contained in:
2026-07-06 14:24:17 +03:00
parent a5b7adb61c
commit 48e3ff4503
15 changed files with 586 additions and 126 deletions

View File

@@ -1,38 +1,87 @@
# ======================================================================
# superset-tools — Переменные окружения
# Только обязательные + docker. Остальное настраивается через web UI.
# superset-tools — локальная разработка (docker compose)
# Все переменные, используемые docker-compose.yml.
# Скопируйте в .env.current или .env.master и отредактируйте под ветку.
# ======================================================================
# --- Обязательно: секреты ---
AUTH_SECRET_KEY=change-me-to-a-random-secret # JWT-ключ подписи токенов (обязательно)
ENCRYPTION_KEY=3YIxOr3_GFht9ZyjRQMqOdtuO1CKOj8Y9mpY89iMbZY= # Fernet-ключ шифрования (сгенерируйте свой для прода)
# ── Проект ─────────────────────────────────────────────────────────────
COMPOSE_PROJECT_NAME=ss-tools-current
# --- Обязательно: базы данных ---
DATABASE_URL=postgresql+psycopg2://postgres:postgres@localhost:5432/ss_tools # Основная БД
AUTH_DATABASE_URL=postgresql+psycopg2://postgres:postgres@localhost:5432/ss_tools # БД аутентификации
TASKS_DATABASE_URL=postgresql+psycopg2://postgres:postgres@localhost:5432/ss_tools # БД задач
# ── PostgreSQL (встроенный, docker compose db service) ──────────────────
POSTGRES_IMAGE=postgres:16-alpine
POSTGRES_HOST_PORT=5433
POSTGRES_DB=ss_tools
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
# --- ADFS SSO (опционально) ---
ADFS_CLIENT_ID= # Client ID для ADFS (оставьте пустым, если не используется)
ADFS_CLIENT_SECRET= # Client Secret для ADFS
ADFS_METADATA_URL= # URL метаданных ADFS
# ── Порты хоста ────────────────────────────────────────────────────────
BACKEND_HOST_PORT=8101
FRONTEND_HOST_PORT=8100
FRONTEND_SSL_PORT=443
AGENT_HOST_PORT=7860
# --- Администратор (первый запуск) ---
INITIAL_ADMIN_CREATE=false # true — создать администратора при старте (только для первого запуска)
INITIAL_ADMIN_USERNAME=admin # Логин администратора
INITIAL_ADMIN_PASSWORD=admin123 # Пароль (обязателен при INITIAL_ADMIN_CREATE=true)
INITIAL_ADMIN_EMAIL=admin@example.com # Email администратора (опционально)
# ── Безопасность (ОБЯЗАТЕЛЬНО) ─────────────────────────────────────────
# JWT-ключ подписи токенов — единый для backend и agent.
# Сгенерировать: python3 -c "import secrets; print(secrets.token_urlsafe(32))"
AUTH_SECRET_KEY=change-me-to-a-random-secret-32-chars-min
# Fernet-ключ шифрования паролей подключений и API-ключей.
# Сгенерировать: python3 -c "import base64,os; print(base64.urlsafe_b64encode(os.urandom(32)).decode())"
ENCRYPTION_KEY=3YIxOr3_GFht9ZyjRQMqOdtuO1CKOj8Y9mpY89iMbZY=
# Сервисный токен для agent→backend вызовов.
# Сгенерировать: python3 -c "import secrets; print('svc-' + secrets.token_urlsafe(24))"
SERVICE_JWT=agent-service-secret
# JWT audience / issuer (опционально)
# JWT_AUDIENCE=superset-tools-api
# JWT_ISSUER=superset-tools
# --- Порты (Docker) ---
BACKEND_HOST_PORT=8001 # Внешний порт бэкенда на хосте
FRONTEND_HOST_PORT=8000 # Внешний порт фронтенда на хосте
# ── Admin bootstrap (первый запуск) ────────────────────────────────────
INITIAL_ADMIN_CREATE=true
INITIAL_ADMIN_USERNAME=admin
INITIAL_ADMIN_PASSWORD=admin
INITIAL_ADMIN_EMAIL=
# --- PostgreSQL (прямое подключение, без DATABASE_URL) ---
POSTGRES_HOST=localhost # Хост PostgreSQL
POSTGRES_PORT=5432 # Порт PostgreSQL
POSTGRES_DB=ss_tools # Имя БД
POSTGRES_USER=postgres # Пользователь
POSTGRES_PASSWORD=postgres # Пароль
# ── LLM / AI провайдеры (опционально — настраивается через Web UI) ─────
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
# Агент: LLM настройки (если не подтягиваются из FastAPI /api/agent/llm-config)
LLM_API_KEY=
LLM_BASE_URL=https://api.openai.com/v1
LLM_MODEL=gpt-4o
LLM_SSL_VERIFY=true
LLM_CA_CERT_URLS=
# --- Docker Compose ---
COMPOSE_PROJECT_NAME=superset-tools # Имя Docker Compose проекта
# ── Агент (настройки) ──────────────────────────────────────────────────
GRADIO_SERVER_PORT=7860
# GRADIO_ALLOW_PORT_FALLBACK=true
# AGENT_ENABLE_LLM_TITLES=true
# AGENT_TITLE_GENERATION_TIMEOUT_S=0.25
# AGENT_PREFETCH_DASHBOARD_LIMIT=25
# AGENT_CONFIRM_TOOLS=false
# AGENT_INTERRUPT_BEFORE=
# ── Сертификаты / фронтенд ─────────────────────────────────────────────
CERTS_PATH=./certs
SSL_KEY_PASSPHRASE=
# ── Логирование ────────────────────────────────────────────────────────
ENABLE_BELIEF_STATE_LOGGING=true
TASK_LOG_LEVEL=INFO
# ── CORS / Безопасность деплоя ─────────────────────────────────────────
ALLOWED_ORIGINS=http://localhost:8100,http://127.0.0.1:8100
FORCE_HTTPS=false
APP_TIMEZONE=Europe/Moscow
# ── Features ───────────────────────────────────────────────────────────
FEATURES__DATASET_REVIEW=true
FEATURES__HEALTH_MONITOR=true
# ── ADFS SSO (опционально) ─────────────────────────────────────────────
# ADFS_CLIENT_ID=
# ADFS_CLIENT_SECRET=
# ADFS_METADATA_URL=
# ── OpenRouter (опционально) ───────────────────────────────────────────
# OPENROUTER_SITE_URL=
# OPENROUTER_APP_NAME=
# APP_BASE_URL=