# Chat Switchboard v0.12 - Server Environment Variables # Copy this file to .env and fill in the values # ── Server ─────────────────────────────────── PORT=8080 ENVIRONMENT=development BASE_PATH= # e.g. /chat for path-based routing # ── Database (PostgreSQL) ──────────────────── DB_HOST=localhost DB_PORT=5432 DB_USER=chat_switchboard DB_PASSWORD=your-secure-password-here DB_NAME=chat_switchboard DB_SSL_MODE=disable DB_MAX_CONNS=25 # ── Auth ───────────────────────────────────── JWT_SECRET=your-super-secret-jwt-key-change-in-production JWT_EXPIRATION=24h JWT_ISSUER=chat-switchboard # ── Bootstrap Admin ────────────────────────── # Creates or updates admin account on every startup. # Set via K8s secret or env. Leave blank to skip. SWITCHBOARD_ADMIN_USERNAME= SWITCHBOARD_ADMIN_PASSWORD= # ── Seed Users (dev/test only) ────────────── # Pre-create users on startup. Ignored in production. # Format: user:pass:role,user2:pass2:role2 (role = admin|user, default: user) # Idempotent: existing usernames are skipped. # K8s: create secret "switchboard-seed-users" with key "users" SEED_USERS= # ── CORS ───────────────────────────────────── CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:8080 # ── Banner (optional) ─────────────────────── # Environment classification banner. # BANNER_TEXT=DEVELOPMENT # BANNER_COLOR=#007a33 # BANNER_POSITION=top # ── Logging ────────────────────────────────── # LOG_FORMAT: "text" (default, human-readable) or "json" (structured, machine-parseable) LOG_FORMAT=text LOG_LEVEL=info # ── File Storage ───────────────────────────── # Backend: "pvc" (local filesystem), "s3" (S3-compatible), or empty (auto-detect) STORAGE_BACKEND= STORAGE_PATH=/data/storage # S3 settings (only when STORAGE_BACKEND=s3) # Works with MinIO, Ceph RGW, AWS S3. # S3_ENDPOINT=http://minio:9000 # S3_BUCKET=switchboard-storage # S3_ACCESS_KEY= # S3_SECRET_KEY= # S3_REGION=us-east-1 # S3_PREFIX= # optional key prefix for shared buckets # S3_FORCE_PATH_STYLE=true # required for MinIO, Ceph RGW # ── Extraction ─────────────────────────────── # EXTRACTION_MODE=inline # "inline" or "sidecar" # EXTRACTION_CONCURRENCY=3