CeFRP Panel 文档
CeFRP Panel 是一款专业的 FRP 内网穿透管理面板,基于 Go + Vue 开发,提供完善的用户管理、节点管理、隧道管理、支付系统等功能。
主要特性
- 多用户管理:用户注册、登录、权限控制
- 多节点支持:节点分组、状态监控、一键部署
- 隧道管理:TCP/UDP/HTTP/HTTPS 多协议支持
- 流量统计:实时带宽监控、详细报表
- 在线支付:支付宝、微信支付集成
- 卡密系统:充值卡生成、批量导出
环境要求
| 组件 | 要求 |
|---|---|
| 操作系统 | Linux (推荐 Ubuntu 20.04+ / CentOS 7+) |
| CPU | 1 核心以上 |
| 内存 | 512MB 以上 |
| 数据库 | MySQL 5.7+ / MariaDB 10.3+ |
| 端口 | 80/443 (Web)、7000 (frps) |
安装部署
1. 下载程序
登录 授权系统 下载最新版本的 CeFRP Panel:
# 创建目录
mkdir -p /opt/cefrp-panel
cd /opt/cefrp-panel
# 从授权系统下载程序包后上传到服务器,然后解压
tar -xzf panel-linux-amd64.tar.gz
2. 配置数据库
创建 MySQL 数据库:
# 登录 MySQL
mysql -u root -p
# 创建数据库和用户
CREATE DATABASE cefrp_panel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'cefrp'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON cefrp_panel.* TO 'cefrp'@'localhost';
FLUSH PRIVILEGES;
3. 修改配置文件
编辑 config.yaml 配置文件:
# 服务配置
server:
host: 0.0.0.0
port: 8080
# 数据库配置
database:
type: mysql
host: 127.0.0.1
port: 3306
name: cefrp_panel
user: cefrp
password: your_password
# 授权配置
license:
key: your_license_key
4. 启动服务
# 直接运行
./cefrp-panel
# 或使用 systemd 管理
cat > /etc/systemd/system/cefrp-panel.service << EOF
[Unit]
Description=CeFRP Panel
After=network.target mysql.service
[Service]
Type=simple
WorkingDirectory=/opt/cefrp-panel
ExecStart=/opt/cefrp-panel/cefrp-panel
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable cefrp-panel
systemctl start cefrp-panel
5. 配置反向代理(可选)
使用 Nginx 配置反向代理:
server {
listen 80;
server_name panel.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
配置说明
完整的配置文件示例:
# config.yaml
# 服务配置
server:
host: 0.0.0.0
port: 8080
admin_path: /admin # 后台路径
# 数据库配置
database:
type: mysql
host: 127.0.0.1
port: 3306
name: cefrp_panel
user: cefrp
password: your_password
# JWT 配置
jwt:
secret: your_jwt_secret_key
expire: 168h # Token 过期时间
# 授权配置
license:
key: your_license_key
# 邮件配置(可选)
email:
smtp_host: smtp.example.com
smtp_port: 465
smtp_user: noreply@example.com
smtp_pass: your_email_password
from_name: CeFRP Panel
API 接口概述
CeFRP Panel 提供 RESTful API 接口,方便开发者进行二次开发和集成。
基础信息
| Base URL | https://your-panel.com/api |
| 数据格式 | JSON |
| 认证方式 | Bearer Token |
响应格式
{
"success": true,
"data": { ... },
"error": null
}
错误响应
{
"success": false,
"data": null,
"error": {
"code": 1001,
"message": "错误信息"
}
}
请求头
Content-Type: application/json
Authorization: Bearer <token>
认证接口
POST
/api/auth/login
用户登录
请求参数:
{
"username": "user@example.com",
"password": "your_password",
"captcha_code": "1234", // 验证码(如果开启)
"captcha_id": "xxx" // 验证码ID
}
响应示例:
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": {
"id": 1,
"username": "user@example.com",
"nickname": "用户昵称"
}
}
}
POST
/api/auth/register
用户注册
请求参数:
{
"username": "newuser",
"email": "user@example.com",
"password": "your_password",
"captcha_code": "1234",
"captcha_id": "xxx"
}
GET
/api/site/captcha
获取验证码
响应示例:
{
"success": true,
"data": {
"captcha_id": "xxx",
"captcha_type": "image",
"captcha_img": "data:image/svg+xml;base64,..."
}
}
用户接口
GET
/api/user/profile
获取用户信息
响应示例:
{
"success": true,
"data": {
"id": 1,
"username": "user",
"email": "user@example.com",
"nickname": "用户昵称",
"balance": 100.00,
"traffic_used": 1073741824,
"traffic_limit": 10737418240,
"group": {
"id": 1,
"name": "普通用户"
}
}
}
GET
/api/user/balance
获取余额信息
{
"success": true,
"data": {
"balance": 100.00,
"traffic_used": 1073741824,
"traffic_limit": 10737418240
}
}
隧道接口
GET
/api/user/tunnels
获取隧道列表
响应示例:
{
"success": true,
"data": {
"tunnels": [
{
"id": 1,
"name": "web-server",
"type": "http",
"local_ip": "127.0.0.1",
"local_port": 8080,
"remote_port": 0,
"domain": "web.example.com",
"status": "online",
"node_id": 1,
"node_name": "节点1",
"node_host": "node1.example.com",
"upload_bytes": 1024000,
"download_bytes": 2048000
}
]
}
}
POST
/api/user/tunnels
创建隧道
请求参数:
{
"name": "my-tunnel",
"type": "tcp",
"local_ip": "127.0.0.1",
"local_port": 3306,
"remote_port": 0, // 0 表示自动分配
"node_id": 1
}
GET
/api/user/tunnels/{id}/config
获取隧道配置
响应示例:
{
"success": true,
"data": {
"config": "[common]\nserver_addr = node1.example.com\n..."
}
}
DELETE
/api/user/tunnels/{id}
删除隧道
节点接口
GET
/api/user/nodes
获取可用节点列表
响应示例:
{
"success": true,
"data": {
"nodes": [
{
"id": 1,
"name": "香港节点",
"host": "hk.example.com",
"port": 7000,
"status": "online",
"region": "香港",
"supported_types": ["tcp", "udp", "http", "https"],
"group_id": 1,
"group_name": "亚洲节点"
}
]
}
}
GET
/api/user/node-groups
获取可访问的节点分组
GET
/api/user/bandwidth-tiers
获取带宽档位列表
流量包接口
GET
/api/user/packages/store
获取流量包商店
响应示例:
{
"success": true,
"data": {
"categories": [
{
"id": 1,
"name": "基础套餐",
"packages": [
{
"id": 1,
"name": "入门流量包",
"traffic_amount_gb": 10,
"bandwidth_limit": 10,
"validity_days": 30,
"price": 9.9
}
]
}
],
"user_discount": 0.9,
"membership_name": "普通会员"
}
}
GET
/api/user/packages
获取我的流量包列表
查询参数:
status- 可选,筛选状态(active: 仅活跃的)
GET
/api/user/packages/preview/{id}
获取购买预览(含折扣计算)
POST
/api/user/packages/purchase
购买流量包
请求参数:
{
"package_type_id": 1,
"name": "我的流量包", // 可选,自定义名称
"coupon_code": "DISCOUNT10" // 可选,优惠券码
}
余额与账单接口
GET
/api/user/balance
获取余额信息
响应示例:
{
"success": true,
"data": {
"balance": 100.00,
"traffic_balance": 1073741824,
"traffic_balance_gb": 1.0,
"package_traffic_gb": 10.0,
"total_traffic_gb": 11.0,
"active_packages": 2,
"monthly_consume": 50.00,
"monthly_traffic": 5368709120
}
}
POST
/api/user/recharge
余额充值
请求参数:
{
"amount": 100.00,
"payment_method": "alipay" // alipay/wechat/epay_zfb/epay_wx
}
响应示例:
{
"success": true,
"data": {
"order_no": "ALI20260109123456",
"amount": 100.00,
"pay_url": "https://...",
"qr_code": "data:image/png;base64,...",
"expire_at": "2026-01-09 12:30:00"
}
}
GET
/api/user/billing
获取账单记录
查询参数:
page- 页码,默认 1page_size- 每页数量,默认 20start_date- 开始日期 (YYYY-MM-DD)end_date- 结束日期 (YYYY-MM-DD)export- 设为 csv 导出 CSV 文件
GET
/api/user/billing/trends
获取流量趋势图数据
GET
/api/user/transactions
获取交易记录
查询参数:
type- 可选,筛选类型(recharge: 充值, consume: 消费)
GET
/api/user/order/status?order_no=xxx
查询订单支付状态
签到接口
POST
/api/user/checkin
每日签到
GET
/api/user/checkin/status
获取签到状态
GET
/api/user/checkin/history
获取签到历史
工单接口
GET
/api/user/tickets
获取工单列表
POST
/api/user/tickets
创建工单
GET
/api/user/tickets/{id}
获取工单详情
POST
/api/user/tickets/{id}/reply
回复工单
POST
/api/user/tickets/{id}/close
关闭工单
卡密接口
POST
/api/user/card-key/redeem
兑换卡密
请求参数:
{
"code": "XXXX-XXXX-XXXX-XXXX"
}
公开接口
以下接口无需认证即可访问:
GET
/api/site/info
获取站点信息
响应示例:
{
"success": true,
"data": {
"site_name": "CeFRP",
"site_description": "专业的内网穿透服务",
"register_enabled": true,
"captcha_enabled": true,
"captcha_type": "image"
}
}
GET
/api/site/captcha
获取验证码
GET
/api/site/payment-config
获取支付配置
GET
/api/public/packages
获取公开流量包列表
GET
/api/public/downloads
获取下载列表
FRPC 客户端接口
以下接口用于 FRPC 客户端获取配置,使用 Token 认证:
GET
/api/public/frpc/config
获取 FRPC 配置
查询参数:
u- 用户名p- 用户 Tokentunnel_id- 可选,指定隧道 ID
此接口用于 frpc 命令行启动:
frpc -u 用户名 -p Token
GET
/api/public/tunnels
获取用户隧道列表(GUI 客户端用)
查询参数:
username- 用户名token- 用户 Token
错误码说明
| 错误码 | 说明 |
|---|---|
| 1000 | 请求参数错误 |
| 1001 | 无效的邀请码 |
| 1004 | 用户名已存在 |
| 1005 | 邮箱已注册 |
| 1010 | 验证码错误 |
| 2001 | 用户名或密码错误 |
| 2002 | 账户已锁定/禁用 |
| 2003 | 未授权访问 |
| 2005 | 账户已封禁 |
| 3001 | 余额不足 |
| 4001 | 节点不存在/不可用 |
| 4002 | 端口/域名已被占用 |
| 4003 | 配置无效 |
| 4010 | 系统授权无效 |
| 4011 | 数量已达上限 |
| 4029 | 请求过于频繁 |
| 5001 | 服务器内部错误 |