docker-compose.yml 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  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. kestra-db-init:
  23. image: postgres:16-alpine
  24. environment:
  25. PGPASSWORD: dataops-test-password
  26. volumes:
  27. - ./postgres/init/010-kestra-runtime.sql:/opt/dataops/010-kestra-runtime.sql:ro
  28. command:
  29. - psql
  30. - -v
  31. - ON_ERROR_STOP=1
  32. - -h
  33. - postgres
  34. - -U
  35. - dataops
  36. - -d
  37. - postgres
  38. - -f
  39. - /opt/dataops/010-kestra-runtime.sql
  40. depends_on:
  41. postgres:
  42. condition: service_healthy
  43. restart: "no"
  44. networks:
  45. - dataops-test-net
  46. source-postgres:
  47. image: postgres:16-alpine
  48. environment:
  49. POSTGRES_DB: acceptance
  50. POSTGRES_USER: source_reader
  51. POSTGRES_PASSWORD: source-test-password
  52. ports:
  53. - "25432:5432"
  54. volumes:
  55. - dataops-test-source-postgres:/var/lib/postgresql/data
  56. - ./datasources/postgres/init.sql:/docker-entrypoint-initdb.d/010-acceptance.sql:ro
  57. healthcheck:
  58. test: ["CMD-SHELL", "pg_isready -U source_reader -d acceptance"]
  59. interval: 5s
  60. timeout: 5s
  61. retries: 20
  62. networks:
  63. - dataops-test-net
  64. source-mysql:
  65. image: mysql:8.4
  66. environment:
  67. MYSQL_DATABASE: acceptance
  68. MYSQL_USER: source_reader
  69. MYSQL_PASSWORD: source-test-password
  70. MYSQL_ROOT_PASSWORD: source-root-test-password
  71. ports:
  72. - "23306:3306"
  73. volumes:
  74. - dataops-test-source-mysql:/var/lib/mysql
  75. - ./datasources/mysql/init.sql:/docker-entrypoint-initdb.d/010-acceptance.sql:ro
  76. healthcheck:
  77. test:
  78. - CMD-SHELL
  79. - mysqladmin ping -h 127.0.0.1 -u source_reader -psource-test-password --silent
  80. interval: 5s
  81. timeout: 5s
  82. retries: 30
  83. start_period: 20s
  84. networks:
  85. - dataops-test-net
  86. neo4j:
  87. image: neo4j:5.26-community
  88. environment:
  89. NEO4J_AUTH: neo4j/Passw0rd
  90. NEO4J_server_memory_heap_initial__size: 256m
  91. NEO4J_server_memory_heap_max__size: 512m
  92. NEO4J_server_memory_pagecache_size: 256m
  93. ports:
  94. - "17474:7474"
  95. - "17687:7687"
  96. volumes:
  97. - dataops-test-neo4j:/data
  98. healthcheck:
  99. test: ["CMD-SHELL", "cypher-shell -u neo4j -p Passw0rd 'RETURN 1' >/dev/null 2>&1"]
  100. interval: 10s
  101. timeout: 10s
  102. retries: 30
  103. start_period: 20s
  104. networks:
  105. - dataops-test-net
  106. minio:
  107. image: minio/minio:RELEASE.2025-04-22T22-12-26Z
  108. command: server /data --console-address ":9001"
  109. environment:
  110. MINIO_ROOT_USER: dataops-test
  111. MINIO_ROOT_PASSWORD: dataops-test-password
  112. ports:
  113. - "19000:9000"
  114. - "19001:9001"
  115. volumes:
  116. - dataops-test-minio:/data
  117. healthcheck:
  118. test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
  119. interval: 5s
  120. timeout: 5s
  121. retries: 20
  122. networks:
  123. - dataops-test-net
  124. minio-init:
  125. image: minio/mc:RELEASE.2025-04-16T18-13-26Z
  126. depends_on:
  127. minio:
  128. condition: service_healthy
  129. entrypoint:
  130. - /bin/sh
  131. - -c
  132. - >-
  133. mc alias set local http://minio:9000 dataops-test dataops-test-password &&
  134. mc mb --ignore-existing local/dataops-bucket
  135. restart: "no"
  136. networks:
  137. - dataops-test-net
  138. n8n:
  139. image: n8nio/n8n:1.100.1
  140. environment:
  141. DB_TYPE: postgresdb
  142. DB_POSTGRESDB_HOST: postgres
  143. DB_POSTGRESDB_PORT: 5432
  144. DB_POSTGRESDB_DATABASE: n8n
  145. DB_POSTGRESDB_USER: dataops
  146. DB_POSTGRESDB_PASSWORD: dataops-test-password
  147. N8N_HOST: localhost
  148. N8N_PORT: 5678
  149. N8N_PROTOCOL: http
  150. N8N_SECURE_COOKIE: "false"
  151. N8N_ENCRYPTION_KEY: dataops-local-test-encryption-key
  152. N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
  153. WEBHOOK_URL: http://localhost:15678/
  154. GENERIC_TIMEZONE: Asia/Shanghai
  155. TZ: Asia/Shanghai
  156. ports:
  157. - "15678:5678"
  158. volumes:
  159. - dataops-test-n8n:/home/node/.n8n
  160. depends_on:
  161. postgres:
  162. condition: service_healthy
  163. healthcheck:
  164. test: ["CMD-SHELL", "wget --spider -q http://127.0.0.1:5678/healthz"]
  165. interval: 10s
  166. timeout: 5s
  167. retries: 30
  168. start_period: 30s
  169. networks:
  170. - dataops-test-net
  171. kestra:
  172. image: kestra/kestra:v1.3.20
  173. command:
  174. - server
  175. - standalone
  176. - --worker-thread=16
  177. - --config
  178. - /etc/kestra/application.yml
  179. stop_grace_period: 6m
  180. environment:
  181. KESTRA_DB_HOST: postgres
  182. KESTRA_DB_NAME: kestra
  183. KESTRA_DB_USERNAME: kestra_runtime
  184. KESTRA_DB_PASSWORD: kestra-local-test-password
  185. KESTRA_USERNAME: ${KESTRA_USERNAME:-admin@dataops.local}
  186. KESTRA_PASSWORD: ${KESTRA_PASSWORD:-DataOpsKestra1!}
  187. ports:
  188. - "127.0.0.1:18080:8080"
  189. volumes:
  190. - dataops-test-kestra:/app/storage
  191. - ./kestra/application.yml:/etc/kestra/application.yml:ro
  192. depends_on:
  193. kestra-db-init:
  194. condition: service_completed_successfully
  195. healthcheck:
  196. test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:8081/health"]
  197. interval: 10s
  198. timeout: 5s
  199. retries: 60
  200. start_period: 60s
  201. restart: unless-stopped
  202. networks:
  203. - dataops-test-net
  204. kestra-mcp:
  205. image: ghcr.io/kestra-io/mcp-server-python@sha256:1fd62028f60914af31e244ddb0086ed5017420313e2c8547ea9c01b8d24dfc1d
  206. profiles:
  207. - kestra-mcp
  208. stdin_open: true
  209. environment:
  210. KESTRA_BASE_URL: http://kestra:8080/api/v1
  211. KESTRA_TENANT_ID: main
  212. KESTRA_USERNAME: ${KESTRA_USERNAME:-admin@dataops.local}
  213. KESTRA_PASSWORD: ${KESTRA_PASSWORD:-DataOpsKestra1!}
  214. KESTRA_MCP_DISABLED_TOOLS: ee,files,kv,namespace
  215. KESTRA_MCP_LOG_LEVEL: ERROR
  216. depends_on:
  217. kestra:
  218. condition: service_healthy
  219. networks:
  220. - dataops-test-net
  221. dataops-scheduling-mcp:
  222. image: dataops-platform-mcp:local
  223. build:
  224. context: ../..
  225. dockerfile: deploy/docker/mcp.Dockerfile
  226. profiles:
  227. - dataops-mcp
  228. stdin_open: true
  229. read_only: true
  230. tmpfs:
  231. - /tmp:size=32m,mode=1777
  232. pids_limit: 64
  233. environment:
  234. DATAOPS_MCP_SUBJECT: ${DATAOPS_MCP_SUBJECT:-}
  235. DATAOPS_MCP_ROLES: ${DATAOPS_MCP_ROLES:-}
  236. DATAOPS_MCP_BUSINESS_DOMAINS: ${DATAOPS_MCP_BUSINESS_DOMAINS:-}
  237. DATAOPS_MCP_ENVIRONMENTS: ${DATAOPS_MCP_ENVIRONMENTS:-}
  238. DATAOPS_MCP_CORRELATION_ID: ${DATAOPS_MCP_CORRELATION_ID:-}
  239. DATAOPS_MCP_DATABASE_URL: postgresql://dataops:dataops-test-password@postgres:5432/dataops
  240. KESTRA_BASE_URL: http://kestra:8080/api/v1
  241. KESTRA_TENANT_ID: main
  242. KESTRA_USERNAME: ${KESTRA_USERNAME:-admin@dataops.local}
  243. KESTRA_PASSWORD: ${KESTRA_PASSWORD:-DataOpsKestra1!}
  244. RUNNER_TASK_TOKEN_SECRET: ${RUNNER_TASK_TOKEN_SECRET:-dataops-local-runner-task-token-secret-change-me}
  245. RUNNER_TASK_TOKEN_TTL_SECONDS: 60
  246. command:
  247. - --kind
  248. - scheduling
  249. - --factory
  250. - app.core.mcp.bootstrap:build_scheduling_gateway
  251. depends_on:
  252. postgres:
  253. condition: service_healthy
  254. kestra:
  255. condition: service_healthy
  256. runner:
  257. condition: service_healthy
  258. networks:
  259. - dataops-test-net
  260. dataops-context-mcp:
  261. image: dataops-platform-mcp:local
  262. build:
  263. context: ../..
  264. dockerfile: deploy/docker/mcp.Dockerfile
  265. profiles:
  266. - dataops-mcp
  267. stdin_open: true
  268. read_only: true
  269. tmpfs:
  270. - /tmp:size=32m,mode=1777
  271. pids_limit: 64
  272. environment:
  273. DATAOPS_MCP_SUBJECT: ${DATAOPS_MCP_SUBJECT:-}
  274. DATAOPS_MCP_ROLES: ${DATAOPS_MCP_ROLES:-}
  275. DATAOPS_MCP_BUSINESS_DOMAINS: ${DATAOPS_MCP_BUSINESS_DOMAINS:-}
  276. DATAOPS_MCP_ENVIRONMENTS: ${DATAOPS_MCP_ENVIRONMENTS:-}
  277. DATAOPS_MCP_CORRELATION_ID: ${DATAOPS_MCP_CORRELATION_ID:-}
  278. DATAOPS_MCP_DATABASE_URL: postgresql://dataops:dataops-test-password@postgres:5432/dataops
  279. DATAOPS_MCP_CONTEXT_MAX_CONCURRENCY: 10
  280. command:
  281. - --kind
  282. - context
  283. - --factory
  284. - app.core.mcp.bootstrap:build_context_service
  285. depends_on:
  286. postgres:
  287. condition: service_healthy
  288. networks:
  289. - dataops-test-net
  290. runner:
  291. build:
  292. context: ../..
  293. dockerfile: deploy/docker/runner.Dockerfile
  294. environment:
  295. RUNNER_LISTEN_HOST: 0.0.0.0
  296. RUNNER_LISTEN_PORT: 5600
  297. RUNNER_WORKERS: 2
  298. RUNNER_THREADS: 2
  299. RUNNER_TASK_TOKEN_SECRET: ${RUNNER_TASK_TOKEN_SECRET:-dataops-local-runner-task-token-secret-change-me}
  300. RUNNER_TASK_TOKEN_TTL_SECONDS: 60
  301. RUNNER_DATASOURCE_POOL_SIZE: 1
  302. RUNNER_DATASOURCE_MAX_OVERFLOW: 1
  303. RUNNER_DATASOURCE_MAX_IDLE_POOLS: 4
  304. RUNNER_DATASOURCE_CONNECTION_BUDGET: 32
  305. RUNNER_HTTP_ALLOWED_HOSTS: ${RUNNER_HTTP_ALLOWED_HOSTS:-}
  306. RUNNER_MINIO_HOST: minio:9000
  307. RUNNER_MINIO_USER: dataops-test
  308. RUNNER_MINIO_PASSWORD: dataops-test-password
  309. RUNNER_MINIO_BUCKET: dataops-bucket
  310. RUNNER_MINIO_SECURE: "false"
  311. RUNNER_ARTIFACT_MAX_BYTES: 33554432
  312. RUNNER_ARTIFACT_MAX_ROWS: 100000
  313. RUNNER_ARTIFACT_MEMORY_LIMIT_BYTES: 268435456
  314. RUNNER_ARTIFACT_TTL_SECONDS: 3600
  315. DATABASE_URL: postgresql://dataops:dataops-test-password@postgres:5432/dataops
  316. NEO4J_URI: bolt://neo4j:7687
  317. NEO4J_USER: neo4j
  318. NEO4J_PASSWORD: Passw0rd
  319. DATASOURCE_CREDENTIAL_MASTER_KEY: ${DATASOURCE_CREDENTIAL_MASTER_KEY:-MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWY=}
  320. DATASOURCE_CREDENTIAL_KEY_VERSION: ${DATASOURCE_CREDENTIAL_KEY_VERSION:-v1}
  321. ports:
  322. - "127.0.0.1:15600:5600"
  323. read_only: true
  324. tmpfs:
  325. - /tmp:size=64m,mode=1777
  326. pids_limit: 128
  327. deploy:
  328. resources:
  329. limits:
  330. cpus: "1.0"
  331. memory: 512M
  332. pids: 128
  333. depends_on:
  334. postgres:
  335. condition: service_healthy
  336. neo4j:
  337. condition: service_healthy
  338. minio-init:
  339. condition: service_completed_successfully
  340. healthcheck:
  341. test:
  342. - CMD
  343. - python
  344. - -c
  345. - import urllib.request; urllib.request.urlopen('http://127.0.0.1:5600/health', timeout=5)
  346. interval: 10s
  347. timeout: 5s
  348. retries: 20
  349. start_period: 20s
  350. networks:
  351. dataops-test-net:
  352. aliases:
  353. - dataops-runner
  354. backend:
  355. build:
  356. context: ../..
  357. dockerfile: deploy/docker/backend.Dockerfile
  358. environment:
  359. FLASK_ENV: production
  360. LISTEN_HOST: 0.0.0.0
  361. LISTEN_PORT: 5500
  362. GUNICORN_WORKERS: 2
  363. DATABASE_URL: postgresql://dataops:dataops-test-password@postgres:5432/dataops
  364. NEO4J_URI: bolt://neo4j:7687
  365. NEO4J_HTTP_URI: http://neo4j:7474
  366. NEO4J_USER: neo4j
  367. NEO4J_PASSWORD: Passw0rd
  368. NEO4J_ENCRYPTED: "false"
  369. MINIO_HOST: minio:9000
  370. MINIO_USER: dataops-test
  371. MINIO_PASSWORD: dataops-test-password
  372. MINIO_BUCKET: dataops-bucket
  373. MINIO_SECURE: "false"
  374. DATAFLOW_DEFAULT_DB_HOST: postgres
  375. DATAFLOW_DEFAULT_DB_PORT: 5432
  376. DATAFLOW_DEFAULT_DB_NAME: dataops
  377. DATAFLOW_SCHEMA: dags
  378. N8N_API_URL: http://n8n:5678
  379. N8N_API_KEY: ${N8N_API_KEY:-}
  380. KESTRA_BASE_URL: http://kestra:8080/api/v1
  381. KESTRA_TENANT_ID: main
  382. KESTRA_USERNAME: ${KESTRA_USERNAME:-admin@dataops.local}
  383. KESTRA_PASSWORD: ${KESTRA_PASSWORD:-DataOpsKestra1!}
  384. RUNNER_TASK_TOKEN_SECRET: ${RUNNER_TASK_TOKEN_SECRET:-dataops-local-runner-task-token-secret-change-me}
  385. RUNNER_TASK_TOKEN_TTL_SECONDS: 60
  386. DATA_FACTORY_ACTIVATION_ENABLED: ${DATA_FACTORY_ACTIVATION_ENABLED:-false}
  387. API_BASE_URL: http://backend:5500/api
  388. DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}
  389. LLM_BASE_URL: https://api.deepseek.com
  390. LLM_MODEL_NAME: deepseek-chat
  391. KNOWLEDGE_ENABLED: "true"
  392. KNOWLEDGE_LIGHTRAG_ENABLED: ${KNOWLEDGE_LIGHTRAG_ENABLED:-false}
  393. KNOWLEDGE_LIGHTRAG_SHADOW_ONLY: "true"
  394. KNOWLEDGE_LIGHTRAG_BASE_URL: http://lightrag:9621
  395. KNOWLEDGE_LIGHTRAG_API_KEY: ${LIGHTRAG_API_KEY:-local-shadow-only-key}
  396. QWEN_EMBEDDING_BASE_URL: ${QWEN_EMBEDDING_BASE_URL:-}
  397. QWEN_EMBEDDING_API_KEY: ${QWEN_EMBEDDING_API_KEY:-}
  398. QWEN_EMBEDDING_MODEL: ${QWEN_EMBEDDING_MODEL:-text-embedding-v3}
  399. SECRET_KEY: dataops-local-test-secret-key
  400. AUDIT_EVIDENCE_SECRET: ${AUDIT_EVIDENCE_SECRET:-dataops-local-audit-evidence-secret-change-me}
  401. AUDIT_EVIDENCE_KEY_VERSION: ${AUDIT_EVIDENCE_KEY_VERSION:-local-v1}
  402. RULE_GENERATION_RECEIPT_SECRET: ${RULE_GENERATION_RECEIPT_SECRET:-}
  403. DATASOURCE_CREDENTIAL_MASTER_KEY: ${DATASOURCE_CREDENTIAL_MASTER_KEY:-MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWY=}
  404. DATASOURCE_CREDENTIAL_KEY_VERSION: ${DATASOURCE_CREDENTIAL_KEY_VERSION:-v1}
  405. LOG_DIR: /app/logs
  406. LOG_TO_CONSOLE: "true"
  407. ports:
  408. - "15500:5500"
  409. volumes:
  410. - dataops-test-backend-logs:/app/logs
  411. - dataops-test-upload:/data/upload
  412. - dataops-test-archive:/data/archive
  413. depends_on:
  414. postgres:
  415. condition: service_healthy
  416. neo4j:
  417. condition: service_healthy
  418. minio-init:
  419. condition: service_completed_successfully
  420. kestra:
  421. condition: service_healthy
  422. runner:
  423. condition: service_healthy
  424. healthcheck:
  425. test:
  426. - CMD
  427. - python
  428. - -c
  429. - import urllib.request; urllib.request.urlopen('http://127.0.0.1:5500/api/system/health', timeout=5)
  430. interval: 10s
  431. timeout: 10s
  432. retries: 20
  433. start_period: 20s
  434. networks:
  435. - dataops-test-net
  436. lightrag-neo4j:
  437. image: neo4j:5.26-community
  438. profiles:
  439. - knowledge-shadow
  440. environment:
  441. NEO4J_AUTH: neo4j/lightrag-test-password
  442. NEO4J_server_memory_heap_initial__size: 256m
  443. NEO4J_server_memory_heap_max__size: 512m
  444. NEO4J_server_memory_pagecache_size: 256m
  445. volumes:
  446. - dataops-test-lightrag-neo4j:/data
  447. healthcheck:
  448. test: ["CMD-SHELL", "cypher-shell -u neo4j -p lightrag-test-password 'RETURN 1' >/dev/null 2>&1"]
  449. interval: 10s
  450. timeout: 10s
  451. retries: 30
  452. start_period: 20s
  453. networks:
  454. - dataops-test-net
  455. lightrag:
  456. image: ghcr.io/hkuds/lightrag@sha256:67ccf8d9f74eb29da872bf8b3e6513605f5ac601fb0509c5b0ca16d98d2d307d
  457. profiles:
  458. - knowledge-shadow
  459. environment:
  460. HOST: 0.0.0.0
  461. PORT: 9621
  462. WORKSPACE: ${LIGHTRAG_SHADOW_WORKSPACE:-dataops-global-shadow-g1}
  463. LIGHTRAG_API_KEY: ${LIGHTRAG_API_KEY:-local-shadow-only-key}
  464. LIGHTRAG_KV_STORAGE: PGKVStorage
  465. LIGHTRAG_DOC_STATUS_STORAGE: PGDocStatusStorage
  466. LIGHTRAG_VECTOR_STORAGE: PGVectorStorage
  467. LIGHTRAG_GRAPH_STORAGE: Neo4JStorage
  468. POSTGRES_HOST: postgres
  469. POSTGRES_PORT: 5432
  470. POSTGRES_USER: lightrag
  471. POSTGRES_PASSWORD: lightrag-test-password
  472. POSTGRES_DATABASE: dataops_lightrag
  473. POSTGRES_ENABLE_VECTOR: "true"
  474. NEO4J_URI: bolt://lightrag-neo4j:7687
  475. NEO4J_USERNAME: neo4j
  476. NEO4J_PASSWORD: lightrag-test-password
  477. NEO4J_DATABASE: neo4j
  478. LLM_BINDING: openai
  479. LLM_BINDING_HOST: ${LIGHTRAG_LLM_BASE_URL:-https://api.deepseek.com/v1}
  480. LLM_BINDING_API_KEY: ${LIGHTRAG_LLM_API_KEY:-}
  481. LLM_MODEL: ${LIGHTRAG_LLM_MODEL:-deepseek-chat}
  482. EMBEDDING_BINDING: openai
  483. EMBEDDING_BINDING_HOST: ${QWEN_EMBEDDING_BASE_URL:-}
  484. EMBEDDING_BINDING_API_KEY: ${QWEN_EMBEDDING_API_KEY:-}
  485. EMBEDDING_MODEL: ${QWEN_EMBEDDING_MODEL:-text-embedding-v3}
  486. EMBEDDING_DIM: 1024
  487. LIGHTRAG_PARSER: "*:legacy-F"
  488. depends_on:
  489. postgres:
  490. condition: service_healthy
  491. lightrag-neo4j:
  492. condition: service_healthy
  493. healthcheck:
  494. test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:9621/health >/dev/null"]
  495. interval: 10s
  496. timeout: 5s
  497. retries: 30
  498. start_period: 30s
  499. networks:
  500. - dataops-test-net
  501. lightrag-projector:
  502. build:
  503. context: ../..
  504. dockerfile: deploy/docker/backend.Dockerfile
  505. profiles:
  506. - knowledge-shadow
  507. command: ["python", "-m", "app.core.knowledge.lightrag.worker"]
  508. environment:
  509. DATABASE_URL: postgresql://dataops:dataops-test-password@postgres:5432/dataops
  510. KNOWLEDGE_LIGHTRAG_BASE_URL: http://lightrag:9621
  511. KNOWLEDGE_LIGHTRAG_API_KEY: ${LIGHTRAG_API_KEY:-local-shadow-only-key}
  512. KNOWLEDGE_LIGHTRAG_TIMEOUT_SECONDS: 15
  513. LIGHTRAG_SHADOW_WORKSPACE: ${LIGHTRAG_SHADOW_WORKSPACE:-dataops-global-shadow-g1}
  514. depends_on:
  515. postgres:
  516. condition: service_healthy
  517. lightrag:
  518. condition: service_healthy
  519. restart: unless-stopped
  520. networks:
  521. - dataops-test-net
  522. frontend:
  523. build:
  524. context: ../..
  525. dockerfile: deploy/docker/frontend.Dockerfile
  526. args:
  527. VUE_APP_N8N_URL: http://localhost:15678
  528. VUE_APP_N8N_CHAT_URL: ""
  529. VUE_APP_MINIO_PUBLIC_URL: http://localhost:19000/dataops-bucket
  530. VUE_APP_PREVIEW_URL: ""
  531. ports:
  532. - "18183:80"
  533. depends_on:
  534. backend:
  535. condition: service_healthy
  536. healthcheck:
  537. test: ["CMD-SHELL", "wget --spider -q http://127.0.0.1/"]
  538. interval: 10s
  539. timeout: 5s
  540. retries: 20
  541. networks:
  542. - dataops-test-net
  543. networks:
  544. dataops-test-net:
  545. name: dataops-test-net
  546. volumes:
  547. dataops-test-postgres:
  548. dataops-test-source-postgres:
  549. dataops-test-source-mysql:
  550. dataops-test-neo4j:
  551. dataops-test-minio:
  552. dataops-test-n8n:
  553. dataops-test-kestra:
  554. dataops-test-backend-logs:
  555. dataops-test-upload:
  556. dataops-test-archive:
  557. dataops-test-lightrag-neo4j: