forked from DevOps/deploy.stack
feat(honcho): add honcho self-hosted deployment stack
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
# 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:-text-embedding-3-small}
|
||||
- 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-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}
|
||||
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
|
||||
Reference in New Issue
Block a user