5.0 KiB
5.0 KiB
边缘节点部署
“真正需要管理工具的,往往不是机房里那台 64 核 256GB 的服务器,而是弱电箱里那块连散热片都没有的 ARM 开发板。”
真实场景
frpc-console 对边缘节点的支持,不是来自“市场调研”。
它来自以下设备:
- 全志 H3(256MB / 512MB 内存),运行社区的精简版 ARMbian 或官方剪枝版 Debian,放在弱电箱里跑 frp 穿透
- RK3506(128MB / 256MB 版本共存),没有 Docker,甚至没有 systemd
- 老旧 ARM 开发板(ARMv7l / ARM-HF),原本可能是一块电视盒子,刷上 ARMbian 之后被重新利用
这些设备的共同特征:
- 存储介质:SD 卡 / eMMC(便宜,容量大,但读写速度不敏感)
- 内存:128MB ~ 512MB(没有任何拓展条件)
- 系统环境:极简化,不常用的工具基本都被剪枝,极端情况下很可能只有 Kernel + BusyBox + init
- 网络环境:长期在线,但带宽有限
- 物理位置:没有理由长期触及(弱电箱、吊顶、室外机柜)
它们承担的工作却并不边缘:
- 内网穿透
- 远程维护通道
- IoT 设备接入
- 边缘计算节点
边缘环境特征
存储 vs 内存:成本结构的倒挂
在边缘设备上,存储和内存的成本结构与服务器完全不同:
| 服务器 | 边缘设备 | |
|---|---|---|
| 存储 | 昂贵(NVMe SSD) | 便宜(SD 卡 / eMMC) |
| 内存 | 便宜(可扩展) | 昂贵(不可扩展,BGA 焊接) |
这意味着:
镜像大几十 MB,可以接受。内存多占 10MB,不能接受。
所以 frpc-console 的 Docker 镜像虽然包含了完整的构建环境和依赖,但它不会在运行时消耗额外内存。镜像大小和运行时内存占用,在边缘场景下是两个独立且优先级完全不同的指标。
缺失的依赖
边缘设备可能缺失以下内容:
- Docker:很多 ARMHF 设备跑不动 Docker,或者根本没有 Docker 的预编译包
- systemd:精简系统中可能只有 init 或 busybox-init
- glibc:某些环境只提供 uClibc 或 musl
- 包管理器:内存小到一定程度的时候,它的存在堪称奢望
因此,二进制部署是边缘节点的唯一可行方案。
frpc-console 对边缘节点的适配
1. 二进制静态编译
frpc-console 采用 Go 编写,编译时使用 CGO_ENABLED=0:
- 不依赖 glibc
- 单一二进制文件
- 可运行于 musl 环境(Alpine、BusyBox)
- 不需要任何运行时依赖
2. 多架构支持
| 架构 | 说明 |
|---|---|
| x86_64 / AMD64 | 标准服务器 |
| ARM64 / Aarch64 | 现代 ARM 设备(树莓派 3/4/5) |
| ARMHF / ARMv7l | 老旧 ARM 设备(全志 H3、RK3506) |
3. 无 systemd 运行方式
在只有 init + BusyBox 的环境中:
# 直接运行
./frpc-console &
# 或通过 init 启动(写入 /etc/init.d/)
frpc-console 自身会通过 Setsid 为 frpc 创建独立会话,确保 frpc 在 console 退出后仍被 PID 1 接管。
4. 数据目录设计
/opt/frpc-console/data/
├── frpc-console.db # SQLite 数据库
├── frpc.toml # FRP 配置文件
├── frpc # FRP 二进制(内置,无需额外下载)
├── frpc.pid # frpc 进程 PID
├── frpc.log # frpc 日志(可选)
└── version.ini # 当前版本标识
所有数据在同一个目录下,备份只需复制整个文件夹。
5. 无日志默认策略
边缘设备存储有限,所以:
- 默认不写入日志文件
- 日志仅在用户明确开启时写入
- 避免 SD 卡被日志写满导致设备不可用
部署注意事项
推荐的最小硬件规格
| 场景 | CPU | 内存 | 存储 |
|---|---|---|---|
| 最小运行 | ARMv7 / ARM-HF | 128MB | 50MB(二进制 + 数据库) |
| 推荐运行 | ARMv7 / ARM64 | 256MB | 100MB |
| 舒适运行 | ARM64 / x86_64 | 512MB | 200MB |
不建议部署的场景
- 内存低于 64MB:很极限,需要系统本身有极强的剪枝水准,以保证基础内存消耗不高于20M,但这并不现实
- 存储低于 20MB:没有足够的空间存放二进制和数据
- 内核版本过低(< 3.x):某些系统调用可能不支持
- 刷了OpenWRT的软/硬路由:这种建议去下opkg的源包,而不是看向我们这个项目。
网络要求
- 边缘节点的网络出口带宽一般有限,首次访问 WebUI 时加载的静态资源(约 1-2MB)可能需要稍长时间
- 后续操作仅传输 JSON 数据,流量极小
为什么这件事值得单独记录?
因为主流开源项目在讨论 ARM 支持时,讨论的是“树莓派 4B(4GB 版本)”。
而真正部署在边缘的设备,可能只有 256MB 内存,甚至连 Docker 都没有。
frpc-console 对 ARMHF 的支持,不是“支持的架构列表里多了一项”,而是:
这个工具可以跑到那些真正藏在弱电箱里、承担网络基础设施工作的小板子上。
这才是边缘节点部署的意义。