docker-compose.yaml 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. name: ${COMPOSE_PROJECT_NAME:-claude-code-hub}
  2. services:
  3. postgres:
  4. image: postgres:18
  5. restart: unless-stopped
  6. # 不对外暴露数据库端口,仅允许容器内部网络访问
  7. # 如需调试,可取消注释下行(仅绑定本机):
  8. # ports:
  9. # - "127.0.0.1:35432:5432"
  10. env_file:
  11. - ./.env
  12. environment:
  13. POSTGRES_USER: ${DB_USER:-postgres}
  14. POSTGRES_PASSWORD: ${DB_PASSWORD:-postgres}
  15. POSTGRES_DB: ${DB_NAME:-claude_code_hub}
  16. # 使用自定义数据目录
  17. PGDATA: /data/pgdata
  18. # 设置时区为上海
  19. TZ: Asia/Shanghai
  20. PGTZ: Asia/Shanghai
  21. volumes:
  22. # 持久化数据库数据到本地 ./data/postgres 目录
  23. # 挂载到 /data 而不是 /var/lib/postgresql/data 避免权限冲突
  24. - ./data/postgres:/data
  25. healthcheck:
  26. test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres} -d ${DB_NAME:-claude_code_hub}"]
  27. interval: 5s
  28. timeout: 5s
  29. retries: 10
  30. start_period: 10s
  31. redis:
  32. image: redis:7-alpine
  33. restart: unless-stopped
  34. volumes:
  35. # 持久化 Redis 数据到本地 ./data/redis 目录
  36. # 使用 AOF 持久化模式,确保数据不丢失
  37. - ./data/redis:/data
  38. command: redis-server --appendonly yes
  39. healthcheck:
  40. test: ["CMD", "redis-cli", "ping"]
  41. interval: 5s
  42. timeout: 3s
  43. retries: 5
  44. start_period: 5s
  45. app:
  46. image: ghcr.io/ding113/claude-code-hub:latest
  47. depends_on:
  48. postgres:
  49. condition: service_healthy
  50. redis:
  51. condition: service_healthy
  52. env_file:
  53. - ./.env
  54. environment:
  55. NODE_ENV: production
  56. # 容器内使用 Dockerfile 默认端口 3000,对外通过 APP_PORT 暴露(默认 23000)
  57. DSN: postgresql://${DB_USER:-postgres}:${DB_PASSWORD:-postgres}@postgres:5432/${DB_NAME:-claude_code_hub}
  58. REDIS_URL: redis://redis:6379
  59. AUTO_MIGRATE: ${AUTO_MIGRATE:-true}
  60. ENABLE_RATE_LIMIT: ${ENABLE_RATE_LIMIT:-true}
  61. SESSION_TTL: ${SESSION_TTL:-300}
  62. # 设置时区为上海
  63. TZ: Asia/Shanghai
  64. ports:
  65. - "${APP_PORT:-23000}:3000"
  66. restart: unless-stopped
  67. healthcheck:
  68. test:
  69. [
  70. "CMD",
  71. "node",
  72. "-e",
  73. "fetch('http://' + (process.env.HOSTNAME || '127.0.0.1') + ':3000/api/actions/health').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))",
  74. ]
  75. interval: 30s
  76. timeout: 5s
  77. retries: 3
  78. start_period: 30s