# ============================================================================= # Корневой шаблон окружения: локальная разработка, docker-compose.yml (Postgres) # и docker-compose.stack.yml (backend + frontend в общей сети с Postgres). # Скопируйте в .env и подставьте значения. Файл .env не коммитьте. # ============================================================================= # ─── Подключение бэкенда к PostgreSQL ────────────────────────── # Локально + docker-compose из этого репо: DB_HOST=localhost, DB_PORT=5432 # Backend в Docker рядом с Postgres: DB_HOST = имя контейнера/сервиса в той же # docker-сети (например postgres_budget), DB_PORT=5432 (внутренний порт Postgres). DB_HOST=localhost DB_PORT=5432 DB_NAME=calendar_run DB_USER=calendar_user DB_PASSWORD=replace_with_strong_secret # ─── Backend API ─────────────────────────────────────────────── # Порт процесса: сначала PORT, иначе API_PORT, иначе 3001. # В docker-compose.stack.yml для контейнера задаётся PORT=3000 (см. compose). # PORT=3000 API_PORT=3001 # ─── Режим без БД (только тесты / smoke API, не для migrate/seed) ─ # CALENDAR_RUN_MOCK_DB=1 # ─── CORS ──────────────────────────────────────────────────── # Должен совпадать с origin в браузере (схема + хост + порт, без пути), иначе API «молчит». # Локальный Vite: http://localhost:5173 # Стек с фронтом на 3033: http://localhost:3033 # Прод: https://ваш-домен — несколько origin через запятую: https://a.ru,https://www.a.ru CORS_ORIGIN=http://localhost:5173 # ─── Auth / sessions ───────────────────────────────────────── # APP_BASE_URL is the only source for verify/reset email links. APP_BASE_URL=http://localhost:5173 SESSION_SECRET=replace_with_32plus_char_random_secret # Production defaults to __Host-sid + Secure cookies. Local dev can stay insecure over http. # SESSION_COOKIE_NAME=__Host-sid # SESSION_COOKIE_SECURE=true # SESSION_TTL_DAYS=30 # AUTH_CLEANUP_INTERVAL_HOURS=24 # ─── Cloudflare Turnstile ──────────────────────────────────── TURNSTILE_SECRET_KEY=replace_with_turnstile_secret # Local tests/dev only, rejected in production: # TURNSTILE_BYPASS_TOKEN=mock-turnstile-token # ─── SMTP email ────────────────────────────────────────────── SMTP_HOST=smtp.example.com SMTP_PORT=587 SMTP_SECURE=false SMTP_USER=replace_with_smtp_user SMTP_PASSWORD=replace_with_smtp_password SMTP_FROM=Calendar Run # ─── Seed after auth ───────────────────────────────────────── # Required once users exist, so seed never creates ownerless races or overwrites user edits. # SEED_OWNER_USER_ID= # SEED_OWNER_EMAIL= # ─── Версия API (опционально) ───────────────────────────────── # Если в образе не удаётся прочитать package.json, подставьте вручную (видно в GET /health). # APP_VERSION=1.0.0 # ─── Frontend (Vite, локально из каталога frontend/) ───────── # Браузер всегда ходит на относительный /api; в dev это проксирует Vite.