独立开发者笔记,非官方教程。SDK 与套餐以 https://www.webrpc.cn/ 为准。
很多人买树莓派,不是为了再养一台云主机,而是想在家里留一个 常亮的小节点:挂硬盘、跑备份、偶尔让手机问一句「还活着吗」。卡点几乎总是同一句——
家里没有公网 IP,也不想把路由器端口映射当成日常运维。
frp 能透,但你得一直养一台 VPS;自己打洞,树莓派那点精力很快就被网络细节吃掉。后来我把它定位成 webrpc 的「家庭常驻端」:派上 24 小时登录,手机或笔记本当访客端,用会话收发,而不是先给这台小机器找一个公网入口。
webrpc 是面向无公网 IP 的跨平台 P2P 通信 SDK:Token 标识设备,登录后建立尽量直连的加密会话,再用 SendData / SendFile 收发。官网:https://www.webrpc.cn/

为什么是树莓派,而不是再买一台云
家庭节点有几个很土、但很真实的约束:
- 要常开,功耗得低
- 数据最好留在自己的盘上
- 人在外面用手机或笔记本访问
- 宽带多半是大内网,没有稳定公网地址
树莓派(以及同类 ARM 小主机)刚好卡在这个位置。它弱项不是 CPU,而是 可达性:你不能像对待公网 VPS 那样,假设永远有一个固定 IP 和端口。
webrpc 在这里做的不是「再给派做一个网盘产品」,而是给它一个 常驻身份:一个 Token、一个长期进程、一套回调收包。业务仍然是你的——状态查询、拉日志、传一张图、列某个白名单目录——都可以往后加。
这台派在链路里扮演什么角色
最小拓扑只有两端:
树莓派(家宽 NAT 后,24h) 手机 / 笔记本(公司网或 4G)
Token = PI Token = PHONE
登录 + 回调读循环常驻 需要时登录,OpenSession(PI)
守着本地文件或传感器 SendData / 等回包 / SendFile
派是 被找到的那一端,不要让它去主动拨号找你的手机——手机 IP 变得太勤。让访客端 OpenSession 到派的 Token,心智更稳。
个人套餐常见是两个 Token、约每年 5 美元(以官网为准),刚好够「派 + 手机」或「派 + 电脑」做最小验证。家里以后加 NAS、加第二台派,再按「一台设备一个 Token」扩。
硬件和系统:先别上复杂
够用的起点:
- Raspberry Pi 4 / 5,或任意能跑 64 位 Linux 的 ARM 板
- 系统用 64 位 Raspberry Pi OS / Debian,少踩 32 位库
- 有线网口优先于 Wi‑Fi;常驻节点对抖动更敏感
- 系统盘尽量用靠谱的卡或直接 SSD,避免 SD 卡被日志写坏
SDK 不要拿桌面 x86 的 .so 硬塞。官方面向 Linux ARM 的包名是 libwebrpc-Linux-arm64 这一路(以你下载到的文件名为准)。架构错了,表现常常是加载失败或登录永远停在 0,看起来像「webrpc 在树莓派上不能用」。
语言我更建议派上用 Go 或 C:CGO/动态库、systemd 常驻都顺。Python 能跑,但 ctypes 声明和路径更容易在 ARM 上踩坑;那是另一篇文章的事。
接入时只验证「常驻」,不要一上来堆网盘
树莓派上第一周只做三件事就够:
- 进程能登录成功,崩溃后能被拉起来
- 回调端口稳定连上
127.0.0.1 - 外面用第二个 Token
OpenSession成功,来回一条小消息
例如访客端发 PING,派回 PONG|<uptime>。磁盘、目录、传图都是后话。常驻没稳住就上业务,最后你会在「备份协议」里排查「其实服务没在跑」。
Go 侧登录循环、读帧、异步回包,和官网示例同一套。ARM 上唯一要额外盯的是链接库:
#cgo linux,arm64 LDFLAGS: -L. -lwebrpc-Linux-arm64
以及运行时的 LD_LIBRARY_PATH,指向 .so 所在目录。
用 systemd 把它变成「插电就在」
树莓派当节点,成败不在 Demo 能跑,而在 重启、掉电、偶发崩溃之后还在。
一个够用的 unit 示意:
# /etc/systemd/system/webrpc-pi.service
[Unit]
Description=webrpc home node
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/webrpc-node
Environment=LD_LIBRARY_PATH=/home/pi/webrpc-node
ExecStart=/home/pi/webrpc-node/pi-agent
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
注意几点:
network-online之后再起,避免开机瞬间登录必失败Restart=always,但登录逻辑自己要有超时,不要空转打满 CPU- Token 放文件权限收紧,不要世界可读,更不要提交到公开 git
- 日志用 journald 即可,别把完整 Token 打进日志
systemctl enable --now webrpc-pi 之后,拔电再插,你期望的是:过一两分钟,外面仍能 OpenSession 到这台派。

电、热和磁盘:常驻设备的脏细节
这些不像 API,但会决定你能不能真的 24 小时:
- 电源:廉价充电头在负载和高网卡活动时会欠压,进程表现成随机挂;用官方或够流的供电
- 散热:Pi 4/5 在夏天小盒子里会降频,看起来像「P2P 变慢」
- 磁盘:外接硬盘要给足电流,挂载写进
fstab或 systemd mount,避免 Agent 起来时盘还没挂上 - 时间:没 RTC 的板子刚开机时间不对,可能影响证书/登录观感,开 NTP
webrpc 解决的是 NAT 后怎么被找到;电源和挂盘,它帮不了你。
外面怎么连:4G 可以,但先同网
联调顺序建议:
- 笔记本和派在同一局域网,先通 PING
- 笔记本切到手机热点,再通一次
- 最后才把访客端放到公司网或真 4G
跨网失败时,先看派是否仍登录(journalctl -u webrpc-pi)、Token 有没有填反、动态库是不是 arm64。握手不能保证 100%,弱网下要给 SendData 设超时,失败就重新 OpenSession——这些是应用层的事,和「树莓派」本身无关,但常驻节点上更容易被忘掉。
业务上给派做 只读白名单:允许 PING、允许某个目录的列表或拉取,默认不要在派上执行任意命令。常开设备,权限开错一次,比桌面 Demo 危险得多。
适合挂在派上的,和不适合的
比较适合:
- 家庭状态节点:在线、温度、磁盘剩余
- 小文件与日志回传
- 作为后续 NAS/相册/备份的「门口」:先通会话,再扩业务
不太适合:
- 把派当 4K 实时监控服务器硬扛(散热、上行、编码都不在 webrpc 职责里)
- 只想 SSH 进去改两行配置(开一下 frp 或 Tailscale 往往更快)
- 没做白名单就把整个根目录暴露给手机
树莓派 + webrpc 的产品故事是:低功耗常亮 + 无公网可达。别把它写成万能云。
一份落地清单
- 64 位系统 + Linux arm64 SDK,文件和头放在程序同目录
- 控制台申请独立 Token,只给这一台派
- 进程:登录 →
GetReceivePort→ 后台读回调 → 等会话 - systemd 常驻、开机自启、日志里不打 Token
- 访客端第二个 Token,先同网再 4G
- 业务从
PING开始,路径和方法白名单再加
下载 SDK、看 arm64 库名和各语言示例,都在官网:https://www.webrpc.cn/
最后
树莓派最贵的不是板子,而是你愿意让它在柜子里亮着。
没有公网 IP 时,缺的不是又一个 Linux 服务,而是 一个能被外面找到、又不必把家门端口打开的身份。
webrpc 给的就是这层身份和会话。派负责 24 小时在线,手机负责需要时拨进来。通了之后,备份、相册、传感器都只是回调里多几种字节。先让这台小机器「插电就在」,再谈它能替你看家到什么程度。

416

被折叠的 条评论
为什么被折叠?



