docker-compose.yml 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. services:
  2. # PostgreSQL Database
  3. postgres:
  4. image: postgres:15-alpine
  5. container_name: saas-postgres
  6. environment:
  7. POSTGRES_DB: ${POSTGRES_DB:-saas_db}
  8. POSTGRES_USER: ${POSTGRES_USER:-saas_user}
  9. POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-secure_password_change_me}
  10. POSTGRES_INITDB_ARGS: "--auth-host=scram-sha-256"
  11. volumes:
  12. - postgres_data:/var/lib/postgresql/data
  13. - ./database/init:/docker-entrypoint-initdb.d
  14. ports:
  15. - "5432:5432"
  16. networks:
  17. - saas-network
  18. restart: unless-stopped
  19. healthcheck:
  20. test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-saas_user} -d ${POSTGRES_DB:-saas_db}"]
  21. interval: 30s
  22. timeout: 10s
  23. retries: 3
  24. # Redis for caching and sessions
  25. redis:
  26. image: redis:7-alpine
  27. container_name: saas-redis
  28. command: redis-server --requirepass ${REDIS_PASSWORD:-redis_secure_password_change_me}
  29. ports:
  30. - "6379:6379"
  31. volumes:
  32. - redis_data:/data
  33. networks:
  34. - saas-network
  35. restart: unless-stopped
  36. healthcheck:
  37. test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
  38. interval: 30s
  39. timeout: 10s
  40. retries: 3
  41. # API Gateway (Nginx)
  42. api-gateway:
  43. image: nginx:alpine
  44. container_name: saas-gateway
  45. ports:
  46. - "8888:80"
  47. - "8443:443"
  48. volumes:
  49. - ./nginx/nginx.conf:/etc/nginx/nginx.conf
  50. - ./nginx/conf.d:/etc/nginx/conf.d
  51. - ./ssl:/etc/nginx/ssl
  52. networks:
  53. - saas-network
  54. depends_on:
  55. - postgres
  56. - redis
  57. - auth-service
  58. restart: unless-stopped
  59. # Authentication Service
  60. auth-service:
  61. build:
  62. context: ./services/auth
  63. dockerfile: Dockerfile
  64. container_name: saas-auth
  65. environment:
  66. DATABASE_URL: postgresql://${POSTGRES_USER:-saas_user}:${POSTGRES_PASSWORD:-secure_password_change_me}@postgres:5432/${POSTGRES_DB:-saas_db}
  67. REDIS_URL: redis://:${REDIS_PASSWORD:-redis_secure_password_change_me}@redis:6379
  68. JWT_SECRET: ${JWT_SECRET:-your_jwt_secret_change_me}
  69. NODE_ENV: development
  70. ports:
  71. - "3001:3001"
  72. volumes:
  73. - ./services/auth:/app
  74. - /app/node_modules
  75. networks:
  76. - saas-network
  77. depends_on:
  78. - postgres
  79. - redis
  80. restart: unless-stopped
  81. # API Service (Core API)
  82. api-service:
  83. build:
  84. context: .
  85. dockerfile: services/api/Dockerfile
  86. container_name: saas-api
  87. environment:
  88. DATABASE_URL: postgresql://${POSTGRES_USER:-saas_user}:${POSTGRES_PASSWORD:-secure_password_change_me}@postgres:5432/${POSTGRES_DB:-saas_db}
  89. REDIS_URL: redis://:${REDIS_PASSWORD:-redis_secure_password_change_me}@redis:6379
  90. AUTH_SERVICE_URL: http://auth-service:3001
  91. NODE_ENV: development
  92. ports:
  93. - "3000:3000"
  94. volumes:
  95. - ./services/api:/app
  96. - /app/node_modules
  97. - ./apps:/apps
  98. networks:
  99. - saas-network
  100. depends_on:
  101. - postgres
  102. - redis
  103. - auth-service
  104. restart: unless-stopped
  105. # Storage Service (MinIO for S3-compatible storage)
  106. storage:
  107. image: minio/minio:latest
  108. container_name: saas-storage
  109. environment:
  110. MINIO_ROOT_USER: ${MINIO_ACCESS_KEY:-minioadmin}
  111. MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY:-minioadmin_change_me}
  112. ports:
  113. - "9000:9000"
  114. - "9001:9001"
  115. volumes:
  116. - minio_data:/data
  117. networks:
  118. - saas-network
  119. command: server /data --console-address ":9001"
  120. restart: unless-stopped
  121. healthcheck:
  122. test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
  123. interval: 30s
  124. timeout: 20s
  125. retries: 3
  126. # Real-time Service (WebSocket support)
  127. realtime-service:
  128. build:
  129. context: ./services/realtime
  130. dockerfile: Dockerfile
  131. container_name: saas-realtime
  132. environment:
  133. REDIS_URL: redis://:${REDIS_PASSWORD:-redis_secure_password_change_me}@redis:6379
  134. NODE_ENV: development
  135. ports:
  136. - "3002:3002"
  137. volumes:
  138. - ./services/realtime:/app
  139. - /app/node_modules
  140. networks:
  141. - saas-network
  142. depends_on:
  143. - redis
  144. restart: unless-stopped
  145. # Monitoring (Prometheus)
  146. prometheus:
  147. image: prom/prometheus:latest
  148. container_name: saas-prometheus
  149. ports:
  150. - "9090:9090"
  151. volumes:
  152. - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
  153. - prometheus_data:/prometheus
  154. networks:
  155. - saas-network
  156. restart: unless-stopped
  157. # Monitoring (Grafana)
  158. grafana:
  159. image: grafana/grafana:latest
  160. container_name: saas-grafana
  161. environment:
  162. GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD:-admin_password_change_me}
  163. ports:
  164. - "3003:3000"
  165. volumes:
  166. - grafana_data:/var/lib/grafana
  167. - ./monitoring/grafana/dashboards:/etc/grafana/provisioning/dashboards
  168. - ./monitoring/grafana/datasources:/etc/grafana/provisioning/datasources
  169. networks:
  170. - saas-network
  171. depends_on:
  172. - prometheus
  173. restart: unless-stopped
  174. # MCP Server
  175. mcp-server:
  176. build:
  177. context: ./mcp-server
  178. dockerfile: Dockerfile
  179. container_name: saas-mcp-server
  180. environment:
  181. SAAS_API_URL: http://api-gateway
  182. SAAS_AUTH_URL: http://auth-service/auth
  183. SAAS_STORAGE_URL: http://storage/storage
  184. DEBUG: "false"
  185. volumes:
  186. - ./mcp-server:/app
  187. - /app/node_modules
  188. networks:
  189. - saas-network
  190. depends_on:
  191. - api-gateway
  192. - auth-service
  193. - storage
  194. restart: unless-stopped
  195. profiles:
  196. - mcp
  197. # Dashboard (React Admin Panel)
  198. dashboard:
  199. build:
  200. context: ./dashboard
  201. dockerfile: Dockerfile
  202. container_name: saas-dashboard
  203. ports:
  204. - "5173:80"
  205. volumes:
  206. - ./dashboard:/app
  207. - /app/node_modules
  208. networks:
  209. - saas-network
  210. depends_on:
  211. - api-service
  212. - auth-service
  213. restart: unless-stopped
  214. environment:
  215. - VITE_API_URL=http://localhost:8888/api
  216. - VITE_AUTH_API_URL=http://localhost:8888/auth
  217. - VITE_STORAGE_URL=http://localhost:8888/storage
  218. volumes:
  219. postgres_data:
  220. redis_data:
  221. minio_data:
  222. prometheus_data:
  223. grafana_data:
  224. networks:
  225. saas-network:
  226. driver: bridge