|
|
||
|---|---|---|
| backend | ||
| bot-images | ||
| design | ||
| frontend | ||
| scripts | ||
| .dockerignore | ||
| .env.prod.example | ||
| .gitignore | ||
| README.md | ||
| docker-compose.prod.yml | ||
README.md
Dashboard Nanobot
Dashboard Nanobot 是面向 nanobot 的控制平面项目,提供镜像管理、引导创建和运行运维能力。
当前实现特性
- 零侵入引擎接入:通过 Docker 容器 + workspace 文件管理,不改 nanobot 源码。
- 镜像登记流:只从
docker images获取本地nanobot-base:*,手工登记后才可用于创建。 - 引导式创建:支持 provider/model 配置、模型连通性测试、标准模型参数配置。
- Bootstrap 文件配置:支持创建时配置并持久化:
AGENTS.mdSOUL.mdUSER.mdTOOLS.mdIDENTITY.md
- 模板管理:系统级模板改为文件化配置(
backend/templates/agent_md_templates.json与backend/templates/topic_presets.json)。 - 2D 运维 Dashboard:Bot 列表、启停、命令发送、日志流、遥测。
- UI 全局支持:Light/Dark 切换、中文/English 切换。
架构概览
graph TD
User((User)) --> Frontend[Frontend Control Plane]
Frontend --> API[FastAPI Backend]
API --> DB[(SQLite)]
API --> Docker[Docker Daemon]
Docker --> BotA[Bot Container A]
Docker --> BotB[Bot Container B]
BotA --> WS[WebSocket State Stream]
BotB --> WS
WS --> Frontend
目录
/dashboard-nanobot
├── backend/
│ ├── core/
│ ├── models/
│ └── main.py
├── frontend/
│ └── src/
├── design/
│ ├── dashboard-nanobot.md
│ ├── architecture.md
│ └── database.md
└── data/
文档
- 技术规范书:
design/dashboard-nanobot.md - 架构设计:
design/architecture.md - 数据库设计:
design/database.md
环境变量配置
- 后端:
- 示例文件:
backend/.env.example - 本地配置:
backend/.env - 关键项:
DATABASE_URL:数据库连接串(三选一:SQLite / PostgreSQL / MySQL)DATABASE_ECHO:SQL 日志输出开关- 不提供自动数据迁移(如需升级迁移请离线完成后再切换连接串)
DATA_ROOT、BOTS_WORKSPACE_ROOT:运行数据与 Bot 工作目录DEFAULT_*_MD:可选覆盖值(一般留空,推荐走模板文件)
- 示例文件:
- 前端:
- 示例文件:
frontend/.env.example - 本地配置:
frontend/.env - 关键项:
VITE_API_BASE:后端 API 地址VITE_WS_BASE:后端 WS 地址
- 示例文件:
创建向导中的 soul_md / agents_md / user_md / tools_md / identity_md
已改为后端统一下发(GET /api/system/defaults),前端不再写死。
Docker 生产部署(推荐)
目标
- 前后端均容器化部署
- 后端 Python 3.12
- 前端由 Nginx 托管静态资源并反代后端 API/WS
- 仅暴露 Nginx 端口(后端不对外暴露)
- 后端容器可通过 Docker Socket 启停 Bot 容器
文件
docker-compose.prod.ymlbackend/Dockerfile(Python 3.12)frontend/Dockerfile(Nginx Web Server)frontend/docker/nginx.conf.env.prod.examplescripts/deploy-prod.shscripts/stop-prod.sh
启动步骤
- 准备部署变量
- 复制
.env.prod.example为.env.prod(位于项目根目录) - 配置绝对路径:
HOST_DATA_ROOTHOST_BOTS_WORKSPACE_ROOT
- 如启用本地语音识别,请将 Whisper
.bin模型文件放到${HOST_DATA_ROOT}/model/并让STT_MODEL指向完整文件名,例如ggml-small-q8_0.bin - 中国网络建议配置加速项:
PIP_INDEX_URL、PIP_TRUSTED_HOSTNPM_REGISTRY- 如需基础镜像加速,覆盖
PYTHON_BASE_IMAGE/NODE_BASE_IMAGE/NGINX_BASE_IMAGE
- 复制
- 启动服务
./scripts/deploy-prod.sh- 或:
docker compose --env-file .env.prod -f docker-compose.prod.yml up -d --build
- 访问
http://<host>:${NGINX_PORT}(默认8080)
关键说明
backend不开放宿主机端口,仅在内部网络被 Nginx 访问。- 上传大小使用单一参数
UPLOAD_MAX_MB控制(后端校验 + Nginx 限制)。 - 必须挂载
/var/run/docker.sock,否则后端无法操作 Bot 镜像与容器。 HOST_BOTS_WORKSPACE_ROOT必须是宿主机绝对路径,并且在docker-compose.prod.yml中以“同路径”挂载到后端容器。 原因:后端通过 Docker API 创建 Bot 容器时,使用的是宿主机可见的 bind 路径。- 语音识别当前基于
pywhispercpp==1.3.1+ Whisper.bin模型文件,不使用faster-whisper。