You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
2.7 KiB
Plaintext

# Runtime environment
ENVIRONMENT=production
LOG_LEVEL=info
# PostgreSQL
POSTGRES_USER=knowfoolery
POSTGRES_PASSWORD=change-me
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=knowfoolery
POSTGRES_SSLMODE=disable
POSTGRES_MAX_OPEN_CONNS=25
POSTGRES_MAX_IDLE_CONNS=10
POSTGRES_CONN_MAX_LIFETIME=5m
POSTGRES_CONN_MAX_IDLE_TIME=1m
# Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
REDIS_POOL_SIZE=10
REDIS_MIN_IDLE_CONNS=5
REDIS_DIAL_TIMEOUT=5s
REDIS_READ_TIMEOUT=3s
REDIS_WRITE_TIMEOUT=3s
# Service ports
GAME_SESSION_PORT=8080
QUESTION_BANK_PORT=8081
USER_SERVICE_PORT=8082
LEADERBOARD_PORT=8083
ADMIN_SERVICE_PORT=8085
GATEWAY_PORT=8086
GATEWAY_INTERNAL_PORT=18086
# Gateway
GATEWAY_PUBLIC_PREFIX=/api/v1
GATEWAY_ALLOWED_ORIGINS=https://app.knowfoolery.com
GATEWAY_ALLOWED_METHODS=GET,POST,PUT,DELETE,OPTIONS
GATEWAY_ALLOWED_HEADERS=Origin,Content-Type,Accept,Authorization
GATEWAY_ALLOW_CREDENTIALS=true
GATEWAY_CORS_MAX_AGE_SECONDS=300
GATEWAY_UPSTREAM_TIMEOUT=3s
GATEWAY_RATE_WINDOW=1m
GATEWAY_RATE_GENERAL=100
GATEWAY_RATE_AUTH=5
GATEWAY_RATE_API=60
GATEWAY_RATE_ADMIN=30
GATEWAY_CSP=default-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'
GATEWAY_ENABLE_HSTS=true
GATEWAY_HSTS_MAX_AGE=31536000
GATEWAY_FRAME_OPTIONS=DENY
GATEWAY_CONTENT_TYPE_OPTIONS=true
GATEWAY_REFERRER_POLICY=strict-origin-when-cross-origin
GATEWAY_PERMISSIONS_POLICY=geolocation=(), microphone=(), camera=(), payment=(), usb=()
# Inter-service HTTP timeout
UPSTREAM_HTTP_TIMEOUT=3s
# Feature configs
QUESTION_CACHE_TTL=5m
QUESTION_RANDOM_MAX_EXCLUSIONS=200
QUESTION_BULK_MAX_ITEMS=5000
GAME_SESSION_DURATION=30m
GAME_SESSION_MAX_ATTEMPTS=3
GAME_SESSION_MIN_ANSWER_LATENCY_MS=300
GAME_SESSION_LOCK_TTL=3s
GAME_SESSION_ACTIVE_KEY_TTL=35m
GAME_SESSION_END_REASON_DEFAULT=abandoned
LEADERBOARD_TOP_LIMIT=10
LEADERBOARD_PLAYER_HISTORY_DEFAULT_LIMIT=20
LEADERBOARD_PLAYER_HISTORY_MAX_LIMIT=100
LEADERBOARD_CACHE_TTL=60s
LEADERBOARD_UPDATE_REQUIRE_AUTH=true
USER_ADMIN_LIST_DEFAULT_LIMIT=50
USER_ADMIN_LIST_MAX_LIMIT=200
ADMIN_AUDIT_RETENTION_DAYS=90
# Auth (Zitadel)
ZITADEL_URL=https://auth.knowfoolery.com
ZITADEL_ISSUER=https://auth.knowfoolery.com
ZITADEL_AUDIENCE=knowfoolery-api
ZITADEL_CLIENT_ID=replace-me
ZITADEL_CLIENT_SECRET=replace-me
# Observability
METRICS_ENABLED=true
METRICS_SERVICE_NAME=knowfoolery
TRACING_ENABLED=true
TRACING_SERVICE_NAME=knowfoolery
TRACING_SERVICE_VERSION=0.1.0
TRACING_ENVIRONMENT=production
TRACING_OTLP_ENDPOINT=http://jaeger:4318/v1/traces
TRACING_JAEGER_ENDPOINT=http://jaeger:14268/api/traces
TRACING_SAMPLE_RATE=0.2
PROMETHEUS_PORT=9090
GRAFANA_PORT=3000
JAEGER_UI_PORT=16686
JAEGER_COLLECTOR_PORT=14268
JAEGER_OTLP_GRPC_PORT=4317
JAEGER_OTLP_HTTP_PORT=4318
JAEGER_AGENT_PORT=6831
GRAFANA_ADMIN_USER=admin
GRAFANA_ADMIN_PASSWORD=change-me