- worker.go: add Redis fields, XADD on Enqueue, XREADGROUP BLOCK consumer loop, sweep compensation for delayed/failed jobs, DB-polling fallback when rdb is nil, XGroupCreateMkStream for idempotent consumer groups - config.go: extend WorkerConfig with stream_prefix, consumer_group, block_timeout_s, sweep_interval_s + defaults, env bindings, reloadable - validator.go: validate new worker Redis fields - bootstrap.go: fix concurrency bug (NewWorkerPoolWithOptions with Redis + cfg.Worker.Concurrency), reorder rdb init before worker pool - config.dev.yaml/config.prod.yaml: add worker Redis params - worker_test.go: 6 new miniredis tests (end-to-end, fallback, sweep, multi-consumer competition, group creation, Redis failure recovery) - config_test.go/reloader_test.go: adapt fixtures for new fields
34 lines
831 B
YAML
34 lines
831 B
YAML
# GoChat Production Environment Overrides
|
|
# Reference: Chatwoot config/environments/production.rb
|
|
|
|
server:
|
|
mode: "release"
|
|
cors:
|
|
# PRODUCTION: Must specify exact origins or wildcard patterns.
|
|
# NEVER leave empty in production — empty + non-debug = no CORS allowed.
|
|
allowed_origins:
|
|
- "https://app.yourdomain.com"
|
|
- "https://admin.yourdomain.com"
|
|
- "*.yourdomain.com" # matches any subdomain
|
|
allow_credentials: true # needed for JWT cookie-based auth
|
|
max_age: 86400
|
|
|
|
database:
|
|
name: "gochat_production"
|
|
pool_max: 20
|
|
log_level: "warn"
|
|
|
|
log:
|
|
level: "info"
|
|
format: "json"
|
|
|
|
worker:
|
|
concurrency: 10
|
|
redis_stream_prefix: "gochat:jobs"
|
|
redis_consumer_group: "gochat-workers"
|
|
redis_block_timeout_s: 5
|
|
redis_sweep_interval_s: 30
|
|
|
|
redis:
|
|
channel_prefix: "gochat_production"
|