2024-10-08 22:16:17 +08:00
services :
api :
build :
2025-04-28 22:53:13 +08:00
context : .
2024-10-08 22:16:17 +08:00
dockerfile : docker/api.Dockerfile
2026-01-24 12:06:49 +08:00
image : yuxi-api:0.5.dev
2024-10-08 22:16:17 +08:00
container_name : api-dev
working_dir : /app
volumes :
2026-03-17 10:16:44 +08:00
- ./backend/server:/app/server
- ./backend/package/yuxi:/app/package/yuxi
2025-04-29 00:04:40 +08:00
- ./saves:/app/saves
2026-03-17 10:16:44 +08:00
- ./backend/test:/app/test
- ./backend/scripts:/app/scripts
2025-10-23 14:08:08 +08:00
- ./.env:/app/.env
2025-05-09 16:10:45 +08:00
- ${MODEL_DIR:-./models}:/models # 使用默认值处理未定义的环境变量
2024-10-08 22:16:17 +08:00
ports :
2025-02-24 11:27:08 +08:00
- "5050:5050"
2024-10-08 22:16:17 +08:00
networks :
- app-network
2025-02-28 14:39:03 +08:00
extra_hosts :
- "host.docker.internal:host-gateway"
2025-06-27 01:55:04 +08:00
env_file :
2025-10-10 18:07:06 +08:00
- .env
2025-10-10 10:49:51 +08:00
# region api_envs
2024-10-08 22:16:17 +08:00
environment :
2025-09-07 20:25:42 +08:00
- 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-06-24 00:16:19 +08:00
- NEO4J_URI=${NEO4J_URI:-bolt://graph:7687}
2025-05-09 16:10:45 +08:00
- NEO4J_USERNAME=${NEO4J_USERNAME:-neo4j}
- NEO4J_PASSWORD=${NEO4J_PASSWORD:-0123456789}
2025-06-24 00:16:19 +08:00
- MILVUS_URI=${MILVUS_URI:-http://milvus:19530}
2026-01-20 15:25:50 +08:00
- MILVUS_DB_NAME=${MILVUS_DB_NAME:-default}
2025-07-18 11:29:12 +08:00
- MILVUS_TOKEN=${MILVUS_TOKEN:-}
2026-01-27 20:53:30 +08:00
- MINERU_VL_SERVER=${MINERU_VL_SERVER:-http://mineru-vllm-server:30000}
2026-01-28 09:53:57 +08:00
- MINERU_API_URI=${MINERU_API_URI:-http://mineru-api:30001}
2025-07-27 02:56:50 +08:00
- PADDLEX_URI=${PADDLEX_URI:-http://paddlex:8080}
2025-06-24 00:16:19 +08:00
- MINIO_URI=${MINIO_URI:-http://milvus-minio:9000}
2025-07-27 04:12:49 +08:00
- MODEL_DIR_IN_DOCKER=/models
2025-02-28 14:39:03 +08:00
- RUNNING_IN_DOCKER=true
2025-10-23 14:08:08 +08:00
- NO_PROXY=localhost,127.0.0.1,milvus,graph,milvus-minio,milvus-etcd-dev,etcd,minio,mineru,paddlex,api.siliconflow.cn
- no_proxy=localhost,127.0.0.1,milvus,graph,milvus-minio,milvus-etcd-dev,etcd,minio,mineru,paddlex,api.siliconflow.cn
2026-03-17 10:16:44 +08:00
- PYTHONPATH=/app/package
2025-10-10 10:49:51 +08:00
# endregion api_envs
2026-01-22 12:48:52 +08:00
command : uv run --no-dev uvicorn server.main:app --host 0.0.0.0 --port 5050 --reload
2025-05-09 16:10:45 +08:00
restart : unless-stopped
2025-06-27 01:55:04 +08:00
healthcheck :
2025-07-22 17:29:38 +08:00
test : [ "CMD-SHELL" , "curl -f http://localhost:5050/api/system/health || exit 1" ]
2025-07-02 02:17:31 +08:00
interval : 30s
timeout : 15s
retries : 8
start_period : 180s
2025-06-20 17:32:49 +08:00
depends_on :
2026-01-21 15:15:52 +08:00
postgres :
condition : service_healthy
2026-02-25 16:26:09 +08:00
redis :
condition : service_healthy
minio :
condition : service_healthy
worker :
build :
context : .
dockerfile : docker/api.Dockerfile
image : yuxi-api:0.5.dev
container_name : worker-dev
working_dir : /app
volumes :
2026-03-17 10:16:44 +08:00
- ./backend/server:/app/server
- ./backend/package/yuxi:/app/package/yuxi
2026-02-25 16:26:09 +08:00
- ./saves:/app/saves
2026-03-17 10:16:44 +08:00
- ./backend/test:/app/test
- ./backend/scripts:/app/scripts
2026-02-25 16:26:09 +08:00
- ./.env:/app/.env
2026-03-17 10:16:44 +08:00
- ./backend/pyproject.toml:/app/pyproject.toml
- ./backend/uv.lock:/app/uv.lock
2026-02-25 16:26:09 +08:00
- ${MODEL_DIR:-./models}:/models
networks :
- app-network
extra_hosts :
- "host.docker.internal:host-gateway"
env_file :
- .env
environment :
- HOST_IP=${HOST_IP:-}
2026-03-19 04:11:30 +08:00
- LITE_MODE=${LITE_MODE:-}
2026-02-25 16:26:09 +08:00
- 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_DB_NAME=${MILVUS_DB_NAME:-default}
- MILVUS_TOKEN=${MILVUS_TOKEN:-}
- 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
- NO_PROXY=localhost,127.0.0.1,milvus,graph,milvus-minio,milvus-etcd-dev,etcd,minio,mineru,paddlex,api.siliconflow.cn
- no_proxy=localhost,127.0.0.1,milvus,graph,milvus-minio,milvus-etcd-dev,etcd,minio,mineru,paddlex,api.siliconflow.cn
2026-03-17 10:16:44 +08:00
- PYTHONPATH=/app/package
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-06-24 00:16:19 +08:00
minio :
condition : service_healthy
2024-10-08 22:16:17 +08:00
web :
build :
2025-04-28 22:53:13 +08:00
context : .
2024-10-08 22:16:17 +08:00
dockerfile : docker/web.Dockerfile
target : development
2026-01-24 12:06:49 +08:00
image : yuxi-web:0.5.dev
2024-10-08 22:16:17 +08:00
container_name : web-dev
volumes :
2025-07-28 19:07:58 +08:00
- ./web/src:/app/src
- ./web/public:/app/public
- ./web/index.html:/app/index.html
- ./web/vite.config.js:/app/vite.config.js
2024-10-08 22:16:17 +08:00
ports :
- "5173:5173"
depends_on :
- api
networks :
- app-network
environment :
- NODE_ENV=development
2025-05-09 16:10:45 +08:00
- VITE_API_URL=http://api:5050
2026-02-25 16:26:09 +08:00
- VITE_USE_RUNS_API=${VITE_USE_RUNS_API:-false}
2026-03-19 04:11:30 +08:00
- VITE_LITE_MODE=${LITE_MODE:-}
2025-04-28 22:53:13 +08:00
command : pnpm run server
2025-05-09 16:10:45 +08:00
restart : unless-stopped
2024-10-08 22:16:17 +08:00
2025-10-10 10:49:51 +08:00
# region neo4j
2024-10-08 22:16:17 +08:00
graph :
2026-03-19 04:11:30 +08:00
profiles :
- full
2025-04-28 16:47:26 +08:00
image : neo4j:5.26
2025-05-23 15:30:14 +08:00
container_name : graph
2024-10-08 22:16:17 +08:00
ports :
- "7474:7474"
- "7687:7687"
volumes :
2025-04-28 23:48:01 +08:00
- ./docker/volumes/neo4j/data:/data
- ./docker/volumes/neo4j/logs:/var/lib/neo4j/logs
2025-06-20 17:32:49 +08:00
healthcheck :
2026-03-17 10:16:44 +08:00
test : [ "CMD-SHELL" , "cypher-shell -a bolt://localhost:7687 -u ${NEO4J_USERNAME:-neo4j} -p ${NEO4J_PASSWORD:-0123456789} 'RETURN 1;' >/dev/null || exit 1" ]
2025-06-20 17:32:49 +08:00
interval : 20s
timeout : 10s
retries : 5
start_period : 30s
2024-10-08 22:16:17 +08:00
environment :
2025-05-09 16:10:45 +08:00
- NEO4J_AUTH=${NEO4J_USERNAME:-neo4j}/${NEO4J_PASSWORD:-0123456789}
2024-10-08 22:16:17 +08:00
- NEO4J_server_bolt_listen__address=0.0.0.0:7687
- NEO4J_server_http_listen__address=0.0.0.0:7474
2025-04-04 18:34:49 +08:00
- ENTITY_EMBEDDING=true
2024-10-08 22:16:17 +08:00
networks :
- app-network
2025-05-09 16:10:45 +08:00
restart : unless-stopped
2025-10-10 10:49:51 +08:00
# endregion neo4j
2024-10-08 22:16:17 +08:00
etcd :
2026-03-19 04:11:30 +08:00
profiles :
- full
2024-10-08 22:16:17 +08:00
container_name : milvus-etcd-dev
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 :
2025-04-28 23:48:01 +08:00
- ./docker/volumes/milvus/etcd:/etcd
2025-10-23 14:08:08 +08:00
command : etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
2024-10-08 22:16:17 +08:00
healthcheck :
test : [ "CMD" , "etcdctl" , "endpoint" , "health" ]
2025-05-09 16:10:45 +08:00
interval : 60s
timeout : 30s
retries : 5
start_period : 30s
2024-10-08 22:16:17 +08:00
networks :
- app-network
2025-05-09 16:10:45 +08:00
restart : unless-stopped
2024-10-08 22:16:17 +08:00
minio :
2025-05-23 15:30:14 +08:00
container_name : milvus-minio
2024-10-08 22:16:17 +08:00
image : minio/minio:RELEASE.2023-03-20T20-16-18Z
environment :
2025-05-09 16:10:45 +08:00
MINIO_ACCESS_KEY : ${MINIO_ACCESS_KEY:-minioadmin}
MINIO_SECRET_KEY : ${MINIO_SECRET_KEY:-minioadmin}
2024-10-08 22:16:17 +08:00
volumes :
2025-04-28 23:48:01 +08:00
- ./docker/volumes/milvus/minio:/minio_data
2025-06-24 00:16:19 +08:00
- ./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
2024-10-08 22:16:17 +08:00
healthcheck :
test : [ "CMD" , "curl" , "-f" , "http://localhost:9000/minio/health/live" ]
2025-05-09 16:10:45 +08:00
interval : 60s
timeout : 30s
retries : 5
start_period : 30s
2025-06-24 00:16:19 +08:00
ports :
- "9000:9000"
- "9001:9001"
2024-10-08 22:16:17 +08:00
networks :
- app-network
2025-05-09 16:10:45 +08:00
restart : unless-stopped
2024-10-08 22:16:17 +08:00
milvus :
2026-03-19 04:11:30 +08:00
profiles :
- full
2025-04-28 16:40:03 +08:00
image : milvusdb/milvus:v2.5.6
2025-05-23 15:30:14 +08:00
container_name : milvus
2024-10-08 22:16:17 +08:00
command : [ "milvus" , "run" , "standalone" ]
security_opt :
- seccomp:unconfined
environment :
ETCD_ENDPOINTS : etcd:2379
MINIO_ADDRESS : minio:9000
2025-05-09 16:10:45 +08:00
MILVUS_LOG_LEVEL : error
2024-10-08 22:16:17 +08:00
volumes :
2025-04-28 23:48:01 +08:00
- ./docker/volumes/milvus/milvus:/var/lib/milvus
- ./docker/volumes/milvus/logs:/var/lib/milvus/logs
2024-10-08 22:16:17 +08:00
healthcheck :
test : [ "CMD" , "curl" , "-f" , "http://localhost:9091/healthz" ]
2025-05-09 16:10:45 +08:00
interval : 60s
start_period : 120s
timeout : 30s
retries : 5
2024-10-08 22:16:17 +08:00
ports :
- "19530:19530"
- "9091:9091"
depends_on :
- "etcd"
- "minio"
networks :
- app-network
2025-05-09 16:10:45 +08:00
restart : unless-stopped
2025-10-24 01:09:24 +08:00
2026-01-21 15:15:52 +08:00
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 :
- 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-06-18 19:07:29 +08:00
# lastest version: wget https://gcore.jsdelivr.net/gh/opendatalab/MinerU@master/docker/compose.yaml
2025-10-24 02:07:31 +08:00
mineru-vllm-server :
2025-05-23 15:30:14 +08:00
build :
2025-06-20 17:32:49 +08:00
context : .
dockerfile : docker/mineru.Dockerfile
2025-10-24 01:09:24 +08:00
image : mineru-vllm:latest
2025-12-18 20:58:48 +08:00
container_name : mineru-vllm-server
2025-06-20 17:32:49 +08:00
profiles :
- all
2025-10-26 18:30:59 +08:00
env_file :
- .env
2025-06-18 19:07:29 +08:00
ports :
- 30000 : 30000
environment :
2025-10-24 01:09:24 +08:00
MINERU_MODEL_SOURCE : local
entrypoint : mineru-vllm-server
2025-06-18 19:07:29 +08:00
command :
--host 0.0.0.0
--port 30000
2025-10-24 01:09:24 +08:00
# parameters for vllm-engine
# --data-parallel-size 2 # If using multiple GPUs, increase throughput using vllm's multi-GPU parallel mode
# --gpu-memory-utilization 0.5 # If running on a single GPU and encountering VRAM shortage, reduce the KV cache size by this parameter, if VRAM issues persist, try lowering it further to `0.4` or below.
2025-06-18 19:07:29 +08:00
ulimits :
memlock : -1
stack : 67108864
ipc : host
healthcheck :
test : [ "CMD-SHELL" , "curl -f http://localhost:30000/health || exit 1" ]
2025-05-23 15:30:14 +08:00
deploy :
resources :
reservations :
devices :
- driver : nvidia
2025-07-27 02:56:50 +08:00
device_ids : [ "0" ]
2025-06-20 17:33:14 +08:00
capabilities : [ gpu]
networks :
- app-network
restart : unless-stopped
2025-10-24 02:07:31 +08:00
mineru-api :
build :
context : .
dockerfile : docker/mineru.Dockerfile
image : mineru-vllm:latest
container_name : mineru-api
profiles :
- all
2025-10-26 18:30:59 +08:00
env_file :
- .env
2025-10-24 02:07:31 +08:00
ports :
- 30001 : 30001
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-10-24 02:07:31 +08:00
2025-06-20 17:33:14 +08:00
paddlex :
build :
context : .
dockerfile : docker/paddlex.Dockerfile
image : paddlex:latest
2025-06-25 14:16:34 +08:00
container_name : paddlex-ocr
2025-06-20 17:33:14 +08:00
profiles :
- all
volumes :
- ./docker/volumes/paddlex:/paddlex
ports :
- "8080:8080"
healthcheck :
2025-08-28 23:08:04 +08:00
test : [ "CMD-SHELL" , "curl -f http://localhost:8080/health || exit 1" ]
2025-06-20 17:33:14 +08:00
interval : 20s
timeout : 10s
retries : 5
start_period : 60s
deploy :
resources :
reservations :
devices :
- driver : nvidia
device_ids : [ '0' ]
2025-05-23 15:30:14 +08:00
capabilities : [ gpu]
networks :
- app-network
restart : unless-stopped
2025-06-17 10:54:45 +08:00
2024-10-08 22:16:17 +08:00
networks :
app-network :
2024-10-23 16:24:09 +08:00
driver : bridge