# Server PORT=3000 # Owner authentication # Generate a unique high-entropy secret of at least 32 characters. BETTER_AUTH_SECRET= # Canonical public origin for Admin, API, RSS self links, and suite fallback URLs. # Production requires HTTPS (localhost is the development exception); no path/query/hash. BETTER_AUTH_URL=http://localhost:3000 # Public API # Cross-origin requests are denied by default. Set an exact comma-separated # list of canonical HTTP(S) origins when a separate frontend needs access. PUBLIC_CORS_ORIGINS= PUBLIC_RATE_LIMIT_MAX=120 PUBLIC_RATE_LIMIT_WINDOW_SECONDS=60 # Keep false unless the server is reachable only through a trusted reverse proxy. TRUST_PROXY=false # PostgreSQL POSTGRES_DB=koharu POSTGRES_USER=koharu POSTGRES_PASSWORD=koharu DATABASE_URL=postgresql://koharu:koharu@localhost:5432/koharu # Telegram # Create one bot with @BotFather and make it an administrator of every public # channel you configure. Never commit the real token. TELEGRAM_BOT_TOKEN=replace-with-bot-token TELEGRAM_WORKER_CONCURRENCY=4 # Optional local media cache # Remains disabled until explicitly enabled. Compose mounts a shared named # volume read-write in worker and read-only in server. MEDIA_CACHE_ENABLED=false MEDIA_CACHE_ROOT=/var/lib/koharu/media-cache MEDIA_CACHE_MAX_BYTES=5368709120 MEDIA_CACHE_DOWNLOAD_CONCURRENCY=2 # Optional durable S3-compatible cache tier # Leave all four core settings empty for local-only mode. When enabled, set # S3_ENDPOINT, S3_BUCKET, S3_KEY, and S3_SECRET together. S3_ENDPOINT= S3_BUCKET= S3_KEY= S3_SECRET= S3_REGION=us-east-1 S3_PREFIX=koharu/media-cache S3_FORCE_PATH_STYLE=true # Required only for explicit HTTP endpoints such as a private MinIO service. S3_ALLOW_INSECURE=false S3_MAX_BYTES=5368709120 S3_CONNECT_TIMEOUT_MS=5000 S3_REQUEST_TIMEOUT_MS=30000 # Optional one-time compatibility bootstrap. Prefer `kodama channel add`. # It is ignored once the database allowlist is non-empty. TELEGRAM_CHANNEL_ID=