From 7ae41a8d3dddc51fbba68b906cbe0c1213216e1d Mon Sep 17 00:00:00 2001 From: GuoQing Zhang Date: Wed, 28 May 2025 19:17:40 +0800 Subject: [PATCH] feat: add celery worker container --- docker/bisheng/entrypoint.sh | 17 +++++++++--- docker/docker-compose.yml | 40 +++++++++++++++++++++++++++- src/backend/bisheng/worker/config.py | 4 +++ src/backend/entrypoint.sh | 17 +++++++++--- 4 files changed, 71 insertions(+), 7 deletions(-) diff --git a/docker/bisheng/entrypoint.sh b/docker/bisheng/entrypoint.sh index c5a9affca..d754b4149 100644 --- a/docker/bisheng/entrypoint.sh +++ b/docker/bisheng/entrypoint.sh @@ -1,4 +1,15 @@ -nohup uvicorn bisheng.main:app --host 0.0.0.0 --port 7860 --no-access-log --workers 8 & +#!/bin/bash -# -c 是指定celery的并发数 -celery -A bisheng.worker.main worker -l info -c 16 +start_mode=${1:-api} + +if [ "$start_mode" == "api" ]; then + echo "Starting API server..." + uvicorn bisheng.main:app --host 0.0.0.0 --port 7860 --no-access-log --workers 8 +elif [ "$start_mode" == "celery" ]; then + echo "Starting Celery worker..." + # -c 是指定celery的并发数,线程数 + celery -A bisheng.worker.main worker -l info -c 100 -P threads +else + echo "Invalid start mode. Use 'api' or 'celery'." + exit 1 +fi diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 33c21cd6f..9d287aa4a 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -75,7 +75,45 @@ services: - ${DOCKER_VOLUME_DIRECTORY:-.}/data/bisheng:/app/data security_opt: - seccomp:unconfined - command: sh entrypoint.sh # --workers 表示使用几个进程,提高并发度 + command: sh entrypoint.sh api # 启动api服务 + restart: on-failure + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:7860/health"] + start_period: 30s + interval: 90s + timeout: 30s + retries: 3 + depends_on: + mysql: + condition: service_healthy + redis: + condition: service_healthy + office: + condition: service_started + + backend_worker: + container_name: bisheng-backend-worker + image: dataelement/bisheng-backend:v1.3.0 + environment: + TZ: Asia/Shanghai + BS_MILVUS_CONNECTION_ARGS: '{"host":"milvus","port":"19530","user":"","password":"","secure":false}' + BS_MILVUS_IS_PARTITION: 'true' + BS_MILVUS_PARTITION_SUFFIX: '1' + BS_ELASTICSEARCH_URL: 'http://elasticsearch:9200' + BS_ELASTICSEARCH_SSL_VERIFY: '{}' # 可根据自己部署的密码进行配置 '{"basic_auth": ("elastic", "elastic")}' + BS_MINIO_SCHEMA: 'false' + BS_MINIO_CERT_CHECK: 'false' + BS_MINIO_ENDPOINT: 'minio:9000' + BS_MINIO_SHAREPOIN: 'minio:9000' + BS_MINIO_ACCESS_KEY: 'minioadmin' + BS_MINIO_SECRET_KEY: 'minioadmin' + volumes: + - ${DOCKER_VOLUME_DIRECTORY:-.}/bisheng/config/config.yaml:/app/bisheng/config.yaml + - ${DOCKER_VOLUME_DIRECTORY:-.}/bisheng/entrypoint.sh:/app/entrypoint.sh + - ${DOCKER_VOLUME_DIRECTORY:-.}/data/bisheng:/app/data + security_opt: + - seccomp:unconfined + command: sh entrypoint.sh worker # 启动celery的异步worker服务,用来处理一些耗时的任务 restart: on-failure healthcheck: test: ["CMD", "curl", "-f", "http://localhost:7860/health"] diff --git a/src/backend/bisheng/worker/config.py b/src/backend/bisheng/worker/config.py index 4c2dfd4fe..3ab50c665 100644 --- a/src/backend/bisheng/worker/config.py +++ b/src/backend/bisheng/worker/config.py @@ -7,3 +7,7 @@ result_serializer = 'json' accept_content = ['json'] timezone = 'Asia/Shanghai' enable_utc = False +task_routes = { + 'bisheng.worker.workflow.*': {'queue': 'celery_workflow'}, + 'bisheng.worker.knowledge.*': {'queue': 'celery_knowledge'}, +} diff --git a/src/backend/entrypoint.sh b/src/backend/entrypoint.sh index 31357455f..d754b4149 100755 --- a/src/backend/entrypoint.sh +++ b/src/backend/entrypoint.sh @@ -1,4 +1,15 @@ -nohup uvicorn bisheng.main:app --host 0.0.0.0 --port 7860 --no-access-log --workers 8 & +#!/bin/bash -# -c 是指定celery的并发数,线程数 -celery -A bisheng.worker.main worker -l info -c 100 -P threads +start_mode=${1:-api} + +if [ "$start_mode" == "api" ]; then + echo "Starting API server..." + uvicorn bisheng.main:app --host 0.0.0.0 --port 7860 --no-access-log --workers 8 +elif [ "$start_mode" == "celery" ]; then + echo "Starting Celery worker..." + # -c 是指定celery的并发数,线程数 + celery -A bisheng.worker.main worker -l info -c 100 -P threads +else + echo "Invalid start mode. Use 'api' or 'celery'." + exit 1 +fi