forked from DevOps/deploy.stack
9c08233d4e
- embedding 默认走 SiliconFlow Qwen3-Embedding-0.6B(独立 base URL) - env.cfg.example 加 Ollama 备选注释块(host.docker.internal:11434) - stack.yml api+deriver 双服务 EMBEDDING_* 配置同步 - api 段 EMBEDDING_API_KEY 用 :- 默认空,兼容 Ollama 无 key 场景 - readme Mermaid 架构图加 siliconflow + ollama 节点 - HONCHO_DERIVER_MODEL 默认值 gpt-4o-mini → gpt-5.4-mini(与上游对齐)
161 lines
6.1 KiB
YAML
161 lines
6.1 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}/honcho/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:6379/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-0.6B}
|
||
- EMBEDDING_MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_EMBEDDING_BASE_URL:-https://api.siliconflow.cn/v1}
|
||
- EMBEDDING_VECTOR_DIMENSIONS=1024
|
||
- 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}
|
||
- 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}/honcho/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:6379/0?suppress=true
|
||
- CACHE_ENABLED=true
|
||
- NAMESPACE=${HONCHO_NAMESPACE:-honcho}
|
||
- DERIVER_MODEL_CONFIG__TRANSPORT=openai
|
||
- DERIVER_MODEL_CONFIG__MODEL=${HONCHO_DERIVER_MODEL:-gpt-5.4-mini}
|
||
- DERIVER_WORKERS=${HONCHO_DERIVER_WORKERS:-1}
|
||
- EMBEDDING_MODEL_CONFIG__TRANSPORT=openai
|
||
- EMBEDDING_MODEL_CONFIG__MODEL=${HONCHO_EMBEDDING_MODEL:-Qwen/Qwen3-Embedding-0.6B}
|
||
- EMBEDDING_MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_EMBEDDING_BASE_URL:-https://api.siliconflow.cn/v1}
|
||
- EMBEDDING_VECTOR_DIMENSIONS=1024
|
||
- 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}
|
||
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 |