dashboard-nanobot/offline
AlanPaine abf851eded feat(offline): 添加离线部署方案及相关脚本
添加完整的离线部署方案,包括:
1. 构建和导出镜像的脚本
2. 生产环境和完整环境的部署脚本
3. 数据库初始化脚本
4. 相关文档说明
5. 客户侧部署工具链
2026-05-09 17:21:24 +08:00
..
README.md feat(offline): 添加离线部署方案及相关脚本 2026-05-09 17:21:24 +08:00
deploy-full-offline.sh feat(offline): 添加离线部署方案及相关脚本 2026-05-09 17:21:24 +08:00
deploy-prod-offline.sh feat(offline): 添加离线部署方案及相关脚本 2026-05-09 17:21:24 +08:00
docker-compose.full.yml feat(offline): 添加离线部署方案及相关脚本 2026-05-09 17:21:24 +08:00
docker-compose.prod.yml feat(offline): 添加离线部署方案及相关脚本 2026-05-09 17:21:24 +08:00
export-offline-bundle.sh feat(offline): 添加离线部署方案及相关脚本 2026-05-09 17:21:24 +08:00
init-full-db-offline.sh feat(offline): 添加离线部署方案及相关脚本 2026-05-09 17:21:24 +08:00
init-prod-db-offline.sh feat(offline): 添加离线部署方案及相关脚本 2026-05-09 17:21:24 +08:00

README.md

Offline 打包与部署说明

这套离线方案只放在 offline/ 目录,不改项目原有部署脚本。

仓库内文件

  • offline/export-offline-bundle.sh
  • offline/deploy-prod-offline.sh
  • offline/deploy-full-offline.sh
  • offline/init-full-db-offline.sh
  • bot-images/build.sh
  • bot-images/README.md

1. 如何打包

完整模式:

./offline/export-offline-bundle.sh --mode full

生产模式:

./offline/export-offline-bundle.sh --mode prod

可选参数:

./offline/export-offline-bundle.sh --mode full --env-file .env.full --output-dir offline-dist

说明:

  • full 会导出 backendnginxpostgresredis 镜像。
  • prod 只导出 backendnginx 镜像,数据库和 Redis 由客户自己提供。
  • 导出产物默认放在 offline-dist/

2. 打包后会生成什么

每次导出会得到一个目录和一个压缩包,例如:

offline-dist/dashboard-nanobot-full-offline-YYYYMMDD_HHMMSS/
offline-dist/dashboard-nanobot-full-offline-YYYYMMDD_HHMMSS.tar.gz

产物根目录主要包含:

  • docker-compose.yml
  • .env
  • import-images.sh
  • init-db.sh
  • start.sh
  • stop.sh
  • README.txt

其中导出的 docker-compose.yml 会带中文注释,方便客户直接按注释修改端口、挂载路径、数据库与 Redis 配置。

此外还会带上:

  • offline/ 内部离线脚本
  • sql/ 数据库初始化 SQL
  • data/templates/
  • data/skills/
  • data/model/

也就是说,发给客户的是一套部署产物,不需要把源码仓库一起发过去。

3. 客户如何部署

客户拿到压缩包后按下面做:

tar -xzf dashboard-nanobot-full-offline-YYYYMMDD_HHMMSS.tar.gz
cd dashboard-nanobot-full-offline-YYYYMMDD_HHMMSS
./import-images.sh

如果你还另外给了客户 nanobot-base-v0.1.5.tar.gz 这类 Bot 基础镜像包,也需要先导入:

gunzip -c nanobot-base-v0.1.5.tar.gz | docker load

然后修改:

  • .env
  • 如果要改挂载路径,再改 docker-compose.yml

再初始化数据库:

./init-db.sh

最后启动:

./start.sh

停止:

./stop.sh

4. 客户主要改哪些配置

.env 里通常需要改:

  • PUBLIC_HOST
  • NGINX_PORT
  • HOST_BOTS_WORKSPACE_ROOT
  • DOCKER_NETWORK_SUBNET
  • PANEL_ACCESS_PASSWORD

prod 模式额外常改:

  • DATABASE_URL
  • REDIS_ENABLED
  • REDIS_URL

full 模式额外常改:

  • POSTGRES_SUPERPASSWORD
  • POSTGRES_APP_PASSWORD

5. 挂载路径怎么改

默认挂载关系在导出产物里的 docker-compose.yml

  • ./data:/app/data
  • ${HOST_BOTS_WORKSPACE_ROOT}:${HOST_BOTS_WORKSPACE_ROOT}
  • /var/run/docker.sock:/var/run/docker.sock

如果客户现场要换宿主机路径,直接改产物里的:

  • .env 中的 HOST_BOTS_WORKSPACE_ROOT
  • docker-compose.yml 中的 volume 挂载项

建议:

  • HOST_BOTS_WORKSPACE_ROOT 必须是宿主机绝对路径
  • 保留 /var/run/docker.sock:/var/run/docker.sock
  • ./data 最好保留在产物目录下,方便整体交付

6. 数据库说明

prod 模式:

  • 客户需要提前准备 PostgreSQL
  • 推荐直接执行:
    • ./init-db.sh
  • 这个脚本会自动使用 .env 里的 DATABASE_URL 执行 sql/create-tables.sqlsql/init-data.sql
  • 如果客户想手工执行,也可以执行:
    • sql/create-tables.sql
    • sql/init-data.sql

full 模式:

  • 产物里包含 PostgreSQL 和 Redis 镜像
  • ./init-db.sh 可以手工初始化数据库
  • start.sh 启动完整栈时也会自动初始化数据库

7. Bot 基础镜像说明

  • 离线部署包里的 ./import-images.sh 只负责导入当前离线包自带的业务镜像。
  • 如果客户现场还需要运行依赖 nanobot-base 的 Bot 容器,则还需要额外导入单独提供的 nanobot-base-*.tar.gz
  • 导入命令:
gunzip -c nanobot-base-v0.1.5.tar.gz | docker load
  • 如果没有导入这类镜像Dashboard 主服务可以启动,但相关 Bot 运行时容器可能会因为缺少基础镜像而启动失败。

8. 看哪份文档

  • 研发/打包同学看本文件:offline/README.md
  • 客户部署时看导出产物根目录里的:README.txt
  • 如果要单独构建和导出 nanobot-base 镜像,看:bot-images/README.md