forked from DevOps/deploy.stack
8b07e76d67
honcho-deriver dreamer 模块的 deduction/induction specialist 有独立的 model config(src/config.py:1189-1208),默认值 hardcode gpt-5.4-mini + openai SDK 默认 endpoint(api.openai.com/v1)。原 stack.yml 只覆盖了 DERIVER_MODEL_CONFIG 和 EMBEDDING_MODEL_CONFIG,导致 dream cycle 在 国内持续 timeout。 - stack.yml deriver 段显式注入 DEDUCTION_MODEL_CONFIG__* / INDUCTION_MODEL_CONFIG__*(model=deepseek-ai/DeepSeek-V4-Flash, base_url=https://api.siliconflow.cn/v1) - DERIVER_MODEL_CONFIG__OVERRIDES__BASE_URL 同步加上 - env.cfg.example: 同步 HONCHO_DEDUCTION_MODEL / HONCHO_INDUCTION_MODEL 变量;HONCHO_DERIVER_MODEL 默认值从 gpt-5.4-mini 改为 deepseek-ai/DeepSeek-V4-Flash;HONCHO_LLM_BASE_URL 默认从 openai.com 改为 siliconflow.cn 诊断依据:vm61 docker inspect honcho-deriver + logs 显示 src.dreamer.orchestrator 仍在请求 openai/gpt-5.4-mini。 .env.*
174 lines
7.0 KiB
YAML
174 lines
7.0 KiB
YAML
# Honcho Self-Hosted 部署栈
|
||
# ============================================================
|
||
# 部署前准备(仅首次):
|
||
# mkdir -pv ${Volumes_Path}/{pgdata,redis,source}
|
||
# sudo chown -R 999:999 ${Volumes_Path}/pgdata
|
||
# sudo chown -R 999:999 ${Volumes_Path}/redis
|
||
# git clone https://github.com/plastic-labs/honcho.git ${Volumes_Path}/honcho/source
|
||
# cp env.cfg.example env.cfg && $EDITOR env.cfg # 填入密码/API Key
|
||
#
|
||
# pull:: docker compose --env-file ./honcho/env.cfg -f ./honcho/stack.yml pull
|
||
# RUN:: docker compose -p honcho --env-file ./honcho/env.cfg -f ./honcho/stack.yml up -d --build
|
||
# disc::
|
||
# - api/deriver 从 ${Volumes_Path}/honcho/source 源码 build(不是运行时 bind)
|
||
# - DB/Redis 数据 bind 挂到 WSL/Linux 原生 ext4(不能放 /mnt/9P drvfs)
|
||
# - 端口 8000=API, 5432=PG, 6379=Redis,全部绑定 0.0.0.0 供 LAN 访问
|
||
# - 必须设置 HONCHO_LLM_API_KEY(占位符会导致 deriver 反复重启)
|
||
# - deriver 不可省:没它消息能写但不会产生记忆
|
||
# - PG 5432 与 hindsight/dbSer 撞车,通过 HONCHO_DB_PORT 区分
|
||
# ============================================================
|
||
|
||
services:
|
||
api:
|
||
build:
|
||
context: ${Volumes_Path}/source
|
||
dockerfile: Dockerfile
|
||
container_name: honcho-api
|
||
restart: unless-stopped
|
||
entrypoint: ["sh", "docker/entrypoint.sh"]
|
||
depends_on:
|
||
database:
|
||
condition: service_healthy
|
||
redis:
|
||
condition: service_healthy
|
||
ports:
|
||
- "${HONCHO_API_PORT:-8000}:8000"
|
||
environment:
|
||
- TZ=Asia/Shanghai
|
||
- DB_CONNECTION_URI=postgresql+psycopg://${HONCHO_DB_USER}:${HONCHO_DB_PASSWORD}@database:5432/${HONCHO_DB_NAME}
|
||
- CACHE_URL=redis://redis:${HONCHO_REDIS_PORT}/0?suppress=true
|
||
- CACHE_ENABLED=true
|
||
- LOG_LEVEL=${HONCHO_LOG_LEVEL:-INFO}
|
||
- NAMESPACE=${HONCHO_NAMESPACE:-honcho}
|
||
- EMBED_MESSAGES=${HONCHO_EMBED_MESSAGES:-true}
|
||
- EMBEDDING_MODEL_CONFIG__TRANSPORT=openai
|
||
- EMBEDDING_MODEL_CONFIG__MODEL=${HONCHO_EMBEDDING_MODEL:-Qwen/Qwen3-Embedding-8B}
|
||
- EMBEDDING_MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_EMBEDDING_BASE_URL:-https://api.siliconflow.cn/v1}
|
||
- EMBEDDING_MODEL_CONFIG__OVERRIDES__DIMENSIONS=1536
|
||
- EMBEDDING_VECTOR_DIMENSIONS=1536
|
||
- EMBEDDING_API_KEY=${HONCHO_EMBEDDING_API_KEY:-}
|
||
- DERIVER_MODEL_CONFIG__TRANSPORT=openai
|
||
- DERIVER_MODEL_CONFIG__MODEL=${HONCHO_DERIVER_MODEL:-gpt-4o-mini}
|
||
- DERIVER_WORKERS=${HONCHO_DERIVER_WORKERS:-1}
|
||
- LLM_OPENAI_API_KEY=${HONCHO_LLM_API_KEY:?set HONCHO_LLM_API_KEY}
|
||
- MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_LLM_BASE_URL:-https://api.openai.com/v1}
|
||
- AUTH_USE_AUTH=${HONCHO_AUTH_USE_AUTH:-false}
|
||
- AUTH_JWT_SECRET=${HONCHO_AUTH_JWT_SECRET}
|
||
- VECTOR_STORE_TYPE=pgvector
|
||
- VECTOR_STORE_MIGRATED=false
|
||
volumes:
|
||
- /etc/timezone:/etc/timezone:ro
|
||
- /etc/localtime:/etc/localtime:ro
|
||
healthcheck:
|
||
test:
|
||
- CMD
|
||
- /app/.venv/bin/python
|
||
- -c
|
||
- "import urllib.request; urllib.request.urlopen('http://localhost:8000/health', timeout=2).read()"
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 10
|
||
start_period: 30s
|
||
networks:
|
||
- honcho-net
|
||
|
||
deriver:
|
||
build:
|
||
context: ${Volumes_Path}/source
|
||
dockerfile: Dockerfile
|
||
container_name: honcho-deriver
|
||
restart: unless-stopped
|
||
entrypoint: ["/app/.venv/bin/python", "-m", "src.deriver"]
|
||
depends_on:
|
||
api:
|
||
condition: service_healthy
|
||
database:
|
||
condition: service_healthy
|
||
redis:
|
||
condition: service_healthy
|
||
environment:
|
||
- TZ=Asia/Shanghai
|
||
- DB_CONNECTION_URI=postgresql+psycopg://${HONCHO_DB_USER}:${HONCHO_DB_PASSWORD}@database:5432/${HONCHO_DB_NAME}
|
||
- CACHE_URL=redis://redis:${HONCHO_REDIS_PORT}/0?suppress=true
|
||
- CACHE_ENABLED=true
|
||
- NAMESPACE=${HONCHO_NAMESPACE:-honcho}
|
||
- DERIVER_MODEL_CONFIG__TRANSPORT=openai
|
||
- DERIVER_MODEL_CONFIG__MODEL=${HONCHO_DERIVER_MODEL:-deepseek-ai/DeepSeek-V4-Flash}
|
||
- DERIVER_MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_LLM_BASE_URL:-https://api.siliconflow.cn/v1}
|
||
- DEDUCTION_MODEL_CONFIG__TRANSPORT=openai
|
||
- DEDUCTION_MODEL_CONFIG__MODEL=${HONCHO_DEDUCTION_MODEL:-deepseek-ai/DeepSeek-V4-Flash}
|
||
- DEDUCTION_MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_LLM_BASE_URL:-https://api.siliconflow.cn/v1}
|
||
- INDUCTION_MODEL_CONFIG__TRANSPORT=openai
|
||
- INDUCTION_MODEL_CONFIG__MODEL=${HONCHO_INDUCTION_MODEL:-deepseek-ai/DeepSeek-V4-Flash}
|
||
- INDUCTION_MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_LLM_BASE_URL:-https://api.siliconflow.cn/v1}
|
||
- DERIVER_WORKERS=${HONCHO_DERIVER_WORKERS:-1}
|
||
- EMBEDDING_MODEL_CONFIG__TRANSPORT=openai
|
||
- EMBEDDING_MODEL_CONFIG__MODEL=${HONCHO_EMBEDDING_MODEL:-Qwen/Qwen3-Embedding-8B}
|
||
- EMBEDDING_MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_EMBEDDING_BASE_URL:-https://api.siliconflow.cn/v1}
|
||
- EMBEDDING_MODEL_CONFIG__OVERRIDES__DIMENSIONS=1536
|
||
- EMBEDDING_VECTOR_DIMENSIONS=1536
|
||
- LLM_OPENAI_API_KEY=${HONCHO_LLM_API_KEY:?set HONCHO_LLM_API_KEY}
|
||
- EMBEDDING_API_KEY=${HONCHO_EMBEDDING_API_KEY:-}
|
||
- MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_LLM_BASE_URL:-https://api.openai.com/v1}
|
||
- AUTH_USE_AUTH=${HONCHO_AUTH_USE_AUTH:-false}
|
||
- AUTH_JWT_SECRET=${HONCHO_AUTH_JWT_SECRET}
|
||
volumes:
|
||
- /etc/timezone:/etc/timezone:ro
|
||
- /etc/localtime:/etc/localtime:ro
|
||
networks:
|
||
- honcho-net
|
||
|
||
database:
|
||
image: ${HONCHO_DB_IMAGE:-pgvector/pgvector}:pg${HONCHO_DB_VERSION:-18}
|
||
container_name: honcho-database
|
||
restart: unless-stopped
|
||
command: ["postgres", "-c", "max_connections=200"]
|
||
environment:
|
||
- TZ=Asia/Shanghai
|
||
- POSTGRES_USER=${HONCHO_DB_USER}
|
||
- POSTGRES_PASSWORD=${HONCHO_DB_PASSWORD:?set HONCHO_DB_PASSWORD}
|
||
- POSTGRES_DB=${HONCHO_DB_NAME}
|
||
- POSTGRES_HOST_AUTH_METHOD=${POSTGRES_HOST_AUTH_METHOD:-scram-sha-256}
|
||
- POSTGRES_INITDB_ARGS=--encoding=UTF8 --locale=C --auth-host=${POSTGRES_HOST_AUTH_METHOD:-scram-sha-256}
|
||
- PGDATA=/var/lib/postgresql/data/pgdata
|
||
volumes:
|
||
- /etc/timezone:/etc/timezone:ro
|
||
- /etc/localtime:/etc/localtime:ro
|
||
- ${Volumes_Path}/pgdata:/var/lib/postgresql/data
|
||
ports:
|
||
- "${HONCHO_DB_PORT:-5432}:5432"
|
||
healthcheck:
|
||
test:
|
||
- CMD-SHELL
|
||
- pg_isready -U ${HONCHO_DB_USER} -d ${HONCHO_DB_NAME}
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 10
|
||
networks:
|
||
- honcho-net
|
||
|
||
redis:
|
||
image: ${HONCHO_REDIS_IMAGE:-redis}:${HONCHO_REDIS_VERSION:-8}
|
||
container_name: honcho-redis
|
||
restart: unless-stopped
|
||
command: ["redis-server", "--save", "60", "1", "--appendonly", "yes"]
|
||
environment:
|
||
- TZ=Asia/Shanghai
|
||
volumes:
|
||
- /etc/timezone:/etc/timezone:ro
|
||
- /etc/localtime:/etc/localtime:ro
|
||
- ${Volumes_Path}/redis:/data
|
||
ports:
|
||
- "${HONCHO_REDIS_PORT:-6379}:6379"
|
||
healthcheck:
|
||
test: ["CMD-SHELL", "redis-cli ping"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 5
|
||
networks:
|
||
- honcho-net
|
||
|
||
networks:
|
||
honcho-net:
|
||
driver: bridge
|