# Copy to .env.production at the project root. Never commit the filled copy. DOMAIN=contentos.example.com APP_ENV=production APP_URL=https://contentos.example.com PORT=3001 POSTGRES_PASSWORD=REPLACE_WITH_RANDOM_HEX REDIS_PASSWORD=REPLACE_WITH_DIFFERENT_RANDOM_HEX DATABASE_URL=postgresql://contentos:REPLACE_WITH_RANDOM_HEX@postgres:5432/contentos REDIS_URL=redis://:REPLACE_WITH_DIFFERENT_RANDOM_HEX@redis:6379 ENCRYPTION_KEY=REPLACE_WITH_64_HEX_CHARACTERS MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_SECURE=false MAIL_USERNAME=your-account@gmail.com MAIL_PASSWORD=REPLACE_WITH_APP_PASSWORD MAIL_FROM_ADDRESS=your-account@gmail.com # Object Storage Configuration (MinIO / S3 / R2) STORAGE_PROVIDER=s3 STORAGE_ENDPOINT=http://127.0.0.1:9000 STORAGE_REGION=us-east-1 STORAGE_BUCKET=contentos-media STORAGE_ACCESS_KEY=minioadmin STORAGE_SECRET_KEY=minioadmin STORAGE_FORCE_PATH_STYLE=true # AI / LLM Configuration LLM_PROVIDER=openai-compatible LLM_API_KEY= LLM_BASE_URL=https://api.openai.com/v1 LLM_MODEL=gpt-6-luna LLM_TIMEOUT_MS=60000 LLM_MAX_RETRIES=3 FEATURE_KNOWLEDGE_ENGINE=true # Optional ordered failover; omit providers you do not want to send data to. # Example: LLM_PROVIDER=gemini and LLM_FALLBACK_PROVIDERS=groq,openrouter LLM_FALLBACK_PROVIDERS= # Set each MODEL to an available chat model supporting JSON output. GEMINI_API_KEY= GEMINI_MODEL= GROQ_API_KEY= GROQ_MODEL= OPENROUTER_API_KEY= OPENROUTER_MODEL= # Optional endpoint overrides: GEMINI_BASE_URL, GROQ_BASE_URL, OPENROUTER_BASE_URL