# 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