docker-compose.yml 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582
  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. - "${DATAOPS_POSTGRES_PORT:-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. - "${SOURCE_POSTGRES_PORT:-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. - "${SOURCE_MYSQL_PORT:-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. - "${NEO4J_HTTP_PORT:-17474}:7474"
  95. - "${NEO4J_BOLT_PORT:-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. - "${MINIO_API_PORT:-19000}:9000"
  114. - "${MINIO_CONSOLE_PORT:-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. - "${N8N_PORT:-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:${KESTRA_PORT:-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. image: ${DATAOPS_RUNNER_IMAGE:-dataops-platform-runner:local}
  292. build:
  293. context: ../..
  294. dockerfile: deploy/docker/runner.Dockerfile
  295. environment:
  296. RUNNER_LISTEN_HOST: 0.0.0.0
  297. RUNNER_LISTEN_PORT: 5600
  298. RUNNER_WORKERS: 2
  299. RUNNER_THREADS: 2
  300. RUNNER_TASK_TOKEN_SECRET: ${RUNNER_TASK_TOKEN_SECRET:-dataops-local-runner-task-token-secret-change-me}
  301. RUNNER_TASK_TOKEN_TTL_SECONDS: 60
  302. RUNNER_DATASOURCE_POOL_SIZE: 1
  303. RUNNER_DATASOURCE_MAX_OVERFLOW: 1
  304. RUNNER_DATASOURCE_MAX_IDLE_POOLS: 4
  305. RUNNER_DATASOURCE_CONNECTION_BUDGET: 32
  306. RUNNER_HTTP_ALLOWED_HOSTS: ${RUNNER_HTTP_ALLOWED_HOSTS:-}
  307. RUNNER_MINIO_HOST: minio:9000
  308. RUNNER_MINIO_USER: dataops-test
  309. RUNNER_MINIO_PASSWORD: dataops-test-password
  310. RUNNER_MINIO_BUCKET: dataops-bucket
  311. RUNNER_MINIO_SECURE: "false"
  312. RUNNER_ARTIFACT_MAX_BYTES: 33554432
  313. RUNNER_ARTIFACT_MAX_ROWS: 100000
  314. RUNNER_ARTIFACT_MEMORY_LIMIT_BYTES: 268435456
  315. RUNNER_ARTIFACT_TTL_SECONDS: 3600
  316. DATABASE_URL: postgresql://dataops:dataops-test-password@postgres:5432/dataops
  317. NEO4J_URI: bolt://neo4j:7687
  318. NEO4J_USER: neo4j
  319. NEO4J_PASSWORD: Passw0rd
  320. DATASOURCE_CREDENTIAL_MASTER_KEY: ${DATASOURCE_CREDENTIAL_MASTER_KEY:-MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWY=}
  321. DATASOURCE_CREDENTIAL_KEY_VERSION: ${DATASOURCE_CREDENTIAL_KEY_VERSION:-v1}
  322. ports:
  323. - "127.0.0.1:${RUNNER_PORT:-15600}:5600"
  324. read_only: true
  325. tmpfs:
  326. - /tmp:size=64m,mode=1777
  327. pids_limit: 128
  328. deploy:
  329. resources:
  330. limits:
  331. cpus: "1.0"
  332. memory: 512M
  333. pids: 128
  334. depends_on:
  335. postgres:
  336. condition: service_healthy
  337. neo4j:
  338. condition: service_healthy
  339. minio-init:
  340. condition: service_completed_successfully
  341. healthcheck:
  342. test:
  343. - CMD
  344. - python
  345. - -c
  346. - import urllib.request; urllib.request.urlopen('http://127.0.0.1:5600/health', timeout=5)
  347. interval: 10s
  348. timeout: 5s
  349. retries: 20
  350. start_period: 20s
  351. networks:
  352. dataops-test-net:
  353. aliases:
  354. - dataops-runner
  355. backend:
  356. image: ${DATAOPS_BACKEND_IMAGE:-dataops-platform-backend:local}
  357. build:
  358. context: ../..
  359. dockerfile: deploy/docker/backend.Dockerfile
  360. environment:
  361. FLASK_ENV: production
  362. LISTEN_HOST: 0.0.0.0
  363. LISTEN_PORT: 5500
  364. GUNICORN_WORKERS: 2
  365. DATABASE_URL: postgresql://dataops:dataops-test-password@postgres:5432/dataops
  366. NEO4J_URI: bolt://neo4j:7687
  367. NEO4J_HTTP_URI: http://neo4j:7474
  368. NEO4J_USER: neo4j
  369. NEO4J_PASSWORD: Passw0rd
  370. NEO4J_ENCRYPTED: "false"
  371. MINIO_HOST: minio:9000
  372. MINIO_USER: dataops-test
  373. MINIO_PASSWORD: dataops-test-password
  374. MINIO_BUCKET: dataops-bucket
  375. MINIO_SECURE: "false"
  376. DATAFLOW_DEFAULT_DB_HOST: postgres
  377. DATAFLOW_DEFAULT_DB_PORT: 5432
  378. DATAFLOW_DEFAULT_DB_NAME: dataops
  379. DATAFLOW_SCHEMA: dags
  380. N8N_API_URL: http://n8n:5678
  381. N8N_API_KEY: ${N8N_API_KEY:-}
  382. KESTRA_BASE_URL: http://kestra:8080/api/v1
  383. KESTRA_TENANT_ID: main
  384. KESTRA_USERNAME: ${KESTRA_USERNAME:-admin@dataops.local}
  385. KESTRA_PASSWORD: ${KESTRA_PASSWORD:-DataOpsKestra1!}
  386. RUNNER_TASK_TOKEN_SECRET: ${RUNNER_TASK_TOKEN_SECRET:-dataops-local-runner-task-token-secret-change-me}
  387. RUNNER_TASK_TOKEN_TTL_SECONDS: 60
  388. DATA_FACTORY_ACTIVATION_ENABLED: ${DATA_FACTORY_ACTIVATION_ENABLED:-false}
  389. API_BASE_URL: http://backend:5500/api
  390. DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}
  391. LLM_BASE_URL: https://api.deepseek.com
  392. LLM_MODEL_NAME: deepseek-chat
  393. KNOWLEDGE_ENABLED: "true"
  394. KNOWLEDGE_LIGHTRAG_ENABLED: ${KNOWLEDGE_LIGHTRAG_ENABLED:-false}
  395. KNOWLEDGE_LIGHTRAG_SHADOW_ONLY: "true"
  396. KNOWLEDGE_LIGHTRAG_BASE_URL: http://lightrag:9621
  397. KNOWLEDGE_LIGHTRAG_API_KEY: ${LIGHTRAG_API_KEY:-local-shadow-only-key}
  398. QWEN_EMBEDDING_BASE_URL: ${QWEN_EMBEDDING_BASE_URL:-}
  399. QWEN_EMBEDDING_API_KEY: ${QWEN_EMBEDDING_API_KEY:-}
  400. QWEN_EMBEDDING_MODEL: ${QWEN_EMBEDDING_MODEL:-text-embedding-v3}
  401. SECRET_KEY: dataops-local-test-secret-key
  402. AUDIT_EVIDENCE_SECRET: ${AUDIT_EVIDENCE_SECRET:-dataops-local-audit-evidence-secret-change-me}
  403. AUDIT_EVIDENCE_KEY_VERSION: ${AUDIT_EVIDENCE_KEY_VERSION:-local-v1}
  404. SECURITY_SIEM_HOST_ALLOWLIST: ${SECURITY_SIEM_HOST_ALLOWLIST:-}
  405. RULE_GENERATION_RECEIPT_SECRET: ${RULE_GENERATION_RECEIPT_SECRET:-}
  406. DATASOURCE_CREDENTIAL_MASTER_KEY: ${DATASOURCE_CREDENTIAL_MASTER_KEY:-MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWY=}
  407. DATASOURCE_CREDENTIAL_KEY_VERSION: ${DATASOURCE_CREDENTIAL_KEY_VERSION:-v1}
  408. LOG_DIR: /app/logs
  409. LOG_TO_CONSOLE: "true"
  410. ports:
  411. - "${BACKEND_PORT:-15500}:5500"
  412. volumes:
  413. - dataops-test-backend-logs:/app/logs
  414. - dataops-test-upload:/data/upload
  415. - dataops-test-archive:/data/archive
  416. depends_on:
  417. postgres:
  418. condition: service_healthy
  419. neo4j:
  420. condition: service_healthy
  421. minio-init:
  422. condition: service_completed_successfully
  423. kestra:
  424. condition: service_healthy
  425. runner:
  426. condition: service_healthy
  427. healthcheck:
  428. test:
  429. - CMD
  430. - python
  431. - -c
  432. - import urllib.request; urllib.request.urlopen('http://127.0.0.1:5500/api/system/health', timeout=5)
  433. interval: 10s
  434. timeout: 10s
  435. retries: 20
  436. start_period: 20s
  437. networks:
  438. - dataops-test-net
  439. lightrag-neo4j:
  440. image: neo4j:5.26-community
  441. profiles:
  442. - knowledge-shadow
  443. environment:
  444. NEO4J_AUTH: neo4j/lightrag-test-password
  445. NEO4J_server_memory_heap_initial__size: 256m
  446. NEO4J_server_memory_heap_max__size: 512m
  447. NEO4J_server_memory_pagecache_size: 256m
  448. volumes:
  449. - dataops-test-lightrag-neo4j:/data
  450. healthcheck:
  451. test: ["CMD-SHELL", "cypher-shell -u neo4j -p lightrag-test-password 'RETURN 1' >/dev/null 2>&1"]
  452. interval: 10s
  453. timeout: 10s
  454. retries: 30
  455. start_period: 20s
  456. networks:
  457. - dataops-test-net
  458. lightrag:
  459. image: ghcr.io/hkuds/lightrag@sha256:67ccf8d9f74eb29da872bf8b3e6513605f5ac601fb0509c5b0ca16d98d2d307d
  460. profiles:
  461. - knowledge-shadow
  462. environment:
  463. HOST: 0.0.0.0
  464. PORT: 9621
  465. WORKSPACE: ${LIGHTRAG_SHADOW_WORKSPACE:-dataops-global-shadow-g1}
  466. LIGHTRAG_API_KEY: ${LIGHTRAG_API_KEY:-local-shadow-only-key}
  467. LIGHTRAG_KV_STORAGE: PGKVStorage
  468. LIGHTRAG_DOC_STATUS_STORAGE: PGDocStatusStorage
  469. LIGHTRAG_VECTOR_STORAGE: PGVectorStorage
  470. LIGHTRAG_GRAPH_STORAGE: Neo4JStorage
  471. POSTGRES_HOST: postgres
  472. POSTGRES_PORT: 5432
  473. POSTGRES_USER: lightrag
  474. POSTGRES_PASSWORD: lightrag-test-password
  475. POSTGRES_DATABASE: dataops_lightrag
  476. POSTGRES_ENABLE_VECTOR: "true"
  477. NEO4J_URI: bolt://lightrag-neo4j:7687
  478. NEO4J_USERNAME: neo4j
  479. NEO4J_PASSWORD: lightrag-test-password
  480. NEO4J_DATABASE: neo4j
  481. LLM_BINDING: openai
  482. LLM_BINDING_HOST: ${LIGHTRAG_LLM_BASE_URL:-https://api.deepseek.com/v1}
  483. LLM_BINDING_API_KEY: ${LIGHTRAG_LLM_API_KEY:-}
  484. LLM_MODEL: ${LIGHTRAG_LLM_MODEL:-deepseek-chat}
  485. EMBEDDING_BINDING: openai
  486. EMBEDDING_BINDING_HOST: ${QWEN_EMBEDDING_BASE_URL:-}
  487. EMBEDDING_BINDING_API_KEY: ${QWEN_EMBEDDING_API_KEY:-}
  488. EMBEDDING_MODEL: ${QWEN_EMBEDDING_MODEL:-text-embedding-v3}
  489. EMBEDDING_DIM: 1024
  490. LIGHTRAG_PARSER: "*:legacy-F"
  491. depends_on:
  492. postgres:
  493. condition: service_healthy
  494. lightrag-neo4j:
  495. condition: service_healthy
  496. healthcheck:
  497. test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:9621/health >/dev/null"]
  498. interval: 10s
  499. timeout: 5s
  500. retries: 30
  501. start_period: 30s
  502. networks:
  503. - dataops-test-net
  504. lightrag-projector:
  505. image: ${DATAOPS_LIGHTRAG_PROJECTOR_IMAGE:-dataops-platform-lightrag-projector:local}
  506. build:
  507. context: ../..
  508. dockerfile: deploy/docker/backend.Dockerfile
  509. profiles:
  510. - knowledge-shadow
  511. command: ["python", "-m", "app.core.knowledge.lightrag.worker"]
  512. environment:
  513. DATABASE_URL: postgresql://dataops:dataops-test-password@postgres:5432/dataops
  514. KNOWLEDGE_LIGHTRAG_BASE_URL: http://lightrag:9621
  515. KNOWLEDGE_LIGHTRAG_API_KEY: ${LIGHTRAG_API_KEY:-local-shadow-only-key}
  516. KNOWLEDGE_LIGHTRAG_TIMEOUT_SECONDS: 15
  517. LIGHTRAG_SHADOW_WORKSPACE: ${LIGHTRAG_SHADOW_WORKSPACE:-dataops-global-shadow-g1}
  518. depends_on:
  519. postgres:
  520. condition: service_healthy
  521. lightrag:
  522. condition: service_healthy
  523. restart: unless-stopped
  524. networks:
  525. - dataops-test-net
  526. frontend:
  527. image: ${DATAOPS_FRONTEND_IMAGE:-dataops-platform-frontend:local}
  528. build:
  529. context: ../..
  530. dockerfile: deploy/docker/frontend.Dockerfile
  531. args:
  532. VUE_APP_N8N_URL: http://localhost:15678
  533. VUE_APP_N8N_CHAT_URL: ""
  534. VUE_APP_MINIO_PUBLIC_URL: http://localhost:19000/dataops-bucket
  535. VUE_APP_PREVIEW_URL: ""
  536. ports:
  537. - "${FRONTEND_PORT:-18183}:80"
  538. depends_on:
  539. backend:
  540. condition: service_healthy
  541. healthcheck:
  542. test: ["CMD-SHELL", "wget --spider -q http://127.0.0.1/"]
  543. interval: 10s
  544. timeout: 5s
  545. retries: 20
  546. networks:
  547. - dataops-test-net
  548. networks:
  549. dataops-test-net:
  550. name: ${DATAOPS_NETWORK_NAME:-dataops-test-net}
  551. volumes:
  552. dataops-test-postgres:
  553. dataops-test-source-postgres:
  554. dataops-test-source-mysql:
  555. dataops-test-neo4j:
  556. dataops-test-minio:
  557. dataops-test-n8n:
  558. dataops-test-kestra:
  559. dataops-test-backend-logs:
  560. dataops-test-upload:
  561. dataops-test-archive:
  562. dataops-test-lightrag-neo4j: