Files
beaver_project/app-instance
steven_li 344aee93fa feat(nanobot-web): 添加会话创建接口并优化前端会话管理
- 新增 POST /api/sessions/{key} 接口用于立即创建或持久化会话
- 提取 _serialize_session_detail 函数以统一会话数据序列化逻辑
- 前端添加 createSession API 调用函数
- 实现本地存储中的会话ID持久化功能
- 优化 ChatPage 组件中的会话切换逻辑,确保状态正确重置
- 在消息处理中添加会话ID验证,避免跨会话消息混乱
- 新建会话时主动调用创建API并刷新会话列表
2026-03-16 17:37:25 +08:00
..
2026-03-13 16:40:08 +08:00
2026-03-13 16:40:08 +08:00
2026-03-13 16:40:08 +08:00
2026-03-13 16:40:08 +08:00
2026-03-13 16:40:08 +08:00
2026-03-13 16:40:08 +08:00
2026-03-13 16:40:08 +08:00
2026-03-13 16:40:08 +08:00

app-instance

单实例应用单元:

  • 一个 Docker 容器里同时运行前端、后端和 Nginx 反代
  • 前端走 /
  • 后端 API 走 /api
  • WebSocket 走 /ws

关键文件

  • Dockerfile
    • 统一镜像构建入口
  • entrypoint.sh
    • 容器内启动前端、后端、Nginx
  • create-instance.sh
    • 创建实例目录、生成配置、启动容器、写注册表
  • remove-instance.sh
    • 删除容器、移除注册表、可选清理实例目录
  • list-instances.sh
    • 查看当前注册实例
  • instance-registry.py
    • 维护 runtime/registry/instances.json

注册表

默认注册表路径:

runtime/registry/instances.json

每条记录至少包含:

  • instance_id
  • instance_slug
  • container_name
  • host_port
  • public_url
  • instance_root
  • image_name

常用命令

1. 构建镜像

docker build -t nano/app-instance:latest .

2. 创建实例

./create-instance.sh \
  --image nano/app-instance:latest \
  --instance-id demo-001 \
  --auth-username admin \
  --auth-password 123456 \
  --api-key 'your-api-key'

可选参数:

  • --host-port
  • --public-url
  • --username
  • --email
  • --instance-host
  • --authz-base-url
  • --backend-id
  • --client-id
  • --client-secret
  • --network
  • --host-bind-ip
  • --build
  • --replace

3. 查看实例

./list-instances.sh
./list-instances.sh --json

4. 删除实例

./remove-instance.sh --instance-id demo-001

如果要把实例目录也一并清掉:

./remove-instance.sh --instance-id demo-001 --purge-data

目录约定

默认实例数据目录:

runtime/instances/<instance-slug>/

其中会生成:

runtime/instances/<instance-slug>/
└── nanobot-home
    ├── config.json
    ├── web_auth_users.json
    └── workspace/

当前状态

这层已经支持:

  • 统一镜像构建
  • 实例创建
  • 实例删除
  • 实例列表
  • 基于注册表的端口分配
  • 为 deploy-control / router-proxy 记录用户名和实例 host

生产注意

  • 实例容器的宿主机端口默认只绑定 127.0.0.1
  • 外部访问应统一走 router-proxy
  • 如果你确实要把单个实例端口直接暴露到公网,再显式传 --host-bind-ip 0.0.0.0

下一步可以继续接:

  • portal 调用创建实例
  • URL 分配和反向代理
  • 实例续期 / 停用 / 启用