2025-12-03 12:59:43 +08:00
|
|
|
services:
|
|
|
|
|
api:
|
|
|
|
|
build:
|
|
|
|
|
context: .
|
|
|
|
|
dockerfile: docker/api.Dockerfile
|
2026-01-24 12:06:49 +08:00
|
|
|
image: yuxi-api:0.5.prod
|
2025-12-03 12:59:43 +08:00
|
|
|
container_name: api-prod
|
|
|
|
|
working_dir: /app
|
|
|
|
|
networks:
|
|
|
|
|
- app-network
|
|
|
|
|
volumes:
|
|
|
|
|
- ./saves:/app/saves
|
|
|
|
|
extra_hosts:
|
|
|
|
|
- "host.docker.internal:host-gateway"
|
|
|
|
|
env_file:
|
|
|
|
|
- .env.prod
|
|
|
|
|
environment:
|
|
|
|
|
- HOST_IP=${HOST_IP:-}
|
2026-01-22 12:48:52 +08:00
|
|
|
- POSTGRES_URL=${POSTGRES_URL:-postgresql+asyncpg://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-yuxi_know}}
|
2026-02-25 16:26:09 +08:00
|
|
|
- REDIS_URL=${REDIS_URL:-redis://redis:6379/0}
|
|
|
|
|
- RUN_EVENTS_STREAM_TTL_SECONDS=${RUN_EVENTS_STREAM_TTL_SECONDS:-7200}
|
|
|
|
|
- RUN_CANCEL_KEY_TTL_SECONDS=${RUN_CANCEL_KEY_TTL_SECONDS:-1800}
|
2025-12-03 12:59:43 +08:00
|
|
|
- NEO4J_URI=${NEO4J_URI:-bolt://graph:7687}
|
|
|
|
|
- NEO4J_USERNAME=${NEO4J_USERNAME:-neo4j}
|
|
|
|
|
- NEO4J_PASSWORD=${NEO4J_PASSWORD:-0123456789}
|
|
|
|
|
- MILVUS_URI=${MILVUS_URI:-http://milvus:19530}
|
|
|
|
|
- MILVUS_TOKEN=${MILVUS_TOKEN:-}
|
2026-01-20 15:25:50 +08:00
|
|
|
- MILVUS_DB_NAME=${MILVUS_DB_NAME:-default}
|
2026-01-27 20:53:30 +08:00
|
|
|
- MINERU_VL_SERVER=${MINERU_VL_SERVER:-http://mineru-vllm-server:30000}
|
2026-01-28 09:54:15 +08:00
|
|
|
- MINERU_API_URI=${MINERU_API_URI:-http://mineru-api:30001}
|
2025-12-03 12:59:43 +08:00
|
|
|
- PADDLEX_URI=${PADDLEX_URI:-http://paddlex:8080}
|
|
|
|
|
- MINIO_URI=${MINIO_URI:-http://milvus-minio:9000}
|
|
|
|
|
- MODEL_DIR_IN_DOCKER=/models
|
|
|
|
|
- RUNNING_IN_DOCKER=true
|
2026-03-04 08:53:50 +08:00
|
|
|
- SANDBOX_PROVIDER=${SANDBOX_PROVIDER:-provisioner}
|
|
|
|
|
- SANDBOX_PROVISIONER_URL=${SANDBOX_PROVISIONER_URL:-http://sandbox-provisioner:8002}
|
|
|
|
|
- SANDBOX_VIRTUAL_PATH_PREFIX=${SANDBOX_VIRTUAL_PATH_PREFIX:-/mnt/user-data}
|
|
|
|
|
- SANDBOX_EXEC_TIMEOUT_SECONDS=${SANDBOX_EXEC_TIMEOUT_SECONDS:-180}
|
|
|
|
|
- SANDBOX_MAX_OUTPUT_BYTES=${SANDBOX_MAX_OUTPUT_BYTES:-262144}
|
|
|
|
|
- NO_PROXY=localhost,127.0.0.1,milvus,graph,milvus-minio,milvus-etcd,etcd,minio,mineru,paddlex,sandbox-provisioner,api.siliconflow.cn
|
|
|
|
|
- no_proxy=localhost,127.0.0.1,milvus,graph,milvus-minio,milvus-etcd,etcd,minio,mineru,paddlex,sandbox-provisioner,api.siliconflow.cn
|
2025-12-03 12:59:43 +08:00
|
|
|
command: uv run --no-dev uvicorn server.main:app --host 0.0.0.0 --port 5050
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD-SHELL", "curl -f http://localhost:5050/api/system/health || exit 1"]
|
|
|
|
|
interval: 30s
|
|
|
|
|
timeout: 15s
|
|
|
|
|
retries: 8
|
|
|
|
|
start_period: 180s
|
|
|
|
|
depends_on:
|
2026-02-25 16:26:09 +08:00
|
|
|
postgres:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
redis:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
milvus:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
minio:
|
|
|
|
|
condition: service_healthy
|
2026-03-04 08:53:50 +08:00
|
|
|
sandbox-provisioner:
|
|
|
|
|
condition: service_healthy
|
2026-02-25 16:26:09 +08:00
|
|
|
|
|
|
|
|
worker:
|
|
|
|
|
build:
|
|
|
|
|
context: .
|
|
|
|
|
dockerfile: docker/api.Dockerfile
|
|
|
|
|
image: yuxi-api:0.5.prod
|
|
|
|
|
container_name: worker-prod
|
|
|
|
|
working_dir: /app
|
|
|
|
|
networks:
|
|
|
|
|
- app-network
|
|
|
|
|
volumes:
|
|
|
|
|
- ./saves:/app/saves
|
|
|
|
|
extra_hosts:
|
|
|
|
|
- "host.docker.internal:host-gateway"
|
|
|
|
|
env_file:
|
|
|
|
|
- .env.prod
|
|
|
|
|
environment:
|
|
|
|
|
- HOST_IP=${HOST_IP:-}
|
|
|
|
|
- POSTGRES_URL=${POSTGRES_URL:-postgresql+asyncpg://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-yuxi_know}}
|
|
|
|
|
- REDIS_URL=${REDIS_URL:-redis://redis:6379/0}
|
|
|
|
|
- RUN_EVENTS_STREAM_TTL_SECONDS=${RUN_EVENTS_STREAM_TTL_SECONDS:-7200}
|
|
|
|
|
- RUN_CANCEL_KEY_TTL_SECONDS=${RUN_CANCEL_KEY_TTL_SECONDS:-1800}
|
|
|
|
|
- NEO4J_URI=${NEO4J_URI:-bolt://graph:7687}
|
|
|
|
|
- NEO4J_USERNAME=${NEO4J_USERNAME:-neo4j}
|
|
|
|
|
- NEO4J_PASSWORD=${NEO4J_PASSWORD:-0123456789}
|
|
|
|
|
- MILVUS_URI=${MILVUS_URI:-http://milvus:19530}
|
|
|
|
|
- MILVUS_TOKEN=${MILVUS_TOKEN:-}
|
|
|
|
|
- MILVUS_DB_NAME=${MILVUS_DB_NAME:-default}
|
|
|
|
|
- MINERU_VL_SERVER=${MINERU_VL_SERVER:-http://mineru-vllm-server:30000}
|
|
|
|
|
- MINERU_API_URI=${MINERU_API_URI:-http://mineru-api:30001}
|
|
|
|
|
- PADDLEX_URI=${PADDLEX_URI:-http://paddlex:8080}
|
|
|
|
|
- MINIO_URI=${MINIO_URI:-http://milvus-minio:9000}
|
|
|
|
|
- MODEL_DIR_IN_DOCKER=/models
|
|
|
|
|
- RUNNING_IN_DOCKER=true
|
2026-03-04 08:53:50 +08:00
|
|
|
- SANDBOX_PROVIDER=${SANDBOX_PROVIDER:-provisioner}
|
|
|
|
|
- SANDBOX_PROVISIONER_URL=${SANDBOX_PROVISIONER_URL:-http://sandbox-provisioner:8002}
|
|
|
|
|
- SANDBOX_VIRTUAL_PATH_PREFIX=${SANDBOX_VIRTUAL_PATH_PREFIX:-/mnt/user-data}
|
|
|
|
|
- SANDBOX_EXEC_TIMEOUT_SECONDS=${SANDBOX_EXEC_TIMEOUT_SECONDS:-180}
|
|
|
|
|
- SANDBOX_MAX_OUTPUT_BYTES=${SANDBOX_MAX_OUTPUT_BYTES:-262144}
|
|
|
|
|
- NO_PROXY=localhost,127.0.0.1,milvus,graph,milvus-minio,milvus-etcd,etcd,minio,mineru,paddlex,sandbox-provisioner,api.siliconflow.cn
|
|
|
|
|
- no_proxy=localhost,127.0.0.1,milvus,graph,milvus-minio,milvus-etcd,etcd,minio,mineru,paddlex,sandbox-provisioner,api.siliconflow.cn
|
2026-02-25 16:26:09 +08:00
|
|
|
command: uv run --no-dev arq server.worker_main.WorkerSettings
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
depends_on:
|
|
|
|
|
postgres:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
redis:
|
|
|
|
|
condition: service_healthy
|
2025-12-03 12:59:43 +08:00
|
|
|
milvus:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
minio:
|
|
|
|
|
condition: service_healthy
|
2026-03-04 08:53:50 +08:00
|
|
|
sandbox-provisioner:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
|
|
|
|
|
sandbox-provisioner:
|
|
|
|
|
build:
|
|
|
|
|
context: ./docker/sandbox_provisioner
|
|
|
|
|
dockerfile: Dockerfile
|
|
|
|
|
container_name: sandbox-provisioner
|
|
|
|
|
volumes:
|
|
|
|
|
- ./saves:/app/saves
|
|
|
|
|
networks:
|
|
|
|
|
- app-network
|
|
|
|
|
extra_hosts:
|
|
|
|
|
- "host.docker.internal:host-gateway"
|
|
|
|
|
environment:
|
|
|
|
|
- PROVISIONER_BACKEND=${SANDBOX_PROVISIONER_BACKEND:-memory}
|
|
|
|
|
- K8S_NAMESPACE=${SANDBOX_K8S_NAMESPACE:-yuxi-know}
|
|
|
|
|
- SANDBOX_IMAGE=${SANDBOX_IMAGE:-ghcr.io/bytedance/deer-flow-sandbox:latest}
|
|
|
|
|
- SKILLS_HOST_PATH=${SANDBOX_SKILLS_HOST_PATH:-/app/saves/skills}
|
|
|
|
|
- THREADS_HOST_PATH=${SANDBOX_THREADS_HOST_PATH:-/app/saves/threads}
|
|
|
|
|
- NODE_HOST=${SANDBOX_NODE_HOST:-host.docker.internal}
|
|
|
|
|
- KUBECONFIG_PATH=${KUBECONFIG_PATH:-}
|
|
|
|
|
- MEMORY_SANDBOX_URL_TEMPLATE=${MEMORY_SANDBOX_URL_TEMPLATE:-http://agent-sandbox:8000}
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8002/health').read()"]
|
|
|
|
|
interval: 10s
|
|
|
|
|
timeout: 5s
|
|
|
|
|
retries: 6
|
|
|
|
|
start_period: 10s
|
|
|
|
|
restart: unless-stopped
|
2025-12-03 12:59:43 +08:00
|
|
|
|
|
|
|
|
web:
|
|
|
|
|
build:
|
|
|
|
|
context: .
|
|
|
|
|
dockerfile: docker/web.Dockerfile
|
|
|
|
|
target: production
|
2026-01-24 12:06:49 +08:00
|
|
|
image: yuxi-web:0.5.prod
|
2025-12-03 12:59:43 +08:00
|
|
|
container_name: web-prod
|
|
|
|
|
ports:
|
|
|
|
|
- "80:80"
|
|
|
|
|
depends_on:
|
|
|
|
|
- api
|
|
|
|
|
networks:
|
|
|
|
|
- app-network
|
|
|
|
|
environment:
|
|
|
|
|
- NODE_ENV=production
|
|
|
|
|
- VITE_API_URL=http://api:5050
|
2026-02-25 16:26:09 +08:00
|
|
|
- VITE_USE_RUNS_API=${VITE_USE_RUNS_API:-false}
|
2025-12-03 12:59:43 +08:00
|
|
|
command: nginx -g "daemon off;"
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
|
|
|
|
graph:
|
|
|
|
|
image: neo4j:5.26
|
|
|
|
|
container_name: graph
|
|
|
|
|
volumes:
|
|
|
|
|
- ./docker/volumes/neo4j/data:/data
|
|
|
|
|
- ./docker/volumes/neo4j/logs:/var/lib/neo4j/logs
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD-SHELL", "curl -f http://localhost:7474 || exit 1"]
|
|
|
|
|
interval: 20s
|
|
|
|
|
timeout: 10s
|
|
|
|
|
retries: 5
|
|
|
|
|
start_period: 30s
|
|
|
|
|
environment:
|
|
|
|
|
- NEO4J_AUTH=${NEO4J_USERNAME:-neo4j}/${NEO4J_PASSWORD:-0123456789}
|
|
|
|
|
- NEO4J_server_bolt_listen__address=0.0.0.0:7687
|
|
|
|
|
- NEO4J_server_http_listen__address=0.0.0.0:7474
|
|
|
|
|
- ENTITY_EMBEDDING=true
|
|
|
|
|
networks:
|
|
|
|
|
- app-network
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
|
|
|
|
etcd:
|
|
|
|
|
container_name: milvus-etcd
|
|
|
|
|
image: quay.io/coreos/etcd:v3.5.5
|
|
|
|
|
environment:
|
|
|
|
|
- ETCD_AUTO_COMPACTION_MODE=revision
|
|
|
|
|
- ETCD_AUTO_COMPACTION_RETENTION=1000
|
|
|
|
|
- ETCD_QUOTA_BACKEND_BYTES=4294967296
|
|
|
|
|
- ETCD_SNAPSHOT_COUNT=50000
|
|
|
|
|
volumes:
|
|
|
|
|
- ./docker/volumes/milvus/etcd:/etcd
|
|
|
|
|
command: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD", "etcdctl", "endpoint", "health"]
|
|
|
|
|
interval: 60s
|
|
|
|
|
timeout: 30s
|
|
|
|
|
retries: 5
|
|
|
|
|
start_period: 30s
|
|
|
|
|
networks:
|
|
|
|
|
- app-network
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
|
|
|
|
minio:
|
|
|
|
|
container_name: milvus-minio
|
|
|
|
|
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
|
|
|
|
|
environment:
|
|
|
|
|
MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin}
|
|
|
|
|
MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin}
|
|
|
|
|
volumes:
|
|
|
|
|
- ./docker/volumes/milvus/minio:/minio_data
|
|
|
|
|
- ./docker/volumes/milvus/minio_config:/root/.minio
|
|
|
|
|
command: minio server /minio_data --address 0.0.0.0:9000 --console-address 0.0.0.0:9001
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
|
|
|
|
|
interval: 60s
|
|
|
|
|
timeout: 30s
|
|
|
|
|
retries: 5
|
|
|
|
|
start_period: 30s
|
|
|
|
|
networks:
|
|
|
|
|
- app-network
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
|
|
|
|
milvus:
|
|
|
|
|
image: milvusdb/milvus:v2.5.6
|
|
|
|
|
container_name: milvus
|
|
|
|
|
command: ["milvus", "run", "standalone"]
|
|
|
|
|
security_opt:
|
|
|
|
|
- seccomp:unconfined
|
|
|
|
|
environment:
|
|
|
|
|
ETCD_ENDPOINTS: etcd:2379
|
|
|
|
|
MINIO_ADDRESS: minio:9000
|
|
|
|
|
MILVUS_LOG_LEVEL: error
|
|
|
|
|
volumes:
|
|
|
|
|
- ./docker/volumes/milvus/milvus:/var/lib/milvus
|
|
|
|
|
- ./docker/volumes/milvus/logs:/var/lib/milvus/logs
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
|
|
|
|
|
interval: 60s
|
|
|
|
|
start_period: 120s
|
|
|
|
|
timeout: 30s
|
|
|
|
|
retries: 5
|
|
|
|
|
depends_on:
|
|
|
|
|
- "etcd"
|
|
|
|
|
- "minio"
|
|
|
|
|
networks:
|
2026-01-22 12:48:52 +08:00
|
|
|
- app-network
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
|
|
|
|
postgres:
|
|
|
|
|
image: postgres:16
|
|
|
|
|
container_name: postgres
|
|
|
|
|
ports:
|
|
|
|
|
- "5432:5432"
|
|
|
|
|
environment:
|
|
|
|
|
- POSTGRES_USER=${POSTGRES_USER:-postgres}
|
|
|
|
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
|
|
|
|
|
- POSTGRES_DB=${POSTGRES_DB:-yuxi_know}
|
|
|
|
|
- TZ=${TZ:-Asia/Shanghai}
|
|
|
|
|
volumes:
|
|
|
|
|
- ./docker/volumes/postgresql:/var/lib/postgresql/data
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-yuxi_know} || exit 1"]
|
|
|
|
|
interval: 5s
|
|
|
|
|
timeout: 3s
|
|
|
|
|
retries: 30
|
|
|
|
|
networks:
|
2025-12-03 12:59:43 +08:00
|
|
|
- app-network
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
2026-02-25 16:26:09 +08:00
|
|
|
redis:
|
|
|
|
|
image: redis:7-alpine
|
|
|
|
|
container_name: redis
|
|
|
|
|
command: redis-server --appendonly yes
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
|
|
|
interval: 10s
|
|
|
|
|
timeout: 5s
|
|
|
|
|
retries: 10
|
|
|
|
|
volumes:
|
|
|
|
|
- ./docker/volumes/redis:/data
|
|
|
|
|
networks:
|
|
|
|
|
- app-network
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
2025-12-03 12:59:43 +08:00
|
|
|
mineru-vllm-server:
|
|
|
|
|
build:
|
|
|
|
|
context: .
|
|
|
|
|
dockerfile: docker/mineru.Dockerfile
|
|
|
|
|
image: mineru-vllm:latest
|
2026-01-27 16:00:22 +08:00
|
|
|
container_name: mineru-vllm-server
|
2025-12-03 12:59:43 +08:00
|
|
|
profiles:
|
|
|
|
|
- all
|
|
|
|
|
env_file:
|
|
|
|
|
- .env
|
|
|
|
|
environment:
|
|
|
|
|
MINERU_MODEL_SOURCE: local
|
|
|
|
|
entrypoint: mineru-vllm-server
|
|
|
|
|
command:
|
|
|
|
|
--host 0.0.0.0
|
|
|
|
|
--port 30000
|
|
|
|
|
ulimits:
|
|
|
|
|
memlock: -1
|
|
|
|
|
stack: 67108864
|
|
|
|
|
ipc: host
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD-SHELL", "curl -f http://localhost:30000/health || exit 1"]
|
|
|
|
|
deploy:
|
|
|
|
|
resources:
|
|
|
|
|
reservations:
|
|
|
|
|
devices:
|
|
|
|
|
- driver: nvidia
|
|
|
|
|
device_ids: ["0"]
|
|
|
|
|
capabilities: [gpu]
|
|
|
|
|
networks:
|
|
|
|
|
- app-network
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
|
|
|
|
mineru-api:
|
|
|
|
|
build:
|
|
|
|
|
context: .
|
|
|
|
|
dockerfile: docker/mineru.Dockerfile
|
|
|
|
|
image: mineru-vllm:latest
|
|
|
|
|
container_name: mineru-api
|
|
|
|
|
profiles:
|
|
|
|
|
- all
|
|
|
|
|
env_file:
|
|
|
|
|
- .env
|
2026-01-27 20:53:30 +08:00
|
|
|
ports:
|
|
|
|
|
- 30001:30001
|
2025-12-03 12:59:43 +08:00
|
|
|
environment:
|
|
|
|
|
MINERU_MODEL_SOURCE: local
|
|
|
|
|
entrypoint: mineru-api
|
|
|
|
|
command:
|
|
|
|
|
--host 0.0.0.0
|
|
|
|
|
--port 30001
|
|
|
|
|
ulimits:
|
|
|
|
|
memlock: -1
|
|
|
|
|
stack: 67108864
|
|
|
|
|
ipc: host
|
|
|
|
|
restart: unless-stopped
|
2026-01-27 20:53:30 +08:00
|
|
|
networks:
|
|
|
|
|
- app-network
|
2025-12-03 12:59:43 +08:00
|
|
|
|
|
|
|
|
paddlex:
|
|
|
|
|
build:
|
|
|
|
|
context: .
|
|
|
|
|
dockerfile: docker/paddlex.Dockerfile
|
|
|
|
|
image: paddlex:latest
|
|
|
|
|
container_name: paddlex-ocr
|
|
|
|
|
profiles:
|
|
|
|
|
- all
|
|
|
|
|
volumes:
|
|
|
|
|
- ./docker/volumes/paddlex:/paddlex
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"]
|
|
|
|
|
interval: 20s
|
|
|
|
|
timeout: 10s
|
|
|
|
|
retries: 5
|
|
|
|
|
start_period: 60s
|
|
|
|
|
deploy:
|
|
|
|
|
resources:
|
|
|
|
|
reservations:
|
|
|
|
|
devices:
|
|
|
|
|
- driver: nvidia
|
|
|
|
|
device_ids: ['0']
|
|
|
|
|
capabilities: [gpu]
|
|
|
|
|
networks:
|
|
|
|
|
- app-network
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
|
|
|
|
networks:
|
|
|
|
|
app-network:
|
|
|
|
|
driver: bridge
|