✨ 面向 NoneBot 多实例运维的 WebUI ✨
这是一个基于 NoneBot WebUI 深度二改的项目,重点面向 NAS、Docker、WSL 和长期运行场景。
它更偏向“机器人实例运维面板”,而不只是原版 nb-cli 的简单图形封装,核心目标是:
pyproject.toml、.env、.env.prod 以及实例目录文件.venvClassic / Frost / Paper / Midnight如果你主要是部署到 NAS、Docker 或 WSL,直接使用 Docker Hub 镜像就行:
docker.io/xisoul/nonebot-webui:latestdocker.io/xisoul/nonebot-webui:masterdocker.io/xisoul/nonebot-webui:${version}推荐优先使用显式版本号,例如 0.4.8,后面做升级、回滚、版本检测会更方便。
如果你明确是本机直接运行 nb-cli,也可以走插件安装方式:
nb self install nb-cli-plugin-webui-xisoul
推荐最少保留这几项挂载:
docker run -d \
--name nonebot-webui \
--restart=always \
--network host \
-e HOST=0.0.0.0 \
-e PORT=18080 \
-e WEBUI_DATA_DIR=/data \
-e WEBUI_CONFIG_DIR=/data \
-e WEBUI_CACHE_DIR=/data \
-v /home/xisoul/nonebot-webui-data/projects:/projects \
-v /home/xisoul/nonebot-webui-external-projects:/external-projects \
# 挂载你本地的NoneBot项目目录到容器内,容器会自动扫描并添加所有项目
-v /path/to/your/nonebot/projects:/opt/nonebot-projects \
-v /home/xisoul/nonebot-webui-data:/data \
xisoul/nonebot-webui:latest
你可以把宿主机上任意目录下的所有NoneBot项目,通过挂载到容器的/opt/nonebot-projects目录来实现自动接入:
也可以直接使用仓库里的 docker-compose.yml。
只需要记住:
/projects 给 WebUI 新建实例使用/external-projects 给宿主机 / NAS 里已经存在的实例使用/data 给 WebUI 运行期状态使用,包括 config.json、project.json、缓存和日志等可变数据;生产环境只需要把宿主机数据目录挂载到 /data/app/config.json 或 /app/project.json 挂出来,新版本启动时会在 /data 还没有对应文件时自动兼容复制一次,避免已有登录凭证和实例列表丢失VOLUME,避免 NAS / Docker Desktop 自动带出误导性的默认挂载项/data、/projects、/external-projects 以及你额外挂载的实例目录仓库自带的 docker-compose.yml 现在也包含了 watchtower 自动更新方案:
xisoul/nonebot-webui:latestnonebot-webui 容器如果你不想自动更新,可以删掉 compose 里的 watchtower 服务。
Docker / NAS 场景下请区分“宿主机路径”和“容器内路径”:
/vol1/1000/nonebot/projects、/external-projects不要把容器内路径也写成宿主机路径,例如:
/vol1/1000/nonebot -> /vol1/1000/nonebot推荐映射方式:
宿主机目录 -> /projects宿主机目录 -> /external-projects群晖 / NAS 常见示例:
/vol1/1000/nonebot/vol1/1000/nonebot -> /external-projects如果你还需要让 WebUI 自己创建新实例,再单独准备一块目录映射到 /projects 即可。
添加已有实例时,实例路径支持以下几种写法:
3998382152external-projects/3998382152/external-projects/3998382152WebUI 会自动把它解析并保存为容器内的真实绝对路径。
如果当前是 Docker / NAS 部署,不要填写宿主机自己的物理路径,例如:
/vol1/.../volume1/.../home/...这些路径对容器里的 WebUI 来说是不可见的,必须填写容器内路径。
另外,添加的目录本身需要是一个 NoneBot 项目根目录,至少应当能看到 pyproject.toml。如果 pyproject.toml 在子目录里,就填写那个子目录,不要填到父目录。
本镜像已内置 WebUI 预装 nonebot_plugin_htmlrender / Playwright Chromium 常见所需的 Linux 运行库。
另外,镜像也会安装常见中文字体包,用于修复 NAS / Docker 场景下 Playwright 截图网页时中文变方块的问题。
如果你之前已经拉取过旧镜像,更新代码后需要重新构建或重新拉取镜像,否则容器里的浏览器字体环境不会自动变化。
如果你的外部项目依赖 Playwright,WebUI 在启动实例前会优先尝试用该项目自己的 Python 环境执行:
python -m playwright install chromium
浏览器二进制仍然安装在实例运行时可见的目录里,不会直接打进项目仓库。 如果你的网络环境使用 SOCKS 代理,WebUI 会继续保留实例代理环境用于下载 Chromium,但系统库仍然依赖当前 WebUI 容器镜像提供。
首次启动容器后,请先去查看容器日志里的登录凭证(token),再用它登录 WebUI。
例如:
docker logs nonebot-webui
如果你在群晖 Docker 管理界面中部署,也同样需要到“容器日志”里查看首次生成的 token。
登录流程是:
因此,登录凭证本身不是直接拿来当 Authorization: Bearer ... 用的。
如果后面你在”安全设置”里改成随机 token 模式,新 token 也会继续写到容器日志里。
永久 token 模式下,只要 /data/config.json 中的认证字段仍然完整,后续重启不会自动换 token。
如果配置文件损坏或字段缺失,程序现在会直接报错提示你修复配置,而不是静默重新生成一个新 token。
如果忘记了登录密码,可以在 Docker 容器内执行以下命令重置:
docker exec -it nonebot-webui python -m nb_cli_plugin_webui.scripts reset_token
执行后会直接在终端输出新密码,请注意保存:
============================================================
WebUI login token has been reset successfully.
============================================================
Your new token is:
abc123
ATTENTION: Token is only shown once. Please save it securely.
============================================================
IMPORTANT: You must restart the container for changes to take effect:
docker restart nonebot-webui
============================================================
重置后必须重启容器才能生效:
docker restart nonebot-webui
⚠️ 注意:
- 新密码只显示一次,请务必保存好
- 重置后必须重启容器,否则新密码不生效
- 重启后所有已登录的设备需要重新输入新密码登录
0.0.0.018080容器运行时代理、Debian 镜像源、pip 源都可以在 WebUI 里直接配置,不需要部署阶段先写一大堆复杂参数。
如果你的环境确实需要,也支持通过环境变量传入:
WEBUI_HTTP_PROXYWEBUI_HTTPS_PROXYWEBUI_ALL_PROXYWEBUI_NO_PROXYWEBUI_DEBIAN_MIRRORWEBUI_PIP_INDEX_URLWEBUI_PIP_EXTRA_INDEX_URLWEBUI_PIP_TRUSTED_HOST/projects/external-projectspyproject.toml,说明你填错目录层级了这个仓库当前的 Docker 镜像发布依赖 GitHub Actions 自动完成。
需要注意:
docker build 不会自动更新 Docker Hubmaster 会触发 Docker 构建流程v* 格式的 tag 也会触发 Docker 构建流程当前 Docker workflow 会自动生成这些常用标签:
latestmaster${version}例如版本 0.4.8 会自动生成:
xisoul/nonebot-webui:latestxisoul/nonebot-webui:masterxisoul/nonebot-webui:0.4.8pyproject.toml 中的版本号Dockerfile 中的 APP_VERSIONv0.4.8master 和对应 tag示例:
git add .
git commit -m "feat: your change"
git push origin master
git tag v0.4.8
git push origin v0.4.8
pyproject.toml 中的版本一致docker.yml 是否成功Content type
Image
Digest
sha256:1918a015f…
Size
336 MB
Last updated
4 months ago
docker pull xisoul/nonebot-webui