docker-compose.yml 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. SIM_INTERNAL_KEY: ${SIM_INTERNAL_KEY:-sim-internal-dev-key-123}
  48. ports:
  49. - '3001:3001'
  50. depends_on:
  51. postgres:
  52. condition: service_healthy
  53. redis:
  54. condition: service_healthy
  55. volumes:
  56. - ./apps/api-server/src:/app/src:ro
  57. - timelapse_uploads:/uploads/captures
  58. web-dashboard:
  59. build:
  60. context: .
  61. dockerfile: apps/web-dashboard/Dockerfile
  62. args:
  63. NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL}
  64. restart: unless-stopped
  65. environment:
  66. NODE_ENV: production
  67. NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL}
  68. ports:
  69. - '3000:3000'
  70. depends_on:
  71. - api-server
  72. worker:
  73. build:
  74. context: .
  75. dockerfile: apps/worker/Dockerfile
  76. restart: unless-stopped
  77. environment:
  78. NODE_ENV: production
  79. DATABASE_URL: postgres://timelapse:timelapse_dev_password@postgres:5432/timelapse_dev
  80. REDIS_URL: redis://redis:6379
  81. depends_on:
  82. postgres:
  83. condition: service_healthy
  84. redis:
  85. condition: service_healthy
  86. simulator:
  87. build:
  88. context: .
  89. dockerfile: apps/simulator/Dockerfile
  90. restart: unless-stopped
  91. environment:
  92. SIM_SERVER_URL: http://api-server:3001
  93. SIM_DEVICE_COUNT: '2'
  94. SIM_CAPTURE_INTERVAL: '30'
  95. SIM_INTERNAL_KEY: ${SIM_INTERNAL_KEY:-sim-internal-dev-key-123}
  96. depends_on:
  97. api-server:
  98. condition: service_started
  99. volumes:
  100. postgres_data:
  101. redis_data:
  102. timelapse_uploads: