Files
frpc-console/readme.md
T
2026-08-03 22:58:24 +08:00

276 lines
11 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.
<p align="center">
<img src="static/logo.svg" alt="frpc-console" width="360" />
</p>
# frpc-console
> 轻量级 frpc 管理面板 —— 为你的内网穿透插上翅膀
[![Release](https://img.shields.io/gitea/v/release/lxh2875931338/frpc-console?gitea_url=https://git.whitetop.xyz)](https://git.whitetop.xyz/lxh2875931338/frpc-console/releases)
[![Go Version](https://img.shields.io/badge/Go-1.21+-00ADD8?style=flat&logo=go)](https://golang.org/)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
---
## 📖 简介
**frpc-console** 是一个专为 [frp](https://github.com/fatedier/frp) 设计的轻量级管理工具。本项目旨在以无限接近原生占用的情况下,实现完全图形化的控制工具(毕竟 WebUI 也算图形化,对吧?)
### ✨ 核心特性
- 🔐 **首次启动引导** —— Web 端完成管理员注册,无需 CLI 交互
- 📋 **隧道全生命周期管理** —— 增删改查 + 一键启用/禁用
- 📦 **导入/导出 TOML** —— 无缝迁移现有 frpc 配置
- 🔄 **配置热加载** —— 修改即生效,无需重启 frpc
- 🖥️ **多平台支持** —— Windows / Linux / ARM 全平台兼容
- 🐳 **容器化就绪** —— 提供 Docker 镜像,开箱即用
- 🎨 **深色磨砂玻璃 UI** —— 现代化视觉体验,日夜皆宜
---
## 🚀 快速开始
### 🐧 二进制安装(推荐)
适用于 Linux / Windows,无需 Docker,单文件运行。
👉 详见:[二进制安装指南](./INSTALL_BINARY.md)
### 🐳 Docker 部署(一键脚本)
适用于 Linux 服务器,自动编译 + 自动部署。
```bash
curl -sSL https://git.whitetop.xyz/lxh2875931338/frpc-console/raw/main/deploy.sh | sudo bash
```
👉 详见:[Docker 安装指南](./INSTALL_DOCKER.md)
### 🔧 源码编译
适合开发者或需要自定义配置的用户。
```bash
git clone https://git.whitetop.xyz/lxh2875931338/frpc-console.git
cd frpc-console
go mod tidy
go build -o frpc-console .
./frpc-console
```
首次访问 `http://localhost:9300` 注册管理员账户,然后导入你的 `frpc.toml` 即可开始使用。
---
## 🗂️ 项目结构
```txt
frpc-console/
├── main.go # 入口
├── api.go # HTTP 路由 & Handler
├── db.go # SQLite 数据库操作
├── auth.go # JWT 认证 & 密码管理
├── frp.go # frpc 管理核心逻辑
├── toml_parser.go # TOML 解析器
├── static/ # 前端静态资源
│ ├── fonts
│ │ └── HarmonyOS_Sans_SC_Regular.ttf
│ ├── index.html
│ ├── app.js
│ ├── style-1.css # 全局基础样式
│ ├── style-2.css # 登录页样式
│ ├── style-3.css # 主界面样式
│ └── style-4.css
├── bin/ # 内嵌 frpc 二进制 (多平台)
│ ├── frpc_windows_amd64.exe
│ ├── frpc_linux_amd64
│ ├── frpc_linux_arm64
│ └── frpc_linux_arm_hf
├── frpc.tmpl # frpc 配置模板
├── Dockerfile
└── go.mod
```
## ⚙️ 配置说明
### 环境变量
| 变量 | 说明 | 默认值 |
|---|---|---|
| PORT | 监听端口 | 9300 |
### 数据存储
· 数据库文件:./frpc-console.db</br>
· frpc 配置文件:./frpc.toml</br>
· frpc 日志文件:./frpc.log</br>
---
## 🛠️ 开发指南
```bash
# 克隆项目
git clone https://github.com/lxh2875931338/frpc-console.git
cd frpc-console
# 安装依赖
go mod tidy
# 开发模式运行
go run .
# 编译生产版本
go build -ldflags="-s -w" -o frpc-console .
```
## 前端开发
前端使用 Vue 3 CDN + Naive UI,无需额外构建工具。修改 static/ 目录下的文件后,刷新浏览器即可预览效果。
---
## 🔧 常见问题
#### Q: 如何修改管理员密码?
登录后,在「全局配置」页面顶部找到「账户管理」区域,输入当前密码和新密码即可。
#### Q: 如何导入现有的 frpc.toml
在「隧道列表」页面点击「导入 TOML」,选择你的 frpc.toml 文件即可。
#### Q: frpc 启动失败怎么办?
如果是首次启动,console 会自动生成一份符合官方规范的 `frps.toml` 配置文件,通常不需要额外操作。
如果在使用过程中遇到启动失败,可以按以下步骤排查:
1. **检查配置是否正确** —— 在「全局配置」页面重新配置一次服务端参数,或导入已有的 `frpc.toml` 配置文件,console 会自动应用并尝试重启
2. **查看日志定位问题** —— 若上述操作后仍然失败,请查看 `./frpc.log` 日志文件,定位具体报错原因
> 日志文件的位置:与 `frpc-console` 二进制同级目录下的 `frpc.log`。Docker 部署时,可通过 `docker logs frpc-console` 查看容器输出。
#### Q: 支持哪些 frp 版本?
目前支持情况如下:
| 系统 | 架构版本 | 版本号 |
|---|---|---|
| Linux | AMD64/x86-64 | 0.70.0 |
| Linux | ARM64/Aarch64 | 0.70.0 |
| Linux | ARM_hf/ARMv7l | 0.70.0 |
| Windows | AMD64/x86-64 | 0.70.0 |
> 行了行了,Windows 版和 Linux 版版本号已同步。不用再等了。
#### Q: 为什么不用 / 不推荐 Podux?
Podux 是个好项目,理念上和我们是一致的:用 Web 界面管理 frpc</br>
但它的设计取向和我们完全不同:
| 对比项 | frpc-console | Podux |
|---|---|---|
| 数据库 | SQLite(单文件,几 MB | PocketBase(带 Admin UI、用户系统、全套 API |
| 前端 | Vue CDN | React + Webpack |
| 实机内存占用 | **~50 MB** | **没启动成功,1GB RAM 独立分配仍 OOM(原因不明)** |
| 镜像大小 | 封装二进制frpc后均值 173.86 MB | 76.1 MB |
| 二进制大小 | 4平台均值93M | 12.4 MB |
| 部署方式 | 单二进制 / Docker | 单二进制 / Docker |
| 多平台支持 | ✅ 原生交叉编译 | ✅ 原生交叉编译 |
> Podux 与其说是一个 frp 控制面板,不如说是一个“一站式 frp 管理器 + 可视化数据流面板 + 通道保活监测工具”。这种一站式本身没毛病,甚至功能实现非常到位。</br>但 podux 的框架选型有点重,细节也稍显仓促,最终结果就是内存占用相当夸张——1GB 都未必够它霍霍的,而且你根本不知道这些内存都花在了哪里。PocketBase 自带 WebUI 的情况下,Podux 还要再包一层 WebUI——相当于给数据库的 UI 又套了个 UI。更费解的是,这层 WebUI 只支持导入,不支持导出。这设计确实让人有点摸不着头脑啦……</br>所以干脆换了一套轻量化工具自己上咯~
> 不过现在的 frpc-console,更倾向于拿存储换内存呢……</br>毕竟内存卡也好,硬盘也罢,即使是嵌入式平台,价格都不算很离谱,也就是一张大点的64G或者128G内存卡的事情</br>但是内存可就不一样了哦,这玩意在嵌入式平台是真的寸土寸金呢……</br>咱就举个例子吧,RK3506128和256M版本共存;全志H3256 和 512M 内存并存</br>虽然这俩都不算太极端,尤其是全志 H3,挤一挤甚至 docker 版也能装得上,但是也能说明,在一些廉价的低功耗开发板上,内存容量其实真的很稀缺……</br>所以牺牲一点存储空间(镜像大了几十 MB),换来 50MB 的内存占用,这笔账怎么算都不亏,对吧?
### Q: 为什么不直接用 frp 官方提供的 web 界面?
frp 官方确实提供了 `dashboard``frpc-admin` 功能,但它们更多是“监控”视角,而非“管理”视角。你需要手动编辑配置文件,重启 frpc,或者依赖命令行操作。
frpc-console 的目标是:
- **点一点就能新增隧道**
- **开关一拨就能启用/禁用**
- **导入导出无缝迁移**
- **热加载无需重启**
#### Q: 如果 frpc-console 进程挂了,frpc 本身会受影响吗?
**不会。**
这是 frp-console 系列工具与同类项目最核心的区别之一。我们称之为 **“阴阳模式”**。
**什么是“阴阳模式”?**
- **阴**:看不见的业务流(frpc 进程、toml 配置文件)
- **阳**:看得见的管理面板(Web 界面、API 服务)
大多数管理工具走的是 **“阳阴模式”**:面板是大脑,业务是肢体。大脑一旦停止工作,肢体也就瘫痪了。
**frpc-console 走的是“阴阳模式”:业务是根基,面板是工具。**
**二进制部署:**
frpc-console 启动时,通过 `Setsid` 为 frpc 创建独立会话,使其完全脱离父进程的生命周期控制。即使 SSH 断开导致 console 退出,frps 也会被 init 进程(PID 1)接管,继续稳定运行。
**Docker 部署:**
容器使用 `--restart=always`console 退出时 Docker 自动重启并重新拉起 frpc。数据目录通过卷挂载持久化,配置不丢失。
两种部署方式的本质一致:**面板是“阳”,服务于“阴”;“阴”不依赖“阳”而存在。**
**为什么同类项目很少这样做?**
因为大多数管理工具默认“面板是前提条件”,而忽略了:**真正需要长期稳定运行的是隧道本身,而不是管理界面的进程。**
> **管理面板可以丢,业务功能打死不能停。**
### Q: 支持 frp 的所有功能吗?
frpc-console 覆盖了 frp 最核心的 **TCP 隧道管理** 功能,包括 `tcpMux`、负载均衡、心跳配置等。如果你有更复杂的需求(比如 STCP、XTCP、P2P),欢迎提 issue,我们会评估是否加入。
## 🧠 设计哲学
frpc-console 遵循 **“够用就好”** 的原则:
1. **工具应该和它所管理的对象一样轻量。** 管理面板不该成为比业务本身更重的负担。
2. **用最简单的技术栈,做最核心的事。** SQLite 单文件存数据,Vue CDN 写界面,Go 单二进制交付——没有多余依赖,没有构建工具链,改完就能跑。
3. **数据归数据,二进制归二进制。** 版本信息从编译时注入解耦为运行时读取,数据库、配置、日志统一归入 `data/` 目录,挂载点收窄到数据本身,而非整个应用。
4. **业务是目的,面板是手段。** 业务进程独立于管理面板存在,面板可以随时挂、随时重启、随时升级,隧道业务不能受任何干扰。
5. **存储换内存,在嵌入式平台上不是交易,是生存策略。** 镜像可以大几十 MB,但内存必须省——因为内存卡便宜,内存颗粒贵。
---
## 📝 更新日志
#### 相关更新日志请查看[update-logs.md](./update-logs.md)
---
## 📄 许可证
MIT License © 2026 lxh2875931338XHLiang0
---
## 🙏 相关项目援引
### FRP 生态互补工具
· [MoonProxy](https://github.com/MoonProxyHQ/moonproxy-desktop) —— 基于 Tauri v2 + Vue 3 + Rust 构建的跨平台 FRP 桌面客户端(frpc GUI),面向 macOS 与 Windows,让内网穿透开箱即用,MIT协议开源。
### FRP 生态同类工具(暂无互引)
</br>
---
## 🙏 致谢
· fatedier/frp —— 强大的内网穿透工具</br>
· gin-gonic/gin —— 高性能 Go Web 框架</br>
· vuejs/vue —— 渐进式 JavaScript 框架