Skip to content

Latest commit

 

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PPanel Backend (Rust)

License Rust Axum sqlx

PPanel 服务端的 Rust 重写版本 — 基于 Axum + sqlx,同时支持 MySQL / MariaDB 和 PostgreSQL。


📋 概述

ppanel-backendPPanel 服务端 (Go) 的 Rust 移植版本,使用 Axum 0.8 + sqlx 0.9 + Tokio 构建,与 Go 版本保持完整的 API 兼容性。

与 Go 版本的差异与改进

维度 Go 版 Rust 版
HTTP 框架 Hertz Axum 0.8
ORM GORM sqlx 0.9(编译期 SQL 检查)
异步运行时 goroutine Tokio
内存安全 GC 所有权系统,无 GC 暂停

核心特性

  • 多协议支持:Shadowsocks、V2Ray、VLESS、Trojan、Hysteria2、TUIC 等
  • 双数据库后端:MySQL / MariaDB 和 PostgreSQL 共用一套代码,运行时自动检测方言
  • 完整 API 兼容:与 Go 版本接口一一对应,可无缝替换
  • OpenTelemetry 可观测性:stdout / OTLP gRPC / OTLP HTTP 链路追踪
  • Redis 限流:验证码发送间隔(60 秒)+ 每日上限(15 次)
  • Cloudflare Turnstile:登录 / 注册 / 重置密码三处人机验证
  • 异步任务队列:基于 asynq(Redis),兼容 Go 版任务类型键名
  • 定时调度器:订阅检查(60s)、流量重置(00:30)、流量统计(00:00)、汇率更新(01:00)

🚀 快速开始

前提条件

  • Rust 1.75+(推荐使用 rustup 安装)
  • MySQL 8.0+ / MariaDB 10.6+PostgreSQL 14+
  • Redis 6.0+
  • Git

从源码运行

# 1. 克隆仓库
git clone https://github.com/perfect-panel/ppanel-backend.git
cd ppanel-backend

# 2. 复制并编辑配置
cp config.example.yaml config.yaml
# 编辑 config.yaml,填写数据库、Redis、JWT 等配置

# 3. 编译并运行
cargo run --release

服务默认监听 0.0.0.0:8080/health 路由返回 ok

配置文件

配置文件路径默认为 config.yaml,可通过环境变量 PPANEL_CONFIG 覆盖:

PPANEL_CONFIG=/etc/ppanel/config.yaml cargo run --release

最小配置示例(MySQL):

Host: 0.0.0.0
Port: 8080
Model: prod          # prod | dev(dev 模式跳过 Turnstile 验证)

JwtAuth:
  AccessSecret: "your-secret-here"
  AccessExpire: 86400

Database:
  Driver: mysql
  Addr: "127.0.0.1:3306"
  Username: ppanel
  Password: your-password
  DBName: ppanel

Redis:
  Host: "127.0.0.1:6379"

Administrator:
  Email: admin@example.com
  Password: changeme

PostgreSQL 只需把 Driver 改为 postgresAddr 改为 PG 格式即可。


🗄 数据库迁移

启动时自动执行迁移,无需额外命令。

迁移文件位于:

  • migrations/mysql/ — MySQL / MariaDB
  • migrations/postgres/ — PostgreSQL

每个版本同时提供 *.sql(正向)和 *.down.sql(回滚)。

从 MySQL 迁移到 PostgreSQL

使用内置工具:

cargo build --release -p mysql2postgres
./target/release/mysql2postgres \
  --mysql  "user:pass@tcp(127.0.0.1:3306)/ppanel" \
  --postgres "postgres://user:pass@127.0.0.1/ppanel" \
  --dry-run   # 先预览,确认无误后去掉此参数

📁 目录结构

ppanel-backend/
├── crates/               # 独立库 crate
│   ├── email/            # 邮件发送
│   ├── ip/               # IP 地理位置
│   ├── jwt/              # JWT 签发 / 验证
│   ├── oauth/            # OAuth2(Google / Apple / Telegram)
│   ├── password/         # 密码哈希(PBKDF2 / bcrypt / MD5 / SHA-256)
│   ├── payment/          # 支付平台(Alipay / ePay / Stripe)
│   ├── result/           # HTTP 统一响应格式与错误码
│   ├── sms/              # 短信(阿里云 / Twilio / SmsBao / AboSend)
│   └── turnstile/        # Cloudflare Turnstile 验证
├── migrations/           # 数据库迁移 SQL
│   ├── mysql/
│   └── postgres/
├── src/
│   ├── adapter/          # 代理协议适配器(生成订阅链接)
│   ├── config/           # 配置结构体
│   ├── handler/          # HTTP 路由与处理器
│   │   ├── admin/        # 管理员 API
│   │   ├── auth/         # 认证 API
│   │   ├── common/       # 公共 API
│   │   ├── notify/       # 支付回调
│   │   ├── public/       # 用户 API
│   │   └── server/       # 节点 API
│   ├── middleware/        # HTTP 中间件
│   ├── model/            # 数据模型(entity + DTO)
│   ├── queue/            # 异步任务队列
│   ├── repository/       # 数据访问层(MySQL + PG 双实现)
│   ├── scheduler/        # 定时任务
│   ├── service/          # 业务逻辑
│   │   ├── admin/
│   │   ├── auth/
│   │   ├── common/
│   │   ├── public/
│   │   ├── server/
│   │   └── telegram/
│   ├── exchange_rate.rs  # 汇率换算工具
│   ├── tracing_otel.rs   # OpenTelemetry 初始化
│   └── main.rs
├── tools/
│   └── mysql2postgres/   # MySQL → PostgreSQL 数据迁移工具
├── Cargo.toml
└── config.example.yaml

🔗 API 兼容性

本版本与 Go 服务端 API 完全兼容,可直接对接:


🧪 开发

运行测试

cargo test

代码检查

cargo check
cargo clippy

构建发布版

cargo build --release
# 产物:./target/release/ppanel-backend

OpenTelemetry 链路追踪

在配置文件中添加:

Trace:
  Name: ppanel
  Batcher: stdout          # stdout | otlpgrpc | otlphttp
  Endpoint: ""             # 留空 + stdout 时输出到控制台
  Sampler: 1.0
  Disabled: false

🤝 贡献

欢迎 PR 和 Issue。移植工作参考 Go 原版 (../server),Rust 实现遵循 AGENTS.md 中记录的约定。

📄 许可证

本项目采用 Apache License 2.0 授权。

Star History

Star History Chart

About

No description, website, or topics provided.

Resources

Stars

413 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages