Files
Xboard/compose.split.sample.yaml
T
yinjianm a4e78b864a fix(api): 修复邮件队列超时并补齐调度进程
延长 SendEmailJob 超时并改为超时直接失败,补充重试退避、
失败日志与收件人脱敏,避免 send_email 队列批量超时重试。

新增 MAIL_TIMEOUT 与 QUEUE_RETRY_AFTER 配置,并抽出邮件运行时
配置与 HTML 内容服务,确保 Horizon 常驻进程使用最新邮件配置。

为 Docker、supervisor 与 compose 样例补齐 scheduler 进程,并在
节点管理端开启墙检测托管时立即触发一次检测,保证定时任务持续生效。
2026-04-28 13:32:58 +08:00

77 lines
2.0 KiB
YAML

# Split deployment for K8s users or operators who want to scale, restart and
# limit each process independently. The single image is reused across services
# by overriding the command and disabling the supervisor programs that are not
# relevant to that role.
#
# Topology:
# caddy ──┬─→ web (HTTP) :7001 → octane :7001
# └─→ ws-server (WebSocket) /api/v2/server/ws → :8076
# horizon (queue worker, no public port)
# redis (state)
services:
caddy:
image: caddy:2-alpine
restart: unless-stopped
ports:
- "7001:7001"
depends_on:
- web
- ws-server
volumes:
- ./.docker/caddy/Caddyfile.split:/etc/caddy/Caddyfile:ro
web:
image: ghcr.io/cedar2025/xboard:latest
restart: unless-stopped
depends_on:
- redis
volumes: &shared-volumes
- ./.env:/www/.env
- ./.docker/.data/:/www/.docker/.data
- ./storage/logs:/www/storage/logs
- ./storage/theme:/www/storage/theme
- ./plugins:/www/plugins
environment:
docker: "true"
ENABLE_CADDY: "false"
ENABLE_HORIZON: "false"
ENABLE_SCHEDULE: "true"
ENABLE_WS_SERVER: "false"
horizon:
image: ghcr.io/cedar2025/xboard:latest
restart: unless-stopped
depends_on:
- redis
volumes: *shared-volumes
environment:
docker: "true"
ENABLE_CADDY: "false"
ENABLE_WEB: "false"
ENABLE_SCHEDULE: "false"
ENABLE_WS_SERVER: "false"
ws-server:
image: ghcr.io/cedar2025/xboard:latest
restart: unless-stopped
depends_on:
- redis
volumes: *shared-volumes
environment:
docker: "true"
ENABLE_CADDY: "false"
ENABLE_WEB: "false"
ENABLE_HORIZON: "false"
ENABLE_SCHEDULE: "false"
WS_HOST: "0.0.0.0"
redis:
image: redis:7-alpine
restart: unless-stopped
command: redis-server --unixsocket /data/redis.sock --unixsocketperm 777 --save 900 1 --save 300 10 --save 60 10000
volumes:
- redis-data:/data
volumes:
redis-data: