首份完整2.0-LTS版本定稿
This commit is contained in:
@@ -0,0 +1,177 @@
|
|||||||
|
好的,我先去看了你 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 版本同步更新**
|
||||||
|
|
||||||
|
**计划路线图**:
|
||||||
|
- [x] 内嵌多平台 frps 二进制
|
||||||
|
- [x] WebUI 配置热加载
|
||||||
|
- [x] Watchdog 自动保活
|
||||||
|
- [x] 数据库迁移引擎(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 权限执行:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -sSL https://git.whitetop.xyz/lxh2875931338/frps-console/raw/main/deploy.sh | sudo bash
|
||||||
|
```
|
||||||
|
|
||||||
|
**脚本做了什么?**
|
||||||
|
|
||||||
|
1. 检测 CPU 架构(x86_64/ARM64/ARMv7)和发行版(甚至优先适配 openSUSE,因为作者用它)。
|
||||||
|
2. 自动安装依赖(Git、Curl、Wget、Go 1.25.0)。
|
||||||
|
3. 若 `go.mod` 中 Go 版本过高(如 1.25),自动降级为 `go 1.21` 以兼容老旧系统。
|
||||||
|
4. 编译静态二进制,构建 Docker 镜像,以 `--network host` 启动容器。
|
||||||
|
5. 数据目录 `/opt/frps-console/data` 持久化挂载,容器删除重建数据不丢。
|
||||||
|
6. 编译时已加 `-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 | 时区设置 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧬 进程模型与高可用
|
||||||
|
|
||||||
|
```text
|
||||||
|
┌─────────────────┐ 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)
|
||||||
|
|
||||||
|
**计划路线图**:
|
||||||
|
- [x] 内嵌多平台 frps 二进制
|
||||||
|
- [x] WebUI 配置热加载
|
||||||
|
- [x] Watchdog 自动保活
|
||||||
|
- [x] 数据库迁移引擎(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](https://github.com/fatedier/frp)
|
||||||
|
|
||||||
|
|
||||||
|
- 同系项目:[frpc-console](https://git.whitetop.xyz/lxh2875931338/frpc-console)(客户端管理面板,形成“云端 + 客户端”双星架构)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📄 许可证
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**如果这个项目对你有用,欢迎给它点个 Star ⭐**
|
||||||
|
**问题反馈**:Git Issues(仓库链接)
|
||||||
Reference in New Issue
Block a user