服务器版本
在 Kaiwu-server-light(默认使用 SQLite;可选 PGlite)与 Kaiwu-server(Docker 管理的基础设施)之间进行选择。
hstack 支持两种服务端“形态”。你可以全局切换(作用于主栈),也可以按单个栈分别配置。
二者有何区别?
两种形态使用同一套服务端代码库(即 monorepo 中的 server 包,通常为 apps/server),但运行时的后端和存储方案有所不同。
Kaiwu-server-light(推荐默认项)
- 无需 Docker
- 默认使用 SQLite(栈本地文件),支持通过 PGlite 选用内嵌版 Postgres
- 本地公开文件直接保存在栈目录下
- 适合用作稳定的“主”栈,也最适合快速进行本地安装
轻量栈默认彼此隔离:
~/.Kaiwu/stacks/<stack>/server-light/files
~/.Kaiwu/stacks/<stack>/server-light/pglite
~/.Kaiwu/stacks/<stack>/server-light/Kaiwu-server-light.sqlite核心环境变量(保存在栈环境文件中):
Kaiwu_SERVER_LIGHT_DATA_DIRKaiwu_SERVER_LIGHT_FILES_DIRKaiwu_SERVER_LIGHT_DB_DIRKaiwu_DB_PROVIDER(可选;轻量栈默认为sqlite)
可选的数据库提供商(轻量版):
sqlite(默认)pglite(可选)
注意:出于历史兼容原因,即使使用 SQLite,Kaiwu_SERVER_LIGHT_DB_DIR 的默认值也是 .../server-light/pglite。
Kaiwu-server(完整服务端)
- 由 Docker 管理各栈的基础设施(Postgres + Redis + Minio/S3)
- 行为更贴近“生产环境”
- 适合需要 Redis/S3 语义,或需要复现仅在完整服务端下出现的问题时使用
可选的数据库提供商(完整版):
postgres(默认;由 Docker 按栈管理)mysql(支持,但需要显式指定DATABASE_URL;hstack 不会自动置备 MySQL)
选择数据库提供商(高级用户)
你可以直接指定数据库提供商,无需通过交互式向导:
# Light stacks (default is sqlite)
hstack stack new exp-light --server=Kaiwu-server-light --db-provider=sqlite
hstack stack new exp-pglite --server=Kaiwu-server-light --db-provider=pglite
# Full stacks (default is postgres)
hstack stack new exp-full --server=Kaiwu-server --db-provider=postgres
# MySQL requires an explicit DATABASE_URL
hstack stack new exp-mysql --server=Kaiwu-server --db-provider=mysql --database-url=mysql://user:pass@127.0.0.1:3306/Kaiwu该命令底层会在栈环境文件中写入 Kaiwu_DB_PROVIDER。若选用 mysql,还必须提供 DATABASE_URL。
完整服务端基础设施(无需 AWS)
Kaiwu-server 需要依赖:
- Postgres(
DATABASE_URL) - Redis(
REDIS_URL) - S3 兼容的对象存储(
S3_*)
hstack 可以借助 Docker Compose(Postgres + Redis + Minio)按栈自动管理这套基础组件, 因此你无需开通 AWS S3。
运行 hstack start/dev --server=Kaiwu-server 时(或栈使用 Kaiwu-server 时),该流程会自动执行。
除非通过以下命令显式禁用:
export Kaiwu_STACK_MANAGED_INFRA=0若禁用此功能,你必须自行提供 DATABASE_URL、REDIS_URL 和 S3_*。
搭配 Kaiwu-server 托管 UI
上游 Kaiwu-server 本身不托管构建好的前端 UI。
为了提供“单一 URL”的访问体验(尤其搭配 Tailscale 时),hstack 会启动一个轻量的 UI 网关,用于:
- 在
/托管构建好的 UI(若构建产物存在) - 将 API 请求反向代理至后端服务器
- 将实时 WebSocket 协议升级(
/v1/updates)反向代理至后端 - 反向代理公开文件(转发至本地 Minio)
这意味着即使没有 AWS S3 或独立的 nginx 配置,hstack start --server=Kaiwu-server 依然可以开箱即用、完整运行。
实时网络说明(轮询降级策略)
默认情况下,Kaiwu 客户端采用 Socket.IO / Engine.IO 的默认机制(先使用 HTTP 长轮询,条件允许时升级为 WebSocket)。在受限网络和企业代理环境下,这种方式兼容性最好。
如果你需要强制仅使用 WebSocket(极少需要),可设置:
- UI (Expo):
EXPO_PUBLIC_Kaiwu_SOCKET_FORCE_WEBSOCKET=1 - CLI/守护进程:
Kaiwu_SOCKET_FORCE_WEBSOCKET=1
跨形态迁移(轻量版 ⇢ 完整版)
hstack 内置了一个实验性迁移辅助工具,能够将核心聊天数据从
Kaiwu-server-light 栈复制到 Kaiwu-server 栈(Docker Postgres):
hstack migrate light-to-server --from-stack=main --to-stack=full1可选操作:将本地公开文件(server-light 的 files/)同步到 Minio:
hstack migrate light-to-server --from-stack=main --to-stack=full1 --include-files说明:
- 迁移会保留原有 ID(目标服务器上的会话 URL 依然有效)。
- 同时会将源栈的
HANDY_MASTER_SECRET复制到目标栈的密钥文件中,确保认证 Token 持续有效。 - 当前限制:该迁移工具要求源轻量栈必须使用
--db-provider=pglite(暂不支持基于 SQLite 的轻量栈)。
Prisma 行为机制(为何在 LaunchAgents 下 start 更安全)
hstack start更贴近“生产环境”。它可以避免在 launchd KeepAlive 机制下陷入高开销的 schema 同步死循环。hstack dev专为快速迭代设计:- 针对
Kaiwu-server:hstack 默认运行prisma migrate deploy(可通过Kaiwu_STACK_PRISMA_MIGRATE配置)。 - 针对
Kaiwu-server-light:- hstack 会运行对应提供商的轻量迁移(默认对 SQLite 执行
migrate:sqlite:deploy;若配置为 PGlite 则执行migrate:light:deploy)。
- hstack 会运行对应提供商的轻量迁移(默认对 SQLite 执行
- 针对
注意:对于某次具体的运行(hstack start / hstack dev),你只能选择一种形态。
如何切换(主栈)
使用 srv 辅助命令(配置默认持久化在 ~/.Kaiwu/stacks/main/env 中;使用 hstack stack ... 时则持久化在栈环境文件中):
hstack srv status
hstack srv use Kaiwu-server-light
hstack srv use Kaiwu-server
hstack srv use --interactive该命令会持久化保存 Kaiwu_STACK_SERVER_COMPONENT。
如何切换指定栈的形态
使用 stack 包装命令:
hstack stack srv exp1 -- status
hstack stack srv exp1 -- use Kaiwu-server-light
hstack stack srv exp1 -- use Kaiwu-server
hstack stack srv exp1 -- use --interactive这会更新对应的栈环境文件(通常为 ~/.Kaiwu/stacks/⟦K9⟧/env)。
一次性临时覆盖(不持久化)
你可以仅为单次运行临时覆盖服务端形态:
hstack start --server=Kaiwu-server-light
hstack start --server=Kaiwu-server
hstack dev --server=Kaiwu-server-light
hstack dev --server=Kaiwu-server形态选择 vs 代码仓选择
这是两个独立的概念:
- 形态选择:决定 hstack 运行哪种服务端形态
- 由
Kaiwu_STACK_SERVER_COMPONENT控制(通过hstack srv use ...)
- 由
- 代码仓选择:决定栈运行在哪个 monorepo 检出版本/工作树上
- 由
Kaiwu_STACK_REPO_DIR控制(通过hstack wt use .../hstack stack wt ⟦K10⟧ -- use ...)
- 由
SQLite 说明
SQLite 是 Kaiwu-server-light 的默认数据库提供商。如果你希望使用内嵌版 Postgres,创建轻量栈时请指定 --db-provider=pglite。