Files
frpc-console/Docs/edge-node.md
T

5.0 KiB
Raw Blame History

边缘节点部署

“真正需要管理工具的,往往不是机房里那台 64 核 256GB 的服务器,而是弱电箱里那块连散热片都没有的 ARM 开发板。”


真实场景

frpc-console 对边缘节点的支持,不是来自“市场调研”。

它来自以下设备:

  • 全志 H3256MB / 512MB 内存),运行社区的精简版 ARMbian 或官方剪枝版 Debian,放在弱电箱里跑 frp 穿透
  • RK3506128MB / 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 的支持,不是“支持的架构列表里多了一项”,而是:

这个工具可以跑到那些真正藏在弱电箱里、承担网络基础设施工作的小板子上。

这才是边缘节点部署的意义。