docker-compose.yml 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. version: '3.9'
  2. services:
  3. postgres:
  4. image: postgres:16-alpine
  5. restart: unless-stopped
  6. environment:
  7. POSTGRES_USER: timelapse
  8. POSTGRES_PASSWORD: timelapse_dev_password
  9. POSTGRES_DB: timelapse_dev
  10. volumes:
  11. - postgres_data:/var/lib/postgresql/data
  12. ports:
  13. - '5432:5432'
  14. healthcheck:
  15. test: ['CMD-SHELL', 'pg_isready -U timelapse']
  16. interval: 5s
  17. timeout: 5s
  18. retries: 5
  19. redis:
  20. image: redis:7-alpine
  21. restart: unless-stopped
  22. ports:
  23. - '6379:6379'
  24. volumes:
  25. - redis_data:/data
  26. healthcheck:
  27. test: ['CMD', 'redis-cli', 'ping']
  28. interval: 5s
  29. timeout: 5s
  30. retries: 5
  31. api-server:
  32. build:
  33. context: .
  34. dockerfile: apps/api-server/Dockerfile
  35. restart: unless-stopped
  36. environment:
  37. NODE_ENV: production
  38. PORT: '3001'
  39. DATABASE_URL: postgres://timelapse:timelapse_dev_password@postgres:5432/timelapse_dev
  40. REDIS_URL: redis://redis:6379
  41. JWT_SECRET: ${JWT_SECRET:-change-this-secret-in-production}
  42. CORS_ORIGIN: ${CORS_ORIGIN:-http://localhost:3000}
  43. GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-}
  44. GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-}
  45. GOOGLE_CALLBACK_URL: ${GOOGLE_CALLBACK_URL:-http://localhost:3001/v1/auth/google/callback}
  46. UPLOAD_DIR: /uploads/captures
  47. UPLOAD_BASE_URL: ${UPLOAD_BASE_URL:-http://10.147.17.118:3001}
  48. SIM_INTERNAL_KEY: ${SIM_INTERNAL_KEY:-sim-internal-dev-key-123}
  49. ports:
  50. - '3001:3001'
  51. depends_on:
  52. postgres:
  53. condition: service_healthy
  54. redis:
  55. condition: service_healthy
  56. volumes:
  57. - ./apps/api-server/src:/app/src:ro
  58. - timelapse_uploads:/uploads/captures
  59. web-dashboard:
  60. build:
  61. context: .
  62. dockerfile: apps/web-dashboard/Dockerfile
  63. args:
  64. NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL}
  65. restart: unless-stopped
  66. environment:
  67. NODE_ENV: production
  68. NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL}
  69. ports:
  70. - '3000:3000'
  71. depends_on:
  72. - api-server
  73. worker:
  74. build:
  75. context: .
  76. dockerfile: apps/worker/Dockerfile
  77. restart: unless-stopped
  78. environment:
  79. NODE_ENV: production
  80. DATABASE_URL: postgres://timelapse:timelapse_dev_password@postgres:5432/timelapse_dev
  81. REDIS_URL: redis://redis:6379
  82. depends_on:
  83. postgres:
  84. condition: service_healthy
  85. redis:
  86. condition: service_healthy
  87. simulator:
  88. build:
  89. context: .
  90. dockerfile: apps/simulator/Dockerfile
  91. restart: unless-stopped
  92. environment:
  93. SIM_SERVER_URL: http://api-server:3001
  94. SIM_DEVICE_COUNT: '2'
  95. SIM_CAPTURE_INTERVAL: '30'
  96. SIM_INTERNAL_KEY: ${SIM_INTERNAL_KEY:-sim-internal-dev-key-123}
  97. depends_on:
  98. api-server:
  99. condition: service_started
  100. volumes:
  101. postgres_data:
  102. redis_data:
  103. timelapse_uploads: