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

154 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 边缘节点部署
> *“真正需要管理工具的,往往不是机房里那台 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 的环境中:
```bash
# 直接运行
./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 的支持,不是“支持的架构列表里多了一项”,而是:
**这个工具可以跑到那些真正藏在弱电箱里、承担网络基础设施工作的小板子上。**
这才是边缘节点部署的意义。