2026-06-19 14:49:22 +08:00
|
|
|
|
# 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:
|
2026-06-19 17:13:35 +08:00
|
|
|
|
context: ${Volumes_Path}/source
|
2026-06-19 14:49:22 +08:00
|
|
|
|
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
|
2026-06-19 18:39:17 +08:00
|
|
|
|
- DB_CONNECTION_URI=postgresql+psycopg://${HONCHO_DB_USER}:${HONCHO_DB_PASSWORD}@database:5432/${HONCHO_DB_NAME}
|
2026-06-19 17:48:41 +08:00
|
|
|
|
- CACHE_URL=redis://redis:${HONCHO_REDIS_PORT}/0?suppress=true
|
2026-06-19 14:49:22 +08:00
|
|
|
|
- CACHE_ENABLED=true
|
|
|
|
|
|
- LOG_LEVEL=${HONCHO_LOG_LEVEL:-INFO}
|
|
|
|
|
|
- NAMESPACE=${HONCHO_NAMESPACE:-honcho}
|
|
|
|
|
|
- EMBED_MESSAGES=${HONCHO_EMBED_MESSAGES:-true}
|
|
|
|
|
|
- EMBEDDING_MODEL_CONFIG__TRANSPORT=openai
|
2026-06-19 18:26:45 +08:00
|
|
|
|
- EMBEDDING_MODEL_CONFIG__MODEL=${HONCHO_EMBEDDING_MODEL:-Qwen/Qwen3-Embedding-8B}
|
2026-06-19 15:12:50 +08:00
|
|
|
|
- EMBEDDING_MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_EMBEDDING_BASE_URL:-https://api.siliconflow.cn/v1}
|
2026-06-19 18:26:45 +08:00
|
|
|
|
- EMBEDDING_MODEL_CONFIG__OVERRIDES__DIMENSIONS=1536
|
|
|
|
|
|
- EMBEDDING_VECTOR_DIMENSIONS=1536
|
2026-06-19 15:12:50 +08:00
|
|
|
|
- EMBEDDING_API_KEY=${HONCHO_EMBEDDING_API_KEY:-}
|
2026-06-19 14:49:22 +08:00
|
|
|
|
- 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}
|
2026-06-19 18:08:28 +08:00
|
|
|
|
- AUTH_JWT_SECRET=${HONCHO_AUTH_JWT_SECRET}
|
2026-06-19 14:49:22 +08:00
|
|
|
|
- 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
|
2026-06-19 18:39:17 +08:00
|
|
|
|
- "import urllib.request; urllib.request.urlopen('http://localhost:8000/health', timeout=2).read()"
|
2026-06-19 14:49:22 +08:00
|
|
|
|
interval: 10s
|
|
|
|
|
|
timeout: 5s
|
|
|
|
|
|
retries: 10
|
|
|
|
|
|
start_period: 30s
|
|
|
|
|
|
networks:
|
|
|
|
|
|
- honcho-net
|
|
|
|
|
|
|
|
|
|
|
|
deriver:
|
|
|
|
|
|
build:
|
2026-06-19 17:13:35 +08:00
|
|
|
|
context: ${Volumes_Path}/source
|
2026-06-19 14:49:22 +08:00
|
|
|
|
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
|
2026-06-19 18:39:17 +08:00
|
|
|
|
- DB_CONNECTION_URI=postgresql+psycopg://${HONCHO_DB_USER}:${HONCHO_DB_PASSWORD}@database:5432/${HONCHO_DB_NAME}
|
2026-06-19 17:48:41 +08:00
|
|
|
|
- CACHE_URL=redis://redis:${HONCHO_REDIS_PORT}/0?suppress=true
|
2026-06-19 14:49:22 +08:00
|
|
|
|
- CACHE_ENABLED=true
|
|
|
|
|
|
- NAMESPACE=${HONCHO_NAMESPACE:-honcho}
|
|
|
|
|
|
- DERIVER_MODEL_CONFIG__TRANSPORT=openai
|
2026-06-19 15:12:50 +08:00
|
|
|
|
- DERIVER_MODEL_CONFIG__MODEL=${HONCHO_DERIVER_MODEL:-gpt-5.4-mini}
|
2026-06-19 14:49:22 +08:00
|
|
|
|
- DERIVER_WORKERS=${HONCHO_DERIVER_WORKERS:-1}
|
2026-06-19 15:12:50 +08:00
|
|
|
|
- EMBEDDING_MODEL_CONFIG__TRANSPORT=openai
|
2026-06-19 18:26:45 +08:00
|
|
|
|
- EMBEDDING_MODEL_CONFIG__MODEL=${HONCHO_EMBEDDING_MODEL:-Qwen/Qwen3-Embedding-8B}
|
2026-06-19 15:12:50 +08:00
|
|
|
|
- EMBEDDING_MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_EMBEDDING_BASE_URL:-https://api.siliconflow.cn/v1}
|
2026-06-19 18:26:45 +08:00
|
|
|
|
- EMBEDDING_MODEL_CONFIG__OVERRIDES__DIMENSIONS=1536
|
|
|
|
|
|
- EMBEDDING_VECTOR_DIMENSIONS=1536
|
2026-06-19 14:49:22 +08:00
|
|
|
|
- LLM_OPENAI_API_KEY=${HONCHO_LLM_API_KEY:?set HONCHO_LLM_API_KEY}
|
2026-06-19 15:12:50 +08:00
|
|
|
|
- EMBEDDING_API_KEY=${HONCHO_EMBEDDING_API_KEY:-}
|
2026-06-19 14:49:22 +08:00
|
|
|
|
- MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_LLM_BASE_URL:-https://api.openai.com/v1}
|
2026-06-19 18:08:28 +08:00
|
|
|
|
- AUTH_USE_AUTH=${HONCHO_AUTH_USE_AUTH:-false}
|
|
|
|
|
|
- AUTH_JWT_SECRET=${HONCHO_AUTH_JWT_SECRET}
|
2026-06-19 14:49:22 +08:00
|
|
|
|
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:
|
2026-06-19 17:13:35 +08:00
|
|
|
|
driver: bridge
|