- 将所有环境变量前缀从NANO_改为BEAVER_ - 更新README.md文档内容,包括项目介绍、组件说明和快速开始指南 - 修改.gitignore文件,添加auth-portal运行时路径排除规则 - 更新app-instance镜像标签从nano/app-instance改为beaver/app-instance - 增强技能安全检查器,支持工具前缀白名单功能 - 添加技能草稿重新检查安全性API端点 - 扩展证据选择器,收集工具调用名称用于技能学习 - 改进技能合成器,基于实际调用的工具生成工具提示 - 优化路由超时处理机制,增加重试逻辑 - 更新后端架构文档,添加可视化入口和基础概念说明 - 实现在WebSocket消息中传递工具迭代次数信息
153 lines
2.8 KiB
Markdown
153 lines
2.8 KiB
Markdown
# 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`
|
||
|
||
## 注册表
|
||
|
||
默认注册表路径:
|
||
|
||
```text
|
||
runtime/registry/instances.json
|
||
```
|
||
|
||
每条记录至少包含:
|
||
|
||
- `instance_id`
|
||
- `instance_slug`
|
||
- `container_name`
|
||
- `host_port`
|
||
- `public_url`
|
||
- `instance_root`
|
||
- `image_name`
|
||
|
||
## 常用命令
|
||
|
||
### 1. 构建镜像
|
||
|
||
```bash
|
||
docker build -t beaver/app-instance:latest .
|
||
```
|
||
|
||
### 2. 创建实例
|
||
|
||
```bash
|
||
./create-instance.sh \
|
||
--image beaver/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. 查看实例
|
||
|
||
```bash
|
||
./list-instances.sh
|
||
./list-instances.sh --json
|
||
```
|
||
|
||
### 4. 删除实例
|
||
|
||
```bash
|
||
./remove-instance.sh --instance-id demo-001
|
||
```
|
||
|
||
如果要把实例目录也一并清掉:
|
||
|
||
```bash
|
||
./remove-instance.sh --instance-id demo-001 --purge-data
|
||
```
|
||
|
||
## 目录约定
|
||
|
||
默认实例数据目录:
|
||
|
||
```text
|
||
runtime/instances/<instance-slug>/
|
||
```
|
||
|
||
其中会生成:
|
||
|
||
```text
|
||
runtime/instances/<instance-slug>/
|
||
└── beaver-home
|
||
├── config.json
|
||
├── web_auth_users.json
|
||
└── workspace/
|
||
```
|
||
|
||
这个目录是单用户 sandbox 的配置与数据边界。容器内会把它挂到:
|
||
|
||
```text
|
||
/root/.beaver/
|
||
```
|
||
|
||
并设置:
|
||
|
||
```text
|
||
BEAVER_CONFIG_PATH=/root/.beaver/config.json
|
||
BEAVER_WORKSPACE=/root/.beaver/workspace
|
||
```
|
||
|
||
所以模型 `provider/api_key/api_base/model` 配一次即可,Web / channel 请求不需要、也不应该携带 API Key。
|
||
|
||
## 当前状态
|
||
|
||
这层已经支持:
|
||
|
||
- 统一镜像构建
|
||
- 镜像内安装并启动新的 `beaver` 后端
|
||
- 实例创建
|
||
- 实例删除
|
||
- 实例列表
|
||
- 基于注册表的端口分配
|
||
- 为 deploy-control / router-proxy 记录用户名和实例 host
|
||
|
||
## 生产注意
|
||
|
||
- 实例容器的宿主机端口默认只绑定 `127.0.0.1`
|
||
- 外部访问应统一走 `router-proxy`
|
||
- 如果你确实要把单个实例端口直接暴露到公网,再显式传 `--host-bind-ip 0.0.0.0`
|
||
|
||
下一步可以继续接:
|
||
|
||
- portal 调用创建实例
|
||
- URL 分配和反向代理
|
||
- 实例续期 / 停用 / 启用
|