docker-compose.yml 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. name: dataops-test
  2. services:
  3. postgres:
  4. image: pgvector/pgvector:pg16
  5. environment:
  6. POSTGRES_DB: dataops
  7. POSTGRES_USER: dataops
  8. POSTGRES_PASSWORD: dataops-test-password
  9. ports:
  10. - "15432:5432"
  11. volumes:
  12. - dataops-test-postgres:/var/lib/postgresql/data
  13. - ./postgres/init:/docker-entrypoint-initdb.d:ro
  14. - ../../database:/dataops-schema:ro
  15. healthcheck:
  16. test: ["CMD-SHELL", "pg_isready -U dataops -d dataops"]
  17. interval: 5s
  18. timeout: 5s
  19. retries: 20
  20. networks:
  21. - dataops-test-net
  22. source-postgres:
  23. image: postgres:16-alpine
  24. environment:
  25. POSTGRES_DB: acceptance
  26. POSTGRES_USER: source_reader
  27. POSTGRES_PASSWORD: source-test-password
  28. ports:
  29. - "25432:5432"
  30. volumes:
  31. - dataops-test-source-postgres:/var/lib/postgresql/data
  32. - ./datasources/postgres/init.sql:/docker-entrypoint-initdb.d/010-acceptance.sql:ro
  33. healthcheck:
  34. test: ["CMD-SHELL", "pg_isready -U source_reader -d acceptance"]
  35. interval: 5s
  36. timeout: 5s
  37. retries: 20
  38. networks:
  39. - dataops-test-net
  40. source-mysql:
  41. image: mysql:8.4
  42. environment:
  43. MYSQL_DATABASE: acceptance
  44. MYSQL_USER: source_reader
  45. MYSQL_PASSWORD: source-test-password
  46. MYSQL_ROOT_PASSWORD: source-root-test-password
  47. ports:
  48. - "23306:3306"
  49. volumes:
  50. - dataops-test-source-mysql:/var/lib/mysql
  51. - ./datasources/mysql/init.sql:/docker-entrypoint-initdb.d/010-acceptance.sql:ro
  52. healthcheck:
  53. test:
  54. - CMD-SHELL
  55. - mysqladmin ping -h 127.0.0.1 -u source_reader -psource-test-password --silent
  56. interval: 5s
  57. timeout: 5s
  58. retries: 30
  59. start_period: 20s
  60. networks:
  61. - dataops-test-net
  62. neo4j:
  63. image: neo4j:5.26-community
  64. environment:
  65. NEO4J_AUTH: neo4j/Passw0rd
  66. NEO4J_server_memory_heap_initial__size: 256m
  67. NEO4J_server_memory_heap_max__size: 512m
  68. NEO4J_server_memory_pagecache_size: 256m
  69. ports:
  70. - "17474:7474"
  71. - "17687:7687"
  72. volumes:
  73. - dataops-test-neo4j:/data
  74. healthcheck:
  75. test: ["CMD-SHELL", "cypher-shell -u neo4j -p Passw0rd 'RETURN 1' >/dev/null 2>&1"]
  76. interval: 10s
  77. timeout: 10s
  78. retries: 30
  79. start_period: 20s
  80. networks:
  81. - dataops-test-net
  82. minio:
  83. image: minio/minio:RELEASE.2025-04-22T22-12-26Z
  84. command: server /data --console-address ":9001"
  85. environment:
  86. MINIO_ROOT_USER: dataops-test
  87. MINIO_ROOT_PASSWORD: dataops-test-password
  88. ports:
  89. - "19000:9000"
  90. - "19001:9001"
  91. volumes:
  92. - dataops-test-minio:/data
  93. healthcheck:
  94. test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
  95. interval: 5s
  96. timeout: 5s
  97. retries: 20
  98. networks:
  99. - dataops-test-net
  100. minio-init:
  101. image: minio/mc:RELEASE.2025-04-16T18-13-26Z
  102. depends_on:
  103. minio:
  104. condition: service_healthy
  105. entrypoint:
  106. - /bin/sh
  107. - -c
  108. - >-
  109. mc alias set local http://minio:9000 dataops-test dataops-test-password &&
  110. mc mb --ignore-existing local/dataops-bucket
  111. restart: "no"
  112. networks:
  113. - dataops-test-net
  114. n8n:
  115. image: n8nio/n8n:1.100.1
  116. environment:
  117. DB_TYPE: postgresdb
  118. DB_POSTGRESDB_HOST: postgres
  119. DB_POSTGRESDB_PORT: 5432
  120. DB_POSTGRESDB_DATABASE: n8n
  121. DB_POSTGRESDB_USER: dataops
  122. DB_POSTGRESDB_PASSWORD: dataops-test-password
  123. N8N_HOST: localhost
  124. N8N_PORT: 5678
  125. N8N_PROTOCOL: http
  126. N8N_SECURE_COOKIE: "false"
  127. N8N_ENCRYPTION_KEY: dataops-local-test-encryption-key
  128. N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
  129. WEBHOOK_URL: http://localhost:15678/
  130. GENERIC_TIMEZONE: Asia/Shanghai
  131. TZ: Asia/Shanghai
  132. ports:
  133. - "15678:5678"
  134. volumes:
  135. - dataops-test-n8n:/home/node/.n8n
  136. depends_on:
  137. postgres:
  138. condition: service_healthy
  139. healthcheck:
  140. test: ["CMD-SHELL", "wget --spider -q http://127.0.0.1:5678/healthz"]
  141. interval: 10s
  142. timeout: 5s
  143. retries: 30
  144. start_period: 30s
  145. networks:
  146. - dataops-test-net
  147. backend:
  148. build:
  149. context: ../..
  150. dockerfile: deploy/docker/backend.Dockerfile
  151. environment:
  152. FLASK_ENV: production
  153. LISTEN_HOST: 0.0.0.0
  154. LISTEN_PORT: 5500
  155. GUNICORN_WORKERS: 2
  156. DATABASE_URL: postgresql://dataops:dataops-test-password@postgres:5432/dataops
  157. NEO4J_URI: bolt://neo4j:7687
  158. NEO4J_HTTP_URI: http://neo4j:7474
  159. NEO4J_USER: neo4j
  160. NEO4J_PASSWORD: Passw0rd
  161. NEO4J_ENCRYPTED: "false"
  162. MINIO_HOST: minio:9000
  163. MINIO_USER: dataops-test
  164. MINIO_PASSWORD: dataops-test-password
  165. MINIO_BUCKET: dataops-bucket
  166. MINIO_SECURE: "false"
  167. DATAFLOW_DEFAULT_DB_HOST: postgres
  168. DATAFLOW_DEFAULT_DB_PORT: 5432
  169. DATAFLOW_DEFAULT_DB_NAME: dataops
  170. DATAFLOW_SCHEMA: dags
  171. N8N_API_URL: http://n8n:5678
  172. N8N_API_KEY: ${N8N_API_KEY:-}
  173. API_BASE_URL: http://backend:5500/api
  174. DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}
  175. LLM_BASE_URL: https://api.deepseek.com
  176. LLM_MODEL_NAME: deepseek-chat
  177. SECRET_KEY: dataops-local-test-secret-key
  178. DATASOURCE_CREDENTIAL_MASTER_KEY: ${DATASOURCE_CREDENTIAL_MASTER_KEY:-MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWY=}
  179. DATASOURCE_CREDENTIAL_KEY_VERSION: ${DATASOURCE_CREDENTIAL_KEY_VERSION:-v1}
  180. LOG_DIR: /app/logs
  181. LOG_TO_CONSOLE: "true"
  182. ports:
  183. - "15500:5500"
  184. volumes:
  185. - dataops-test-backend-logs:/app/logs
  186. - dataops-test-upload:/data/upload
  187. - dataops-test-archive:/data/archive
  188. depends_on:
  189. postgres:
  190. condition: service_healthy
  191. neo4j:
  192. condition: service_healthy
  193. minio-init:
  194. condition: service_completed_successfully
  195. healthcheck:
  196. test:
  197. - CMD
  198. - python
  199. - -c
  200. - import urllib.request; urllib.request.urlopen('http://127.0.0.1:5500/api/system/health', timeout=5)
  201. interval: 10s
  202. timeout: 10s
  203. retries: 20
  204. start_period: 20s
  205. networks:
  206. - dataops-test-net
  207. frontend:
  208. build:
  209. context: ../..
  210. dockerfile: deploy/docker/frontend.Dockerfile
  211. args:
  212. VUE_APP_N8N_URL: http://localhost:15678
  213. VUE_APP_N8N_CHAT_URL: ""
  214. VUE_APP_MINIO_PUBLIC_URL: http://localhost:19000/dataops-bucket
  215. VUE_APP_PREVIEW_URL: ""
  216. ports:
  217. - "18183:80"
  218. depends_on:
  219. backend:
  220. condition: service_healthy
  221. healthcheck:
  222. test: ["CMD-SHELL", "wget --spider -q http://127.0.0.1/"]
  223. interval: 10s
  224. timeout: 5s
  225. retries: 20
  226. networks:
  227. - dataops-test-net
  228. networks:
  229. dataops-test-net:
  230. name: dataops-test-net
  231. volumes:
  232. dataops-test-postgres:
  233. dataops-test-source-postgres:
  234. dataops-test-source-mysql:
  235. dataops-test-neo4j:
  236. dataops-test-minio:
  237. dataops-test-n8n:
  238. dataops-test-backend-logs:
  239. dataops-test-upload:
  240. dataops-test-archive: