跳到正文
NapCatQQ Desktop使用文档
远端与部署

在远端 Linux 上运行

从添加 SSH 主机开始,准备组件、创建原生 Bot,再确认登录和消息连接。

阅读位置开始阅读阅读进度 0%

自己的电脑总有关机的时候,想让 Bot 一直在线,迟早要把它放到服务器上。这种情况下,Desktop 还是装在你的 Windows 电脑上,QQ 和协议端跑在 Linux 服务器上,两边通过 SSH 连接。Linux 那边不需要装 Desktop。

这一篇带你在服务器上跑起一个原生 Bot。打算用 Docker 容器的话,先跟着本篇把主机加好、连接测通,再转到 Docker 部署。

准备信息

信息 从哪确认 示例
主机地址 云服务器控制台、路由器管理页或管理员 192.168.1.20
SSH 端口 服务器的 SSH 配置 一般是 22,可能改过
用户名 建服务器时设的 Linux 用户 ubuntu
认证方式 服务器允许的密码或私钥 私钥是 Windows 本机上的私钥文件
安装权限 这个用户能否写安装目录、装依赖 系统依赖可能需要 sudo

先确认这台电脑能连到服务器的 SSH 端口。云服务器一般有安全组,主机上可能还有防火墙,这两处都要放行你的来源地址。云控制台上显示「运行中」,只能说明机器开着,不代表 SSH 一定连得上。

如果你还没决定装什么系统,Ubuntu / Debian 是最省事的选择。至于缺不缺 QQ 需要的动态库、CPU 架构对不对,后面的组件检测会告诉你。

1. 添加并测试主机

  1. 打开「远端」,点添加。
  2. 在「添加远端服务器」里填「名称」「主机地址」「端口」「用户名」。名称自己能认出来就行,比如 家里的 Linux。
  3. 「目标系统」选「自动识别」或者「Linux」。
  4. 「认证方式」选「密码认证」或者「密钥认证」。用密钥的话,选的是私钥文件,不是那个 .pub 结尾的公钥。用密码、但暂时不想配免密登录的,把「自动配置免密登录」的勾去掉。
  5. 保存,然后在主机卡片上点「测试连接」。
  6. 第一次连接时会显示这台主机的指纹,和服务器那边核对一致以后,再选择信任。

添加远端服务器时填写主机、系统与认证方式 · 演示数据

测试通过了再往下走。地址写错、密码不对、连接超时,是三种不同的问题,按测试结果给出的提示分别处理。以后编辑这个档案时,密码框留空表示继续用原来的密码,并不是把密码清空。

如果你本地已经有 SSH 配置文件,可以用远端页的「从 SSH 配置导入」,省得再手动填一遍。导入后也一样要核对地址和用户名,再测一下连接。

改成免密登录

每次都输密码挺烦的,可以改成免密登录,也就是用本机的私钥来证明身份。Desktop 能给这个档案生成一对专用的密钥,并把公钥写进目标用户的 authorized_keys 里。

  1. 先用密码把连接测通,核对好主机指纹。
  2. 在远端卡片上点钥匙图标「配置免密登录」,或者右键卡片选同名的操作。只有还在用密码认证的档案才有这个入口。
  3. 在弹窗里填「当前 SSH 密码」,点「配置免密」。如果之前还没信任主机指纹,这里会先让你核对并信任。
  4. 等提示「免密登录已配置」。Desktop 会生成密钥、写入公钥,再用新的私钥真的登录一次,确认能用以后,才会把档案自动切到「密钥认证」。
  5. 再点一次「测试连接」确认。编辑档案时可以看到「私钥文件路径」。

如果新的私钥验证没通过,档案会继续保持密码认证,不会把你锁在门外。按错误提示去检查远端的 SSH 公钥认证配置和目录权限。

添加主机时一起配置: 新建档案的时候,选「密码认证」、填好密码、勾上「自动配置免密登录」,再点「添加」。Desktop 会先保存档案,然后走一遍同样的流程:测试连接、确认指纹、配置密钥。密码留空的话就只添加档案,不会配置免密。卡片出现了,不代表免密已经配置成功,记得看一眼结果提示。

自动生成的私钥存在本机数据根目录下的 ssh_keys 文件夹里,配置 ZIP 不会包含它。换电脑的时候,要么把私钥单独搬过去,要么用密码重新配一次。私钥的内容不要贴到日志或者反馈里,见 备份与恢复。

2. 在服务器上装组件

  1. 打开「组件」,在主机选择器里切到这台 Linux。
  2. 确认没选错主机,然后看 QQ、NapCat / SnowLuma 和运行时的检测结果。
  3. 安装缺少的组件。原生运行需要 Linux 上自己有 QQ 和协议端,你 Windows 电脑上装的那份是用不上的。
  4. 在「任务」里看进度。遇到缺系统库或者需要提权的情况,按服务器的实际情况处理,别把同一个任务反复提交好几次。
  5. 装完刷新一下检测结果,确认协议端和依赖都准备好了。

如果服务器上以前就装过,在「远端 → 库存」里刷新探测,核对一下检测到的目录。注意这里的路径是 Linux 的,比如 /home/ubuntu/...,不是 Windows 那种 C:\...。

远端页按主机显示连接与库存入口 · 演示数据

3. 创建远端原生 Bot

  1. 打开「机器人」,新建一个 Bot。
  2. 填「QQ 账号」和「实例名称」,选刚才准备好的 NapCat 或 SnowLuma。
  3. 「运行场景」选远程运行,「目标远程主机」选这台 Linux。
  4. 「启动方式」选直接运行,核对目标主机和组件状态。
  5. 保存,回到卡片上点启动。
  6. 打开日志,确认程序确实是在这台服务器上启动的。

到这里程序已经在服务器上跑起来了,接下来要登录 QQ。

4. 登录 QQ

NapCat:点卡片上的 WebUI,按页面提示拿到二维码,用手机 QQ 扫码并确认,然后看看卡片和日志里的账号状态。

SnowLuma:点卡片上的「扫码登录」。这个功能默认是开着的,但在远端 Linux 上,它需要 Python 3、AT-SPI、X11 和一个可用的会话 D-Bus。环境不满足的话,就通过 QQ 图形界面 / VNC 来登录,见 SnowLuma 扫码登录。

完成后核对三件事: 进程还在运行,QQ 已经登录,OneBot 连接符合你的用途。光看到进程在跑、WebUI 能打开,并不能说明应用端已经连上了。

5. 连接应用端

先看一下 OneBot 连接,决定用 HTTP、正向还是反向 WebSocket。填地址的时候,想清楚是谁去连谁:

  • 应用端和 Bot 在同一台 Linux 上,127.0.0.1 指的就是这台 Linux。
  • 应用端在另一台机器上,那么 127.0.0.1 在两边指的都是各自所在的机器,不能用它来代表远端服务器。
  • 应用端在容器里,回环地址指的是容器自己,见 Docker 的端口说明。

在 Desktop 里把连接配好、保存,需要重启的按提示重启。最后从应用端或者调试台发一次请求,再发一条测试消息,看事件能不能送到。

WebUI 里改的连接又变回去了

这是因为 Desktop 启动远端 Bot 的时候,会用它自己保存的连接配置去覆盖远端的 OneBot 文件。你在 NapCat / SnowLuma WebUI 里直接改的东西,如果没同步回 Desktop,下次一启动就被盖掉了。

解决办法:打开这个 Bot 的「配置 → 连接」,点「从远端读取」,核对一下差异,填回表单并保存,以后再从 Desktop 启动就不会丢了。

按阶段排查

卡在哪一步 先查什么 然后
SSH 测试失败 地址、端口、用户名、认证和网络路径 先让连接测试通过
组件安装失败 「任务」里失败的步骤、远端下载与权限 补齐依赖或修好下载后重试
进程启动就退出 Bot 日志、QQ 动态库、组件的实际路径 回组件页重新检查
进程在跑,账号不在线 WebUI / QQ 登录流程、手机确认 完成登录,不用重新建 Bot
WebUI 打不开或鉴权失败 SSH 连通性、实际的 WebUI 端口和密码 重新连接,核对当前配置
QQ 在线,应用端没反应 OneBot 方向、地址、端口、token、适配器 按 连接排错 检查

希望合上电脑以后也能收到掉线通知的话,接着配 远端值守。另外,升级 Desktop 不会顺带升级远端的 ncd-watch,它要在组件页里单独更新。

NapCatQQ Desktop · GPL-3.0下载 Windows 版 ↗

输入关键词,搜索全部教程与功能说明。

↑ ↓ 选择 · Enter 打开 · Esc 关闭本地全文搜索