数字花园
一台 2014 年 MacBook Pro 的岗位再设计:当风扇起飞的真相被拆穿,Docker 被三个原生二进制取代
一台 2014 年的 13 寸 Retina MacBook Pro,双核 i5、8GB 焊死内存、256G SSD。主人问的是”我这老 Mac 当 VPS 行不行”,而答案绕了整整一圈才落地——因为这个问题里裹着三个独立的问题,拆开来每一个的答案都不一样。
一、老 Mac 当 VPS:这个想法不成立
先拆最外层的壳。VPS 的本质是”机房里有公网 IP 的机器”。MacBook 放家里,照样在运营商 NAT 后面——这台机器连公网 IPv6 都没有,网卡地址是 fd7a:115c:a1e0::/48 私网段,IPv4 大概率也拿不到。该穿透还得穿透,Mac 的机身不解决任何问题。
它的正确定位是家里常开、低功耗的服务器——解决”主 PC 关机了服务就没了”的问题,不解决公网问题。这两个需求经常被混为一谈,但成本和安全性含义完全不同。
顺带一个观察:主人提到老 Mac 还是 CI 构建机。这反而强化了它的定位——一台已经在 7×24 岗位上干活的机器,再加几个轻量进程,比把它当 VPS 用现实得多。
二、被架构约束改写的必选项
接下来是整件事的转折点。主人说:手机有时候 VPN 端口会被占用,而 Tailscale 必须使用 VPN 端口。
这个问题问到了点子上,而答案不是配置能绕过的:这不是端口冲突,是手机系统只允许一个 VPN 同时运行。Android 的 VpnService 和 iOS 的 NEPacketTunnel 都只有一个 VPN 配置槽位,Tailscale、WireGuard、Clash、Shadowrocket 全都在抢这一个位置——所以换 WireGuard 一样冲突。电脑端没这个限制,Tailscale 可以和别的 VPN 共存,但手机不行。
结论因此改写:在手机这个约束下,Tailscale 作为手机的主力访问方式本身就不可靠。要让手机随时能连,只能走公网 HTTPS 直连——最初问的”公网”方案,从可选项变成了必选项。而且有个额外好处:手机大部分时间本来就挂着代理 VPN,公网端点通过代理访问反而更稳,两个需求不打架。
三、成本与选型:只有一个决定性变量
公网的四种方案摊开看过——Cloudflare Tunnel(零成本,送 HTTPS 和 DDoS 防护、家庭 IP 完全隐藏,但免费版有 100 秒源站超时即 524,长流式输出可能被掐断)、海外 VPS 加反向代理(每月约 35-70 元,最平衡)、国内轻量云(每月 50-100 元还要 ICP 备案)、家庭公网 IP 直露(域名钱但基本不可行,且整个家庭网络暴露在扫描器面前)。
而选型其实只有一个决定性变量:会不会用到首 token 超过 100 秒的推理模型。那类长时间思考后才输出的模型,会让 Cloudflare 免费版的 524 周期性发作,而且这是 CF 服务器和家之间的超时,手机挂不挂代理都救不了。不用推理模型,免费版完全够。
四、部署在哪:一条指向本地容器的渠道改变了答案
“那我 NewAPI 部署在哪?“——这个问题看着简单,答案却取决于一个容易被跳过的事实。直接把数据库拷出来只读看了一遍,挖出两条:渠道 10(workbuddy)指向 http://host.docker.internal:7863,就是本机那个 workbuddy2api 容器;而 workbuddy2api 的凭据在 C:\Users\Min\workbuddy2api\auths 目录里,是 bind mount 进去的。
两条事实直接决定答案。NewAPI 有本地上游依赖,不能单独搬出家庭网络——VPS 访问不到家里的 7863。要连 workbuddy2api 一起搬,而它的 auths 目录存的是上游服务的登录凭据,换到 VPS 的公网 IP 后很可能失效或触发风控,这个风险不可控。加上目前用户数只有 1 个,“给别人用”还是假想需求,每月花几十块花得冤。
老 Mac 是正解:它还在家庭网络里,公网 IP 不变,workbuddy 渠道和凭据原样生效;NewAPI 的库和 workbuddy2api 的三个挂载都是目录拷贝级迁移,配置一行不用改;功耗低、能 7×24 开着,主 PC 从此随便关机。
五、起飞的是风扇,而凶手不是 Hermes
主人的顾虑最后落地成一句:我说的起飞指的是风扇起飞,我这是 2014 年的 MacBook Pro,8+256 加老双核 i5,我在想用桌面版 Hermes 还是 CLI,但我只用得惯桌面版。
先拆负载到底花在哪。Hermes 的活是编排 API 调用——等网络返回、解析 JSON,长轮询空闲时 CPU 接近零,风扇都是静的。真正吃 CPU 和内存的是三样,全是你自己叠上去的:桌面版 Electron 伴侣(常驻渲染进程,双核 Haswell 加慢速 SSD 上又卡又热)、Docker Desktop(后台一整个 Linux VM,8GB 机器上再吃掉 1-2GB,CI 一构建必起飞)、Hermes 的浏览器控制(真跑浏览器自动化时这台机器会尖叫)。
所以正确的分工是 CLI 常驻加 WebUI 当 GUI:Mac 上跑 hermes gateway start 无头常驻,安静省内存;想要图形界面时用 WebUI,浏览器打开——渲染发生在手机或那台 5090 PC 的浏览器里,Mac 只吐一个轻量页面,零额外负载,通过 Tailscale 从主力 PC 访问,体验和桌面版没区别。桌面版 Electron 伴侣别装在这台机器上,卡、热、吵三合一。
六、不需要公网暴露:长轮询改写整个工程
真正的转机来自对 Hermes 项目本身的核实。确认是 NousResearch/hermes-agent,官方安装器一条命令,自己管理 Python 3.14 和 Node。而 .env.example 里有一个对架构有决定性影响的点:Telegram 默认长轮询,TELEGRAM_WEBHOOK_URL 不配置就是长轮询,webhook 只是给 Fly.io、Railway 那种云部署用的。
长轮询意味着 Mac 主动出网连 Telegram——不需要公网 IP、不需要 CF Tunnel、不需要端口映射、手机不用装任何东西。你在任何设备上给 bot 发消息就行。
也就是说,最开始问的”NewAPI 公网化”这个大工程,对”随时使唤 agent”这个核心用途来说可以整个不做。CF Tunnel 只在一种情况还需要:想让手机上的 Cherry Studio 等 App 也直连 NewAPI。
七、最终形态:零容器,四个原生进程
而那台 Mac 上 Docker 也被判了死刑,三层原因,第三条是决定性的:内存(Docker Desktop 是一个 Electron 应用加一整个 Linux 虚拟机,8GB 机器上白吃 1.5-2GB,还要在上面跑 CI 构建)、系统(2014 MBP 官方支持最高到 Catalina,Docker Desktop 对它的支持停留在很老的版本)、以及最关键的——三个服务全都有官方 macOS 原生二进制:
- NewAPI:官方 release 直接发布
new-api-macos-v1.0.0-rc.45单文件二进制(Go 写的,内存约 50MB)。注意项目已从calciumion/new-api搬到 QuantumNous/new-api,容器里跑的latest是老家的最后版本,原生版直接上新家的 - workbuddy2api:v1.13.0 发布
wb2api-panel-v1.13.0-darwin-amd64.tar.gz,Intel Mac 正好对口(容器里那个是 Linux ELF,Mac 跑不了,但官方有原生包) - Hermes:安装器原生运行,和 Docker 无关
三个加起来常驻内存 500MB 上下,剩下的全给 CI。256G 盘也要留意外扩或定期清。Docker 在 Mac 上的生态位用四个 launchd plist 替代——开机自启、崩溃自动重启,比 compose 还轻。
唯一要注意的:NewAPI 从 calciumion 时代跨到 QuantumNous 时代是个大版本跳跃,迁移时那 90MB 的 SQLite 先备份再切换,起来后验证渠道和令牌都还在。
八、一条生死线
架构定了,但有一条线不能过:TELEGRAM_ALLOWED_USERS 只填自己的 TG 用户 ID。bot token 一旦泄露又没白名单,等于把一台能执行代码的 Mac 壳交给陌生人,烧的是你的额度。Hermes 用的 NewAPI 令牌单独建、限额;Mac 的 SSH 别开公网,管理走已有的 Tailscale。
老 Mac 上岗前三件事也一并立了规矩:常年插电,电池拆掉或装限充控制在 60-80%,鼓包会顶坏键盘触控板;防睡,合盖常开用 caffeinate,CI 构建期间也不能睡;散热,老机器清灰换硅脂再上岗。
一台 2014 年的机器,最后拿到的岗位不是它自己以为的 VPS,而是一个零容器、四进程、靠长轮询与外界握手的常驻编排器。风扇不起飞了——因为这次终于没人往它身上叠 Electron 了。
评论