7.3 KiB
好的,我先去看了你 frpc-console 的 README 风格——冷峻、务实、带点极客式骄傲,把“哲学”和“代码”焊在一起。我按这个调性帮你写 frps-console 的 README,直接可粘贴。
frps-console
🚀 轻量级 frps 服务端管理面板 | 管理面与控制面分离 | 内存 < 100MB
frps-console 是专为 frps(服务端) 设计的轻量 Web 管理工具。内嵌多平台 frps 二进制文件(v0.70.0),提供极简 Web UI 进行配置管理、客户端监控、日志查看。
与同类工具最本质的区别是:frps 业务进程与 Web 管理进程完全解耦。即使面板意外崩溃、升级重启,已建立的穿透隧道也绝不中断。
🧘 设计哲学:“阴主导阳”
这是整个项目的底层逻辑:
- 阴(frps 业务):内网穿透的核心业务,独立运行,不依赖任何管理进程存活。
- 阳(frps-console 面板):观察和调整业务的辅助工具,它的存在是为了更好地服务业务,而非成为业务的负担。
代码层面的保障:
- 启动 frps 时使用
Setsid创建独立会话,父进程退出后 frps 被 init(PID 1)接管。 - 内置 Watchdog(看门狗),每 30 秒探测一次 frps 存活状态,异常时自动拉起。
- 配置修改采用“先写文件,再热加载/重启”策略,确保配置操作的原子性。
用一句话概括:业务是目的,面板是手段。面板存在的意义,是让业务运行得更清晰、更可控。
📌 版本状态
当前稳定版:v2.0.0-LTS (2026-07-27)
- 基于 frp v0.70.0
- 数据库 Schema v2.0.0(支持未来平滑升级)
- 已通过实际生产环境验证(内存 92MB,无僵尸堆积)
- 承诺长期维护,跟随上游 frp 官方 LTS 版本同步更新
计划路线图:
- 内嵌多平台 frps 二进制
- WebUI 配置热加载
- Watchdog 自动保活
- 数据库迁移引擎(1.0.0 → 2.0.0)
- 工具的关于信息独立页面
- 7500 dashboard 的数据解析(客户端列表、代理列表、流量统计)
✨ 核心特性
- 📦 单二进制交付:内嵌 frps 0.70.0 多平台二进制(Linux x86_64/ARM64/ARMv7 + Windows),无需额外下载。
- 🖥️ 极简 Web UI:Vue 3 CDN 开发,无构建工具,修改
static/下文件即生效。 - 🗄️ SQLite 存储:零外部依赖,数据即文件,备份迁移只需复制
.db文件。 - 🔄 一键部署:
deploy.sh自动识别 OS(openSUSE/Ubuntu/Debian/CentOS),自动安装 Go/Docker,自动降级go.mod兼容老系统。 - 📉 资源极度克制:实测总内存占用约 92MB(面板 60MB + frps 32MB),512MB 云服务器轻松跑。
- 🛡️ 数据库迁移引擎:Schema v2.0.0,版本升级时自动备份(
*.pre-v2.0.0.*),失败可回滚。 - 🐳 Docker 优先:部署产物为容器,
--restart=always+ 数据卷持久化,升级不丢数据。
🚀 快速开始(一键部署)
在全新 Linux 服务器(Debian/Ubuntu/CentOS)上,以 root 权限执行:
curl -sSL https://git.whitetop.xyz/lxh2875931338/frps-console/raw/main/deploy.sh | sudo bash
脚本做了什么?
- 检测 CPU 架构(x86_64/ARM64/ARMv7)和发行版(甚至优先适配 openSUSE,因为作者用它)。
- 自动安装依赖(Git、Curl、Wget、Go 1.25.0)。
- 若
go.mod中 Go 版本过高(如 1.25),自动降级为go 1.21以兼容老旧系统。 - 编译静态二进制,构建 Docker 镜像,以
--network host启动容器。 - 数据目录
/opt/frps-console/data持久化挂载,容器删除重建数据不丢。 - 编译时已加
-p 1限制并发,避免低内存机器 OOM Killer。
内存不足? 脚本已内置防 OOM 措施,如果云服务器内存是在过小,建议配合 4GB Swap(
fallocate -l 4G /swapfile)食用更佳。
⚙️ 配置与访问
部署成功后,浏览器访问:
http://你的服务器IP:9365
- 首次启动:检测到无管理员账户,自动进入注册页(用户名 ≥5 位,密码需含大小写/数字/特殊字符)。
- 全局配置:修改
bindPort、Token、日志级别,保存即热加载 frps(若热加载失败则自动降级为重启)。 - 客户端列表:通过 frps 内置 Dashboard API(
127.0.0.1:7500)实时读取连接状态,无需额外配置。
环境变量(Docker)
| 变量 | 默认值 | 说明 |
|---|---|---|
PORT |
9365 | Web 服务监听端口 |
TZ |
Asia/Shanghai | 时区设置 |
🧬 进程模型与高可用
┌─────────────────┐ Setsid ┌─────────────┐
│ frps-console │ ──────────────▶ │ frps │
│ (Web 面板) │ 独立会话 │ (业务进程) │
│ │ │ │
│ Watchdog │ ◀── 每 30s ──── │ 隧道保持 │
│ 自动保活 │ 探测存活 │ 永不中断 │
└─────────────────┘ └─────────────┘
- 场景一:
docker restart frps-console→ frps 被 init 接管,隧道零中断。 - 场景二:frps 异常崩溃 → Watchdog 自动执行
StartFrps()拉起。 - 场景三:修改配置保存 → 优先执行
frps reload,若失败则降级为stop && start。
为什么能做到业务不中断?
因为 frps 启动时通过 Setsid 脱离了父进程的进程组。当父进程(frps-console)退出时,frps 不会被 SIGHUP 信号杀死,而是被 PID 1(init 或 Docker 的 tini)接管。这是 Unix 进程管理的经典设计,我只是把它用在了 frp 管理上。
📌 版本状态
当前稳定版:v2.0.0-LTS (2026-07-27)
- 基于 frp v0.70.0
- 数据库 Schema v2.0.0(支持未来平滑升级)
- 已通过实际生产环境验证(内存 92MB,无僵尸堆积)
- 适用于长期支持场景(LTS)
计划路线图:
- 内嵌多平台 frps 二进制
- WebUI 配置热加载
- Watchdog 自动保活
- 数据库迁移引擎(1.0.0 → 2.0.0)
- 工具的关于信息独立页面
- dashboard的数据解析(通过 frps 7500 端口的 /api/v2/* 数据,展示隧道流量、连接时长、带宽等指标)
📂 目录结构(Docker 容器内)
/app/
├── frps-console # 主二进制
├── frps.toml # 生成的 frps 配置文件
├── frps.log # frps 运行日志(尾部 200 行展示在 WebUI)
├── frps.pid # frps 进程 PID 文件
├── data/
│ └── frps-console.db # SQLite 数据库(持久化)
└── static/ # 前端静态资源(内嵌)
🙏 致谢 & 生态定位
-
核心引擎:fatedier/frp
-
同系项目:frpc-console(客户端管理面板,形成“云端 + 客户端”双星架构)
📄 许可证
MIT License
如果这个项目对你有用,欢迎给它点个 Star ⭐
问题反馈:Git Issues(仓库链接)