docker-compose.yaml 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. services:
  2. postgres:
  3. image: postgres:18
  4. restart: unless-stopped
  5. ports:
  6. - "${POSTGRES_PORT:-5432}:5432"
  7. environment:
  8. POSTGRES_USER: ${DB_USER:-postgres}
  9. POSTGRES_PASSWORD: ${DB_PASSWORD:-postgres}
  10. POSTGRES_DB: ${DB_NAME:-claude_code_hub}
  11. PGDATA: /data/pgdata
  12. TZ: Asia/Shanghai
  13. PGTZ: Asia/Shanghai
  14. volumes:
  15. - ../data/postgres-dev:/data
  16. healthcheck:
  17. test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres} -d ${DB_NAME:-claude_code_hub}"]
  18. interval: 5s
  19. timeout: 5s
  20. retries: 10
  21. start_period: 10s
  22. redis:
  23. image: redis:7-alpine
  24. restart: unless-stopped
  25. ports:
  26. - "${REDIS_PORT:-6379}:6379"
  27. volumes:
  28. - ../data/redis-dev:/data
  29. command: redis-server --appendonly yes
  30. healthcheck:
  31. test: ["CMD", "redis-cli", "ping"]
  32. interval: 5s
  33. timeout: 3s
  34. retries: 5
  35. start_period: 5s
  36. app:
  37. profiles:
  38. - app
  39. build:
  40. context: ..
  41. dockerfile: deploy/Dockerfile
  42. args:
  43. APP_VERSION: ${APP_VERSION:-dev}
  44. image: claude-code-hub-local:${APP_VERSION:-dev}
  45. restart: unless-stopped
  46. depends_on:
  47. postgres:
  48. condition: service_healthy
  49. redis:
  50. condition: service_healthy
  51. environment:
  52. NODE_ENV: production
  53. DSN: postgresql://${DB_USER:-postgres}:${DB_PASSWORD:-postgres}@postgres:5432/${DB_NAME:-claude_code_hub}
  54. REDIS_URL: redis://redis:6379
  55. AUTO_MIGRATE: ${AUTO_MIGRATE:-true}
  56. ENABLE_RATE_LIMIT: ${ENABLE_RATE_LIMIT:-true}
  57. SESSION_TTL: ${SESSION_TTL:-300}
  58. ADMIN_TOKEN: ${ADMIN_TOKEN:-cch-dev-admin}
  59. TZ: Asia/Shanghai
  60. ports:
  61. - "${APP_PORT:-23000}:3000"
  62. healthcheck:
  63. test: ["CMD-SHELL", "curl -f http://localhost:3000/api/actions/health || exit 1"]
  64. interval: 15s
  65. timeout: 5s
  66. retries: 20
  67. start_period: 30s