docker-compose.eai-18188.yml 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. name: dataops-eai
  2. services:
  3. postgres:
  4. image: docker.m.daocloud.io/pgvector/pgvector:pg16
  5. environment:
  6. POSTGRES_DB: dataops
  7. POSTGRES_USER: ${DATAOPS_POSTGRES_USER}
  8. POSTGRES_PASSWORD: ${DATAOPS_POSTGRES_PASSWORD}
  9. volumes:
  10. - dataops-eai-postgres:/var/lib/postgresql/data
  11. healthcheck:
  12. test: ["CMD-SHELL", "pg_isready -U ${DATAOPS_POSTGRES_USER} -d dataops"]
  13. interval: 5s
  14. timeout: 5s
  15. retries: 30
  16. networks: [dataops-eai]
  17. kestra-db-init:
  18. image: docker.m.daocloud.io/library/postgres:16-alpine
  19. environment:
  20. PGPASSWORD: ${DATAOPS_POSTGRES_PASSWORD}
  21. command:
  22. - /bin/sh
  23. - -ec
  24. - >-
  25. until pg_isready -h postgres -U ${DATAOPS_POSTGRES_USER} -d dataops; do sleep 2; done;
  26. psql -h postgres -U ${DATAOPS_POSTGRES_USER} -d postgres -tc "SELECT 1 FROM pg_database WHERE datname='kestra'" |
  27. grep -q 1 || psql -h postgres -U ${DATAOPS_POSTGRES_USER} -d postgres -c "CREATE DATABASE kestra";
  28. depends_on:
  29. postgres:
  30. condition: service_healthy
  31. restart: "no"
  32. profiles: ["orchestration"]
  33. networks: [dataops-eai]
  34. db-role-init:
  35. image: dataops-eai-migrator:local
  36. build:
  37. context: ../..
  38. dockerfile: deployment/compose/backend.Dockerfile.eai
  39. target: migrator
  40. environment:
  41. DB_ROLE_INIT_DATABASE_URL: postgresql://${DATAOPS_POSTGRES_USER}:${DATAOPS_POSTGRES_PASSWORD}@postgres:5432/dataops
  42. MIGRATION_DATABASE_URL: postgresql://${DATAOPS_POSTGRES_USER}:${DATAOPS_POSTGRES_PASSWORD}@postgres:5432/dataops
  43. DATABASE_URL: postgresql://dataops_app:${DATAOPS_RUNTIME_PASSWORD}@postgres:5432/dataops
  44. DATAOPS_MIGRATOR_USER: ${DATAOPS_POSTGRES_USER}
  45. DATAOPS_RUNTIME_USER: dataops_app
  46. DATAOPS_RUNTIME_PASSWORD: ${DATAOPS_RUNTIME_PASSWORD}
  47. command: ["python", "-m", "app.core.edge_gateway.runtime_roles"]
  48. depends_on:
  49. postgres:
  50. condition: service_healthy
  51. restart: "no"
  52. networks: [dataops-eai]
  53. db-migrate:
  54. image: dataops-eai-migrator:local
  55. build:
  56. context: ../..
  57. dockerfile: deployment/compose/backend.Dockerfile.eai
  58. target: migrator
  59. command: ["alembic", "-c", "alembic.ini", "upgrade", "head"]
  60. environment:
  61. MIGRATION_DATABASE_URL: postgresql://${DATAOPS_POSTGRES_USER}:${DATAOPS_POSTGRES_PASSWORD}@postgres:5432/dataops
  62. depends_on:
  63. db-role-init:
  64. condition: service_completed_successfully
  65. restart: "no"
  66. networks: [dataops-eai]
  67. neo4j:
  68. image: docker.m.daocloud.io/library/neo4j:5.26-community
  69. environment:
  70. NEO4J_AUTH: neo4j/${DATAOPS_NEO4J_PASSWORD}
  71. NEO4J_server_memory_heap_initial__size: 256m
  72. NEO4J_server_memory_heap_max__size: 512m
  73. NEO4J_server_memory_pagecache_size: 256m
  74. volumes:
  75. - dataops-eai-neo4j:/data
  76. healthcheck:
  77. test: ["CMD-SHELL", "cypher-shell -u neo4j -p '${DATAOPS_NEO4J_PASSWORD}' 'RETURN 1' >/dev/null 2>&1"]
  78. interval: 10s
  79. timeout: 10s
  80. retries: 30
  81. start_period: 20s
  82. networks: [dataops-eai]
  83. minio:
  84. image: docker.m.daocloud.io/minio/minio:RELEASE.2025-04-22T22-12-26Z
  85. command: server /data --console-address ":9001"
  86. environment:
  87. MINIO_ROOT_USER: ${DATAOPS_MINIO_USER}
  88. MINIO_ROOT_PASSWORD: ${DATAOPS_MINIO_PASSWORD}
  89. volumes:
  90. - dataops-eai-minio:/data
  91. healthcheck:
  92. test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
  93. interval: 5s
  94. timeout: 5s
  95. retries: 30
  96. networks: [dataops-eai]
  97. minio-init:
  98. image: docker.m.daocloud.io/minio/mc:RELEASE.2025-04-16T18-13-26Z
  99. environment:
  100. MINIO_ROOT_USER: ${DATAOPS_MINIO_USER}
  101. MINIO_ROOT_PASSWORD: ${DATAOPS_MINIO_PASSWORD}
  102. entrypoint:
  103. - /bin/sh
  104. - -ec
  105. - mc alias set local http://minio:9000 "$${MINIO_ROOT_USER}" "$${MINIO_ROOT_PASSWORD}" && mc mb --ignore-existing local/dataops-bucket
  106. depends_on:
  107. minio:
  108. condition: service_healthy
  109. restart: "no"
  110. networks: [dataops-eai]
  111. kestra:
  112. image: docker.m.daocloud.io/kestra/kestra:v1.3.20
  113. command: ["server", "standalone", "--worker-thread=8", "--config", "/etc/kestra/application.yml"]
  114. environment:
  115. KESTRA_DB_HOST: postgres
  116. KESTRA_DB_NAME: kestra
  117. KESTRA_DB_USERNAME: ${DATAOPS_POSTGRES_USER}
  118. KESTRA_DB_PASSWORD: ${DATAOPS_POSTGRES_PASSWORD}
  119. KESTRA_USERNAME: ${KESTRA_USERNAME}
  120. KESTRA_PASSWORD: ${KESTRA_PASSWORD}
  121. volumes:
  122. - dataops-eai-kestra:/app/storage
  123. - ../../deploy/docker/kestra/application.yml:/etc/kestra/application.yml:ro
  124. depends_on:
  125. kestra-db-init:
  126. condition: service_completed_successfully
  127. healthcheck:
  128. test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:8081/health"]
  129. interval: 10s
  130. timeout: 5s
  131. retries: 60
  132. start_period: 60s
  133. restart: unless-stopped
  134. profiles: ["orchestration"]
  135. networks: [dataops-eai]
  136. runner:
  137. image: dataops-eai-runner:local
  138. build:
  139. context: ../..
  140. dockerfile: deployment/compose/runner.Dockerfile.eai
  141. environment:
  142. RUNNER_LISTEN_HOST: 0.0.0.0
  143. RUNNER_LISTEN_PORT: 5600
  144. RUNNER_TASK_TOKEN_SECRET: ${RUNNER_TASK_TOKEN_SECRET}
  145. RUNNER_MINIO_HOST: minio:9000
  146. RUNNER_MINIO_USER: ${DATAOPS_MINIO_USER}
  147. RUNNER_MINIO_PASSWORD: ${DATAOPS_MINIO_PASSWORD}
  148. RUNNER_MINIO_BUCKET: dataops-bucket
  149. RUNNER_MINIO_SECURE: "false"
  150. DATABASE_URL: postgresql://dataops_app:${DATAOPS_RUNTIME_PASSWORD}@postgres:5432/dataops
  151. NEO4J_URI: bolt://neo4j:7687
  152. NEO4J_USER: neo4j
  153. NEO4J_PASSWORD: ${DATAOPS_NEO4J_PASSWORD}
  154. DATASOURCE_CREDENTIAL_MASTER_KEY: ${DATASOURCE_CREDENTIAL_MASTER_KEY}
  155. DATASOURCE_CREDENTIAL_KEY_VERSION: v1
  156. read_only: true
  157. tmpfs: [/tmp]
  158. depends_on:
  159. db-migrate:
  160. condition: service_completed_successfully
  161. neo4j:
  162. condition: service_healthy
  163. minio-init:
  164. condition: service_completed_successfully
  165. healthcheck:
  166. test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:5600/health', timeout=5)"]
  167. interval: 10s
  168. timeout: 5s
  169. retries: 20
  170. start_period: 20s
  171. networks: [dataops-eai]
  172. backend:
  173. image: dataops-eai-backend:local
  174. build:
  175. context: ../..
  176. dockerfile: deployment/compose/backend.Dockerfile.eai
  177. target: runtime
  178. environment:
  179. FLASK_ENV: production
  180. LISTEN_HOST: 0.0.0.0
  181. LISTEN_PORT: 5500
  182. GUNICORN_WORKERS: 2
  183. DATABASE_URL: postgresql://dataops_app:${DATAOPS_RUNTIME_PASSWORD}@postgres:5432/dataops
  184. NEO4J_URI: bolt://neo4j:7687
  185. NEO4J_HTTP_URI: http://neo4j:7474
  186. NEO4J_USER: neo4j
  187. NEO4J_PASSWORD: ${DATAOPS_NEO4J_PASSWORD}
  188. NEO4J_ENCRYPTED: "false"
  189. MINIO_HOST: minio:9000
  190. MINIO_USER: ${DATAOPS_MINIO_USER}
  191. MINIO_PASSWORD: ${DATAOPS_MINIO_PASSWORD}
  192. MINIO_BUCKET: dataops-bucket
  193. MINIO_SECURE: "false"
  194. DATAFLOW_DEFAULT_DB_HOST: postgres
  195. DATAFLOW_DEFAULT_DB_PORT: 5432
  196. DATAFLOW_DEFAULT_DB_NAME: dataops
  197. DATAFLOW_SCHEMA: dags
  198. RUNNER_TASK_TOKEN_SECRET: ${RUNNER_TASK_TOKEN_SECRET}
  199. API_BASE_URL: http://backend:5500/api
  200. SECRET_KEY: ${DATAOPS_SECRET_KEY}
  201. AUDIT_EVIDENCE_SECRET: ${AUDIT_EVIDENCE_SECRET}
  202. AUDIT_EVIDENCE_KEY_VERSION: v1
  203. RULE_GENERATION_RECEIPT_SECRET: ${RULE_GENERATION_RECEIPT_SECRET}
  204. DATASOURCE_CREDENTIAL_MASTER_KEY: ${DATASOURCE_CREDENTIAL_MASTER_KEY}
  205. DATASOURCE_CREDENTIAL_KEY_VERSION: v1
  206. LOG_TO_CONSOLE: "true"
  207. ports: ["127.0.0.1:${BACKEND_PORT}:5500"]
  208. volumes:
  209. - dataops-eai-backend-logs:/app/logs
  210. - dataops-eai-upload:/data/upload
  211. - dataops-eai-archive:/data/archive
  212. depends_on:
  213. db-migrate:
  214. condition: service_completed_successfully
  215. neo4j:
  216. condition: service_healthy
  217. minio-init:
  218. condition: service_completed_successfully
  219. runner:
  220. condition: service_healthy
  221. healthcheck:
  222. test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:5500/api/system/health', timeout=5)"]
  223. interval: 10s
  224. timeout: 10s
  225. retries: 20
  226. start_period: 20s
  227. networks: [dataops-eai]
  228. frontend:
  229. image: dataops-eai-frontend:local
  230. build:
  231. context: ../..
  232. dockerfile: deployment/compose/frontend.Dockerfile.eai
  233. args:
  234. VUE_APP_N8N_URL: ""
  235. VUE_APP_N8N_CHAT_URL: ""
  236. VUE_APP_MINIO_PUBLIC_URL: ""
  237. VUE_APP_PREVIEW_URL: ""
  238. ports: ["127.0.0.1:${FRONTEND_PORT}:80"]
  239. depends_on:
  240. backend:
  241. condition: service_healthy
  242. healthcheck:
  243. test: ["CMD-SHELL", "wget --spider -q http://127.0.0.1/"]
  244. interval: 10s
  245. timeout: 5s
  246. retries: 20
  247. networks: [dataops-eai]
  248. networks:
  249. dataops-eai:
  250. name: dataops-eai-network
  251. volumes:
  252. dataops-eai-postgres:
  253. dataops-eai-neo4j:
  254. dataops-eai-minio:
  255. dataops-eai-kestra:
  256. dataops-eai-backend-logs:
  257. dataops-eai-upload:
  258. dataops-eai-archive: