使用 Incus LXC 容器部署 QQ 聊天机器人
🤖 前言
朋友们对群聊机器人的呼声越来越高,于是就想趁这个时候部署一个玩玩。前端我采用了 NapCat,这是一个通过官方客户端收发消息的 QQ 框架,后端则使用 NoneBot,中间通过 OneBot V11 协议进行对接。
由于服务器上有非常多的业务,使用所以不能直接在服务器上部署 QQ 聊天机器人。我也尝试了 Docker 配置容器和网络部署,但是容器之间的数据互通非常麻烦,甚至需要在容器里创建软链接才能使一些插件正常工作。
所以我考虑系统级隔离的环境,但是 KVM 虚拟机的性能开销较大,对于机器人这种项目来说又有点繁琐。这个时候我就考虑到了 LXC。
LXC 是什么?
LXC (Linux Containers) 是一种操作系统级虚拟化技术,它允许在单个 Linux 主机上运行多个隔离的 Linux 系统实例。与 Docker 和 KVM 相比,LXC 有着不同的底层实现和适用场景:
与 Docker 的区别:Docker 主要针对应用容器化,强调轻量级和微服务架构,而 LXC 提供了更完整的系统环境,相当于轻量级虚拟机。LXC 容器拥有自己的 init 进程、系统服务和网络栈,可以运行几乎任何 Linux 应用,而 Docker 更专注于单个应用的隔离和部署。
与 KVM 的区别:KVM 是全虚拟化技术,需要完整的操作系统镜像,性能开销较大,但隔离性最强。LXC 则是共享主机内核的容器化技术,性能开销小,启动速度快,但隔离性略低于 KVM。LXC 介于 Docker 和 KVM 之间,既有较好的隔离性,又有接近原生的性能。
Incus 是什么?
Incus 则是 LXC 容器的高级管理工具,提供了更友好的接口和丰富的功能,使得容器管理更加便捷。
目前支持管理 LXC 的有 Incus、LXD 和 Libvirt。
为什么选择 Incus?
在众多 LXC 管理工具中,我最终选择了 Incus,主要基于以下几个原因:

与 LXD 的对比
- 独立发展:Incus 是从 LXD 分叉出来的项目,由原 LXD 主要维护者 Stéphane Graber 领导,采用独立的开发路线
- 创新速度:Incus 有着更快的创新和更新速度,能够更快地响应用户需求和安全问题
- 社区驱动:采用更社区化的开发模式,决策更加透明。
Canonical 你看你干的好事儿 - 兼容性:保持与 LXD 命令行接口的高度兼容,学习成本低
与 Libvirt 的对比
- 易用性:Incus 提供了更简洁直观的命令行接口和 REST API,使用门槛更低
- 容器专注:Incus 专注于容器技术,对 LXC 的支持更加全面和深入
- 功能丰富:内置了镜像管理、网络配置、存储管理等丰富功能,无需额外组件
- 生态系统:拥有更活跃的社区和更丰富的文档资源
对于 QQ 机器人这种需要稳定运行且资源占用适中的应用,Incus 提供的平衡性能和隔离性的特性非常适合,同时其友好的管理界面也让日常维护变得更加简单。
本文将介绍如何利用 Incus 容器技术来部署 QQ 聊天机器人,具体是通过在 Incus 实例中直接安装并配置 NapCat 和 NoneBot 框架来实现。Incus 作为一个强大的容器管理工具,提供了轻量级的虚拟化环境,非常适合运行各类服务,包括聊天机器人。
🛠️ 环境准备
宿主机要求
| 硬件 | 推荐配置 |
|---|---|
| CPU | 2核及以上 |
| 内存 | 2GB及以上 |
| 硬盘 | 10GB可用空间 |
| 操作系统 | Linux |
| 网络 | 稳定的互联网连接 |
安装 Incus
首先需要在宿主机上安装 Incus。主流发行版均提供了 Incus 包,对于 Ubuntu / Debian 用户,也可以从 Zabbly 提供的 Incus 仓库安装。
Zabbly 的 Incus Stable 仓库有一个中科大镜像源可用,将 zabbly-incus-stable.sources 中的 https://pkgs.zabbly.com/incus/stable 链接替换为 https://mirrors.ustc.edu.cn/incus/stable 即可。

安装完成后,运行以下命令进行初始化:
1 | # 初始化 Incus |
然后 Incus 会问你一些问题,一般来说如果你不熟悉它的话,保持默认即可。
🔄 更换 Incus 镜像源
以下 Incus 命令如果权限不够,就使用 root 身份或者 sudo 运行。
创建一个 remote 链接,指向镜像站即可,或替换掉默认的 images 链接。
1 | incus remote add mirror-images https://mirror.nju.edu.cn/lxc-images/ --protocol=simplestreams --public |
你可以根据 镜像文档 选择适合自己的镜像源,但是目前只有南大的镜像源是正常更新的,所以我强烈建议使用南大的镜像源。
国内所有的 LXC 镜像仅适用于 Incus,不能用于 LXD。
然后执行以下命令查询远程可用的系统镜像:
1 | incus image list mirror-images: |
该命令可以配合 grep 实现搜索指定镜像。
🐳 创建 Incus 容器
1. 创建并启动容器
Incus 中的每一个容器都称作实例,下文中“实例”均指与 Docker 容器类似的概念。
1 | # 创建一个名为 qq-bot 的实例,使用 Debian 13 镜像 |
如果遇到报错:Error: Failed instance creation: Failed creating instance record: Failed initializing instance: System doesn't have a functional idmap setup,请尝试使用特权模式运行。

特权模式就是在 launch 时候增加一个参数:-c security.privileged=true。如果你还需要在 Incus 实例中运行 Docker/Podman,你还需要添加参数 -c security.nesting=true。
启动实例后进入实例:
1 | incus shell qq-bot |
2. 容器内环境配置
在容器内更换镜像源。本文不做介绍,具体过程请自行搜索。
然后更换时区。这对于一些时间相关的 NoneBot 插件(例如每日人品)是必要的。
1 | # 更换时区为东八区 |
然后我们需要安装一些必要的软件包:
1 | # 更新系统并安装依赖 |
📦 部署 NapCat
请参照 NapCat 官方文档 。
🚀 部署 NoneBot
请参照 NoneBot 官方文档。
创建 NoneBot 项目的时候,需要安装 OneBot V11 适配器和 FastAPI、WS 驱动器。
🛜 对接 NapCat 和 NoneBot 服务
在 NapCat 配置添加反向 WS 地址,地址为 ws://127.0.0.1:8080/onebot/v11/ws。
这里的 8080 是 NoneBot 输出的端口号,一般不用动,根据 NoneBot 的实际输出修改即可。
/onebot/v11/ws 是 NoneBot OneBot V11 适配器默认的路径。
然后在 NoneBot 项目目录下,运行 nb run 测试一下是否正确连接。如果出现了 403 错误,那么多半就是两种情况:
- WS 地址错误。切记,地址不是
ws://127.0.0.1:8080,是ws://127.0.0.1:8080/onebot/v11/ws。 - 未配置 Token 或者 Token 错误。请参阅官方文档给出的解决方案。
一切配置就绪后,输出看到 connection open,然后 NoneBot 开始输出 QQ 接收到的消息,即说明一切就绪,可以部署。
🔄 配置服务自启动
为了让 NapCat 和 NoneBot 在容器启动时自动运行,我们需要创建 systemd 服务:
1. 创建 NapCat 服务
请参照 NapCat 官方文档。
2. 创建 NoneBot 服务
1 | # 创建服务文件 |
服务文件内容:
1 | [Unit] |
3. 启用并启动服务
1 | # 启用服务 |
📸 连接测试
1. 检查服务状态
1 | # 检查 NapCat 状态 |
2. 测试机器人功能
在 QQ 聊天中发送命令:
1 | /echo hello |
机器人应该回复相同的 hello 消息。

之后就可以添加插件或者更多功能了!这一部分请自行研究 NoneBot 的官方文档吧。
📈 容器资源管理
设置容器资源限制
1 | # 限制容器使用的 CPU 和内存 |
limits.cpu 和 limits.memory 按需调整。
容器备份
1 | # 创建容器快照 |
💡 写在最后
写这篇文章的目的,其实还是想为容器化部署提供一种新的思路。现在大多数生产环境部署都是 Docker,而 Docker 确实可以带来诸多好处,如环境隔离、易于管理和迁移等。
但是,在某些场景下,比如需要更接近完整系统环境、更高性能要求或者特定的网络配置时,LXC/Incus 可能会是一个更好的选择。与 Docker 相比,Incus 提供了更完整的系统环境和更灵活的资源控制,同时保持了比虚拟机更低的资源开销。
但是 Incus/LXD 的参考资料特别少,我也是一点一点摸索出来的,想着既然没有资料那我就自己写资料,于是这篇文章就诞生了。
对于 QQ 机器人这类应用,Incus 容器既能够提供足够的隔离性以确保安全运行,又不会像完整虚拟机那样消耗过多资源。这种平衡在资源受限的设备上尤为重要。
希望通过这篇文章,能够让更多人了解到 Incus 这样的容器化技术,在未来的项目中根据实际需求选择最合适的部署方案,而不仅仅局限于 Docker。技术的多样性是我们解决复杂问题的宝贵财富。
- 标题: 使用 Incus LXC 容器部署 QQ 聊天机器人
- 作者: GT610
- 创建于 : 2025-11-02 22:54:16
- 更新于 : 2025-11-19 08:14:20
- 链接: https://gt-610.dpdns.org/2025/11/02/deploy-qq-bot-thru-incus/
- 版权声明: 本文章采用 CC BY 4.0 进行许可。