# 边缘节点部署 > *“真正需要管理工具的,往往不是机房里那台 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 的支持,不是“支持的架构列表里多了一项”,而是: **这个工具可以跑到那些真正藏在弱电箱里、承担网络基础设施工作的小板子上。** 这才是边缘节点部署的意义。