血泪史:从云服务器 Docker 踩坑,到最终投入 Windows 挂机宝的怀抱

绵缠雨的头像 发布于 58 分钟前 61 次阅读


前言:为什么要折腾大肥鱼?

最近被“大肥鱼”(DeepSeek Harness)刷屏了。看着别人桌面上那个灵动、能接 QQ 聊天的 AI 桌宠,我心血来潮,决定用自己的云服务器(Ubuntu + 宝塔面板)把它部署起来,做一个 7×24 小时在线的 QQ 机器人。

本以为凭借宝塔的图形化和 Docker 的一键部署,半小时就能搞定。结果,这却成了我两天的噩梦……

第一关:意料之外的“HTTP 403”拦截

在宝塔的 Docker 应用商店里部署好 Harness 后,我用手机浏览器通过公网 IP 访问。页面虽然打开了,但一到“选择工作区”就卡死,控制台报错 crypto.randomUUID 和 HTTP 403。

踩坑分析:Harness 出于安全考虑,有一个严格的“本机信任校验”。像“选文件夹”这种高级权限,只允许 127.0.0.1 访问。我用公网 IP 访问,被它的安全防线直接秒杀。

解决过程:尝试过在手机上用 Termius 搞 SSH 隧道,结果被手机系统的省电机制频频杀后台;尝试过安装各种绕过限制的插件,要么报 readonly database(数据库只读),要么报版本不兼容。最终,还是靠宝塔 Nginx 反向代理拯救了世界。在反向代理配置里强行加上两行代码,伪装成“本机请求”,才成功骗过了安检:

```nginx
proxy_set_header Host 127.0.0.1:3080;
proxy_set_header Origin http://127.0.0.1:3080;
```

第二关:插件与权限的“相爱相杀”

进了工作区,填好 API Key,接下来该装接 QQ 的 qfish 插件了。

由于之前装插件时遇到了 pnpm 的写权限问题,我习惯性地敲了 chmod -R 777。结果这一敲,直接把 DSH 的凭据文件(.credentials.yaml)权限放开了。DSH 检测到安全问题,直接疯狂崩溃重启,网页瞬间报 502。

解决过程:通过翻查容器日志,才定位到是 credentials-local is readable beyond its owner。把权限单独改回 chmod 600,服务才重新活了过来。AI 甚至因为这波崩溃,在后台疯狂查源码,一不留神烧了我 250 万个 Token……

第三关:Docker 网络与端口映射的绝望

启动 NapCat(负责挂载 QQ 的协议端)后,真正的坑来了。

容器之间是网络隔离的。大肥鱼里的 127.0.0.1:3001 根本连不到 NapCat。我用 docker network connect 把它们拉进同一个网段,通过 curl 测试网络已经通了(返回了经典的 426 Upgrade Required),NapCat 后台也正确配置了 0.0.0.0 的 WebSocket 服务器。

但死活就是连不上。

我想进 qfish 的网页控制台排查,发现需要暴露 8090 端口。但宝塔的应用商店限制了容器配置,Docker 老版本也不支持动态加端口,一用 --network container 共享网络就报错。手机小小的屏幕、繁琐的命令行、不断重启的容器……那一刻,我彻底破防了。

最终章:投入 Windows 挂机宝的怀抱

放弃云服务器了吗?

不,是换一种思路。我花十几块钱买了一台最低配的 Windows 挂机宝。

远程桌面连进去,下载原生大肥鱼 Windows 客户端,双击运行,扫码登录 QQ。

不到 5 分钟,机器人跑起来了,桌宠动起来了,QQ 消息秒回。

后记与总结

这场折腾其实暴露了云服务器部署纯图形化 AI 工具的痛点:

1. 安全限制太多:本地端软件(如 DSH、各种 AI 客户端)通常没有为“公网远程访问”做优化。

2. 容器网络复杂:在没有图形界面的 Linux 环境下,用 Docker 解决 WebSocket 握手、端口映射、无头环境配置,学习成本极高。

给后来者的建议

如果你只是想让大肥鱼接个 QQ,并且想要它完整的“桌宠”体验,直接买个 Windows 挂机宝。省下的时间,足够你聊上百个 QQ 群了。

当然,如果你追求极致的极客折腾体验,欢迎来到 Linux + Docker + Nginx 的坑里,祝你好运!