416 lines
17 KiB
YAML
416 lines
17 KiB
YAML
# BaoDan 开发环境 - 使用独立的 PostgreSQL 和 Redis
|
||
# 用法: docker compose -f docker-compose.baodan.yml up -d
|
||
|
||
services:
|
||
# ---- PostgreSQL ----
|
||
db:
|
||
image: pgvector/pgvector:pg15
|
||
environment:
|
||
POSTGRES_DB: ${POSTGRES_DB:-baodan}
|
||
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?请在 .env 文件中设置 POSTGRES_PASSWORD}
|
||
volumes:
|
||
- baodan_pg_data:/var/lib/postgresql/data
|
||
- ./deploy/sql/init.sql:/docker-entrypoint-initdb.d/01-init.sql
|
||
- ./deploy/sql/init-plugin-db.sql:/docker-entrypoint-initdb.d/02-init-plugin-db.sql
|
||
ports:
|
||
- "5433:5432"
|
||
restart: unless-stopped
|
||
|
||
# ---- Redis ----
|
||
redis:
|
||
image: redis:7-alpine
|
||
volumes:
|
||
- baodan_redis_data:/data
|
||
ports:
|
||
- "6380:6379"
|
||
restart: unless-stopped
|
||
|
||
# ---- BaoDan API(自定义镜像,含 insurance Blueprint)----
|
||
baodan-api:
|
||
build:
|
||
context: .
|
||
dockerfile: Dockerfile.dify-custom
|
||
image: baodanagent-api:local
|
||
user: root
|
||
command:
|
||
- gunicorn
|
||
- --bind
|
||
- 0.0.0.0:5001
|
||
- --workers
|
||
- ${INSURANCE_API_WORKERS:-4}
|
||
- --worker-class
|
||
- geventwebsocket.gunicorn.workers.GeventWebSocketWorker
|
||
- --worker-connections
|
||
- ${INSURANCE_API_WORKER_CONNECTIONS:-1000}
|
||
- --timeout
|
||
- "300"
|
||
- --graceful-timeout
|
||
- "30"
|
||
- --keep-alive
|
||
- "5"
|
||
- app:flask_app
|
||
environment: &baodan_api_environment
|
||
DB_TYPE: postgresql
|
||
DB_USERNAME: ${POSTGRES_USER:-postgres}
|
||
DB_PASSWORD: ${POSTGRES_PASSWORD:?请在 .env 文件中设置 POSTGRES_PASSWORD}
|
||
DB_HOST: db
|
||
DB_PORT: 5432
|
||
DB_DATABASE: ${POSTGRES_DB:-baodan}
|
||
SQLALCHEMY_POOL_PRE_PING: ${SQLALCHEMY_POOL_PRE_PING:-true}
|
||
SQLALCHEMY_POOL_RECYCLE: ${SQLALCHEMY_POOL_RECYCLE:-300}
|
||
REDIS_HOST: redis
|
||
REDIS_PORT: 6379
|
||
REDIS_PASSWORD: ""
|
||
REDIS_DB: 0
|
||
CONSOLE_API_URL: ${CONSOLE_API_URL:-http://localhost:5001}
|
||
CONSOLE_WEB_URL: ${CONSOLE_WEB_URL:-http://localhost:3000}
|
||
SERVICE_API_URL: ${SERVICE_API_URL:-http://localhost:5001}
|
||
APP_WEB_URL: ${APP_WEB_URL:-http://localhost:3000}
|
||
FILES_URL: ${FILES_URL:-http://localhost:5001}
|
||
SECRET_KEY: ${SECRET_KEY:?请在 .env 文件中设置 SECRET_KEY}
|
||
INIT_PASSWORD: ${INIT_PASSWORD:?请在 .env 文件中设置 INIT_PASSWORD}
|
||
LOG_LEVEL: ${LOG_LEVEL:-INFO}
|
||
INSURANCE_STORAGE_ROOT: ${INSURANCE_STORAGE_ROOT:-/app/api/storage/insurance}
|
||
POSTER_USER_MANUAL_UPLOAD_ENABLED: ${POSTER_USER_MANUAL_UPLOAD_ENABLED:-true}
|
||
MAIL_TYPE: ${MAIL_TYPE:-}
|
||
MAIL_DEFAULT_SEND_FROM: ${MAIL_DEFAULT_SEND_FROM:-}
|
||
SMTP_SERVER: ${SMTP_SERVER:-}
|
||
SMTP_PORT: ${SMTP_PORT:-587}
|
||
SMTP_USERNAME: ${SMTP_USERNAME:-}
|
||
SMTP_PASSWORD: ${SMTP_PASSWORD:-}
|
||
SMTP_USE_TLS: ${SMTP_USE_TLS:-false}
|
||
SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false}
|
||
RESEND_API_KEY: ${RESEND_API_KEY:-}
|
||
RESEND_API_URL: ${RESEND_API_URL:-}
|
||
SENDGRID_API_KEY: ${SENDGRID_API_KEY:-}
|
||
MIGRATION_ENABLED: "true"
|
||
CELERY_BROKER_URL: redis://redis:6379/1
|
||
# 文件上传限制(取消限制)
|
||
UPLOAD_FILE_BATCH_LIMIT: "99999"
|
||
BATCH_UPLOAD_LIMIT: "99999"
|
||
# 向量数据库配置 - 使用 pgvector(复用 PostgreSQL)
|
||
VECTOR_STORE: pgvector
|
||
PGVECTOR_HOST: db
|
||
PGVECTOR_PORT: 5432
|
||
PGVECTOR_USER: ${POSTGRES_USER:-postgres}
|
||
PGVECTOR_PASSWORD: ${POSTGRES_PASSWORD:?请在 .env 文件中设置 POSTGRES_PASSWORD}
|
||
PGVECTOR_DATABASE: ${POSTGRES_DB:-baodan}
|
||
# 代码执行沙箱
|
||
CODE_EXECUTION_ENDPOINT: http://sandbox:8194
|
||
CODE_EXECUTION_API_KEY: ${CODE_EXECUTION_API_KEY:?请在 .env 文件中设置 CODE_EXECUTION_API_KEY}
|
||
# SSRF 代理
|
||
SSRF_PROXY_HTTP_URL: ""
|
||
SSRF_PROXY_HTTPS_URL: ""
|
||
# 保险模块配置(需在后台创建应用后填入真实 API Key)
|
||
BAODAN_CHAT_API_KEY: ${BAODAN_CHAT_API_KEY:?请在 .env 文件中设置 BAODAN_CHAT_API_KEY}
|
||
BAODAN_WORKFLOW_API_KEY: ${BAODAN_WORKFLOW_API_KEY:?请在 .env 文件中设置 BAODAN_WORKFLOW_API_KEY}
|
||
BAODAN_KB_API_KEY: ${BAODAN_KB_API_KEY:?请在 .env 文件中设置 BAODAN_KB_API_KEY}
|
||
BAODAN_API_URL: "http://baodan-core-api:5001"
|
||
# 智能问答原子准入(灰度开启前先将 MAX_ACTIVE 配为不高于 Dify 有效上限)
|
||
CHAT_GATEWAY_ADMISSION_V1: ${CHAT_GATEWAY_ADMISSION_V1:-false}
|
||
CHAT_GATEWAY_MAX_ACTIVE: ${CHAT_GATEWAY_MAX_ACTIVE:-}
|
||
CHAT_GATEWAY_USER_MAX_ACTIVE: ${CHAT_GATEWAY_USER_MAX_ACTIVE:-1}
|
||
CHAT_GATEWAY_ACQUIRE_TIMEOUT_MS: ${CHAT_GATEWAY_ACQUIRE_TIMEOUT_MS:-3000}
|
||
CHAT_GATEWAY_LEASE_SECONDS: ${CHAT_GATEWAY_LEASE_SECONDS:-180}
|
||
CHAT_GATEWAY_RENEW_SECONDS: ${CHAT_GATEWAY_RENEW_SECONDS:-30}
|
||
CHAT_GATEWAY_RETRY_AFTER: ${CHAT_GATEWAY_RETRY_AFTER:-3}
|
||
CHAT_AGENT_ACCESS_V1: ${CHAT_AGENT_ACCESS_V1:-false}
|
||
CHAT_AGENT_ACCESS_DEFAULT_ALLOW: ${CHAT_AGENT_ACCESS_DEFAULT_ALLOW:-false}
|
||
# 后台生成链路灰度开关
|
||
GENERATION_OUTBOX_V1: ${GENERATION_OUTBOX_V1:-false}
|
||
GENERATION_OUTBOX_PUBLISH_V1: ${GENERATION_OUTBOX_PUBLISH_V1:-false}
|
||
GENERATION_SPLIT_QUEUES_V1: ${GENERATION_SPLIT_QUEUES_V1:-false}
|
||
POSTER_COPY_ASYNC_V1: ${POSTER_COPY_ASYNC_V1:-false}
|
||
MODEL_POOL_V1: ${MODEL_POOL_V1:-false}
|
||
GENERATION_USER_MAX_RUNNING: ${GENERATION_USER_MAX_RUNNING:-2}
|
||
GENERATION_USER_MAX_QUEUED: ${GENERATION_USER_MAX_QUEUED:-20}
|
||
GENERATION_HEARTBEAT_SECONDS: ${GENERATION_HEARTBEAT_SECONDS:-30}
|
||
INSURANCE_CREDENTIAL_MASTER_KEY: ${INSURANCE_CREDENTIAL_MASTER_KEY:-}
|
||
INSURANCE_CREDENTIAL_KEY_VERSION: ${INSURANCE_CREDENTIAL_KEY_VERSION:-1}
|
||
INSURANCE_CREDENTIAL_MASTER_KEYS: ${INSURANCE_CREDENTIAL_MASTER_KEYS:-}
|
||
INSURANCE_METRICS_TOKEN: ${INSURANCE_METRICS_TOKEN:-}
|
||
# 访客模式:true=免登录使用,false=需要登录
|
||
GUEST_MODE: ${GUEST_MODE:-false}
|
||
# 插件服务配置
|
||
PLUGIN_DAEMON_URL: http://plugin_daemon:5002
|
||
PLUGIN_DAEMON_KEY: ${PLUGIN_DAEMON_KEY:?请在 .env 文件中设置 PLUGIN_DAEMON_KEY}
|
||
PLUGIN_DAEMON_TIMEOUT: "600.0"
|
||
# 启用市场(用于安装模型供应商插件)
|
||
MARKETPLACE_ENABLED: "true"
|
||
EXPLORER_ENABLED: "false"
|
||
# CORS 配置(不能用 * 配合 credentials,必须明确列出 origin)
|
||
CONSOLE_CORS_ALLOW_ORIGINS: ${CONSOLE_CORS_ALLOW_ORIGINS:-http://localhost:3000}
|
||
WEB_API_CORS_ALLOW_ORIGINS: ${WEB_API_CORS_ALLOW_ORIGINS:-http://localhost:3000}
|
||
# 自动初始化管理员配置
|
||
ADMIN_EMAIL: ${ADMIN_EMAIL:-admin@example.com}
|
||
ADMIN_NAME: ${ADMIN_NAME:-admin}
|
||
ADMIN_PASSWORD: ${ADMIN_PASSWORD:?请在 .env 文件中设置 ADMIN_PASSWORD}
|
||
ADMIN_WORKSPACE: ${ADMIN_WORKSPACE:-BaoDan Workspace}
|
||
# JWT 配置
|
||
JWT_SECRET: ${JWT_SECRET:?请在 .env 文件中设置 JWT_SECRET}
|
||
JWT_EXPIRE_SECONDS: ${JWT_EXPIRE_SECONDS:-7200}
|
||
# 企微配置(生产环境需替换为真实值)
|
||
# 在企微后台 → 应用管理 → 接收消息 → 设置接收消息服务器 中获取
|
||
WECOM_CORP_ID: ${WECOM_CORP_ID:-} # 企业ID
|
||
WECOM_SECRET: ${WECOM_SECRET:-} # 应用Secret
|
||
WECOM_TOKEN: ${WECOM_TOKEN:-} # 回调Token(自定义)
|
||
WECOM_AES_KEY: ${WECOM_AES_KEY:-} # 消息加密密钥(43位字符)
|
||
# OAuth 回调基础地址(企微后台「网页授权及JS回调域」需与此一致)
|
||
BASE_URL: ${BASE_URL:-http://localhost:5001}
|
||
# 前端地址(OAuth 成功后重定向到前端)
|
||
FRONTEND_URL: ${FRONTEND_URL:-http://localhost:9080}
|
||
# 群机器人 Webhook(用于群聊消息回复,必须配置才能在群里回复消息)
|
||
# 在企微群聊中添加群机器人,获取 Webhook 地址后填入
|
||
WECOM_GROUP_WEBHOOK: ${WECOM_GROUP_WEBHOOK:-} # 群机器人Webhook(必须配置)
|
||
ports:
|
||
- "5001:5001"
|
||
depends_on:
|
||
- db
|
||
- redis
|
||
extra_hosts:
|
||
- "host.docker.internal:host-gateway"
|
||
volumes:
|
||
- baodan_api_storage:/app/api/storage # 持久化 RSA 私钥和上传文件
|
||
- ./api/insurance:/app/api/insurance # 挂载自研代码(开发用,改代码即时生效)
|
||
restart: unless-stopped
|
||
|
||
# ---- BaoDan Core API(Dify /v1 独立进程池,避免与 Insurance SSE 争用 Worker)----
|
||
baodan-core-api:
|
||
build:
|
||
context: .
|
||
dockerfile: Dockerfile.dify-custom
|
||
image: baodanagent-api:local
|
||
user: root
|
||
command:
|
||
- gunicorn
|
||
- --bind
|
||
- 0.0.0.0:5001
|
||
- --workers
|
||
- ${CORE_API_WORKERS:-4}
|
||
- --worker-class
|
||
- geventwebsocket.gunicorn.workers.GeventWebSocketWorker
|
||
- --worker-connections
|
||
- ${CORE_API_WORKER_CONNECTIONS:-1000}
|
||
- --timeout
|
||
- "300"
|
||
- --graceful-timeout
|
||
- "30"
|
||
- --keep-alive
|
||
- "5"
|
||
- app:flask_app
|
||
environment:
|
||
<<: *baodan_api_environment
|
||
MIGRATION_ENABLED: "false"
|
||
BAODAN_API_URL: "http://baodan-core-api:5001"
|
||
depends_on:
|
||
- db
|
||
- redis
|
||
extra_hosts:
|
||
- "host.docker.internal:host-gateway"
|
||
volumes:
|
||
- baodan_api_storage:/app/api/storage
|
||
- ./api/insurance:/app/api/insurance
|
||
restart: unless-stopped
|
||
|
||
# ---- BaoDan Web ----
|
||
baodan-web:
|
||
build:
|
||
context: .
|
||
dockerfile: Dockerfile.web-custom
|
||
environment:
|
||
CONSOLE_API_URL: http://localhost:5001
|
||
CONSOLE_WEB_URL: http://localhost:3000
|
||
SERVICE_API_URL: http://localhost:5001
|
||
APP_API_URL: http://localhost:5001
|
||
APP_WEB_URL: http://localhost:3000
|
||
NEXT_PUBLIC_ALLOW_EMBED: "true"
|
||
NEXT_PUBLIC_APP_URL: http://localhost:3000
|
||
MARKETPLACE_ENABLED: "true"
|
||
MARKETPLACE_URL: https://marketplace.dify.ai
|
||
MARKETPLACE_API_URL: https://marketplace.dify.ai
|
||
ports:
|
||
- "3000:3000"
|
||
depends_on:
|
||
- baodan-api
|
||
restart: unless-stopped
|
||
|
||
# ---- Plugin Daemon ----
|
||
plugin_daemon:
|
||
image: langgenius/dify-plugin-daemon:0.6.1-local
|
||
environment:
|
||
DB_TYPE: postgresql
|
||
DB_USERNAME: ${POSTGRES_USER:-postgres}
|
||
DB_PASSWORD: ${POSTGRES_PASSWORD:?请在 .env 文件中设置 POSTGRES_PASSWORD}
|
||
DB_HOST: db
|
||
DB_PORT: 5432
|
||
DB_DATABASE: dify_plugin
|
||
REDIS_HOST: redis
|
||
REDIS_PORT: 6379
|
||
REDIS_PASSWORD: ""
|
||
REDIS_DB: 0
|
||
SERVER_PORT: 5002
|
||
SERVER_KEY: ${PLUGIN_DAEMON_KEY:?请在 .env 文件中设置 PLUGIN_DAEMON_KEY}
|
||
MAX_PLUGIN_PACKAGE_SIZE: 52428800
|
||
PPROF_ENABLED: "false"
|
||
DIFY_INNER_API_URL: "http://baodan-api:5001"
|
||
DIFY_INNER_API_KEY: ${DIFY_INNER_API_KEY:?请在 .env 文件中设置 DIFY_INNER_API_KEY}
|
||
PLUGIN_REMOTE_INSTALLING_HOST: "0.0.0.0"
|
||
PLUGIN_REMOTE_INSTALLING_PORT: 5003
|
||
PLUGIN_WORKING_PATH: "/app/storage/cwd"
|
||
FORCE_VERIFYING_SIGNATURE: "false"
|
||
PYTHON_ENV_INIT_TIMEOUT: 120
|
||
PLUGIN_MAX_EXECUTION_TIMEOUT: 600
|
||
PLUGIN_STORAGE_TYPE: local
|
||
PLUGIN_STORAGE_LOCAL_ROOT: "/app/storage"
|
||
PLUGIN_INSTALLED_PATH: plugin
|
||
PLUGIN_PACKAGE_CACHE_PATH: plugin_packages
|
||
PLUGIN_MEDIA_CACHE_PATH: assets
|
||
ports:
|
||
- "5002:5002"
|
||
- "5003:5003"
|
||
depends_on:
|
||
- db
|
||
- redis
|
||
volumes:
|
||
- baodan_plugin_data:/app/storage
|
||
restart: unless-stopped
|
||
|
||
# ---- Sandbox (代码执行沙箱,仅供内部 API 调用) ----
|
||
sandbox:
|
||
image: langgenius/dify-sandbox:0.2.15
|
||
restart: always
|
||
environment:
|
||
API_KEY: ${CODE_EXECUTION_API_KEY:?请在 .env 文件中设置 CODE_EXECUTION_API_KEY}
|
||
GIN_MODE: release
|
||
WORKER_TIMEOUT: 15
|
||
ENABLE_NETWORK: "true"
|
||
SANDBOX_PORT: 8194
|
||
volumes:
|
||
- baodan_sandbox_data:/app/storage
|
||
extra_hosts:
|
||
- "host.docker.internal:host-gateway"
|
||
|
||
# ---- BaoDan Worker ----
|
||
baodan-worker:
|
||
build:
|
||
context: .
|
||
dockerfile: Dockerfile.dify-custom
|
||
user: root
|
||
command: celery -A app.celery worker -P gevent -c 1 --loglevel INFO -Q dataset,dataset_summary,priority_dataset,priority_pipeline,pipeline,mail,ops_trace,app_deletion,plugin,workflow_storage,conversation,workflow,schedule_poller,schedule_executor,triggered_workflow_dispatcher,trigger_refresh_executor,retention,workflow_based_app_execution,insurance
|
||
environment:
|
||
MODE: worker
|
||
DB_TYPE: postgresql
|
||
DB_USERNAME: ${POSTGRES_USER:-postgres}
|
||
DB_PASSWORD: ${POSTGRES_PASSWORD:?请在 .env 文件中设置 POSTGRES_PASSWORD}
|
||
DB_HOST: db
|
||
DB_PORT: 5432
|
||
DB_DATABASE: ${POSTGRES_DB:-baodan}
|
||
SQLALCHEMY_POOL_PRE_PING: ${SQLALCHEMY_POOL_PRE_PING:-true}
|
||
SQLALCHEMY_POOL_RECYCLE: ${SQLALCHEMY_POOL_RECYCLE:-300}
|
||
REDIS_HOST: redis
|
||
REDIS_PORT: 6379
|
||
REDIS_PASSWORD: ""
|
||
REDIS_DB: 0
|
||
SECRET_KEY: ${SECRET_KEY:?请在 .env 文件中设置 SECRET_KEY}
|
||
MIGRATION_ENABLED: "false"
|
||
LOG_LEVEL: INFO
|
||
INSURANCE_STORAGE_ROOT: ${INSURANCE_STORAGE_ROOT:-/app/api/storage/insurance}
|
||
POSTER_USER_MANUAL_UPLOAD_ENABLED: ${POSTER_USER_MANUAL_UPLOAD_ENABLED:-true}
|
||
MAIL_TYPE: ${MAIL_TYPE:-}
|
||
MAIL_DEFAULT_SEND_FROM: ${MAIL_DEFAULT_SEND_FROM:-}
|
||
SMTP_SERVER: ${SMTP_SERVER:-}
|
||
SMTP_PORT: ${SMTP_PORT:-587}
|
||
SMTP_USERNAME: ${SMTP_USERNAME:-}
|
||
SMTP_PASSWORD: ${SMTP_PASSWORD:-}
|
||
SMTP_USE_TLS: ${SMTP_USE_TLS:-false}
|
||
SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false}
|
||
RESEND_API_KEY: ${RESEND_API_KEY:-}
|
||
RESEND_API_URL: ${RESEND_API_URL:-}
|
||
SENDGRID_API_KEY: ${SENDGRID_API_KEY:-}
|
||
GENERATION_OUTBOX_V1: ${GENERATION_OUTBOX_V1:-false}
|
||
GENERATION_OUTBOX_PUBLISH_V1: ${GENERATION_OUTBOX_PUBLISH_V1:-false}
|
||
GENERATION_SPLIT_QUEUES_V1: ${GENERATION_SPLIT_QUEUES_V1:-false}
|
||
POSTER_COPY_ASYNC_V1: ${POSTER_COPY_ASYNC_V1:-false}
|
||
MODEL_POOL_V1: ${MODEL_POOL_V1:-false}
|
||
GENERATION_USER_MAX_RUNNING: ${GENERATION_USER_MAX_RUNNING:-2}
|
||
GENERATION_USER_MAX_QUEUED: ${GENERATION_USER_MAX_QUEUED:-20}
|
||
GENERATION_HEARTBEAT_SECONDS: ${GENERATION_HEARTBEAT_SECONDS:-30}
|
||
INSURANCE_CREDENTIAL_MASTER_KEY: ${INSURANCE_CREDENTIAL_MASTER_KEY:-}
|
||
INSURANCE_CREDENTIAL_KEY_VERSION: ${INSURANCE_CREDENTIAL_KEY_VERSION:-1}
|
||
INSURANCE_CREDENTIAL_MASTER_KEYS: ${INSURANCE_CREDENTIAL_MASTER_KEYS:-}
|
||
CELERY_BROKER_URL: redis://redis:6379/1
|
||
SSRF_PROXY_HTTP_URL: ""
|
||
SSRF_PROXY_HTTPS_URL: ""
|
||
PLUGIN_DAEMON_URL: http://plugin_daemon:5002
|
||
PLUGIN_DAEMON_KEY: ${PLUGIN_DAEMON_KEY:?请在 .env 文件中设置 PLUGIN_DAEMON_KEY}
|
||
PLUGIN_DAEMON_TIMEOUT: "600.0"
|
||
# 向量数据库配置 - 使用 pgvector
|
||
VECTOR_STORE: pgvector
|
||
PGVECTOR_HOST: db
|
||
PGVECTOR_PORT: 5432
|
||
PGVECTOR_USER: ${POSTGRES_USER:-postgres}
|
||
PGVECTOR_PASSWORD: ${POSTGRES_PASSWORD:?请在 .env 文件中设置 POSTGRES_PASSWORD}
|
||
PGVECTOR_DATABASE: ${POSTGRES_DB:-baodan}
|
||
depends_on:
|
||
- db
|
||
- redis
|
||
extra_hosts:
|
||
- "host.docker.internal:host-gateway"
|
||
volumes:
|
||
- baodan_api_storage:/app/api/storage # 共享 API 存储(RSA 私钥和上传文件)
|
||
- ./api/insurance:/app/api/insurance # 挂载自研代码(开发用)
|
||
restart: unless-stopped
|
||
|
||
# ---- Insurance 分类 Worker(灰度关闭时空闲,开启后消费新队列)----
|
||
insurance-parse-worker:
|
||
extends:
|
||
service: baodan-worker
|
||
command: celery -A app.celery worker --pool=prefork --concurrency=${INSURANCE_PARSE_CONCURRENCY:-4} --prefetch-multiplier=1 --max-tasks-per-child=100 --loglevel=INFO -Q insurance_parse
|
||
|
||
insurance-copy-worker:
|
||
extends:
|
||
service: baodan-worker
|
||
command: celery -A app.celery worker --pool=prefork --concurrency=${INSURANCE_COPY_CONCURRENCY:-4} --prefetch-multiplier=1 --max-tasks-per-child=100 --loglevel=INFO -Q insurance_copy
|
||
|
||
insurance-image-worker:
|
||
extends:
|
||
service: baodan-worker
|
||
command: celery -A app.celery worker --pool=prefork --concurrency=${INSURANCE_IMAGE_CONCURRENCY:-2} --prefetch-multiplier=1 --max-tasks-per-child=100 --loglevel=INFO -Q insurance_image
|
||
|
||
insurance-render-worker:
|
||
extends:
|
||
service: baodan-worker
|
||
command: celery -A app.celery worker --pool=prefork --concurrency=${INSURANCE_RENDER_CONCURRENCY:-2} --prefetch-multiplier=1 --max-tasks-per-child=100 --loglevel=INFO -Q insurance_render
|
||
|
||
# Outbox 发布器只负责数据库领取和 Broker 发布,不执行重任务。
|
||
insurance-outbox-dispatcher:
|
||
extends:
|
||
service: baodan-worker
|
||
command: python -m insurance.generation.outbox_dispatcher
|
||
|
||
# ---- 保险前端 ----
|
||
baodanagent-web:
|
||
build:
|
||
context: .
|
||
dockerfile: Dockerfile.frontend
|
||
ports:
|
||
- "9080:80"
|
||
ulimits:
|
||
nofile:
|
||
soft: 65535
|
||
hard: 65535
|
||
volumes:
|
||
- ./frontend/dist:/usr/share/nginx/html:ro
|
||
depends_on:
|
||
- baodan-api
|
||
- baodan-core-api
|
||
restart: unless-stopped
|
||
|
||
volumes:
|
||
baodan_pg_data:
|
||
baodan_redis_data:
|
||
baodan_plugin_data:
|
||
baodan_api_storage:
|
||
baodan_sandbox_data:
|