0fe3d4ce8ee7ced8a42994bd95f9099b8ae687f7
ImageForge - Rust 图片压缩服务
一个基于 Rust 的高性能图片压缩服务,提供 Web 界面 + 对外 API(API Key)+ 计费能力,支持用户系统与管理员后台。
项目概述
核心功能
- 图片压缩:支持 PNG/JPG/JPEG/WebP/AVIF/GIF/BMP/TIFF/ICO(仅静态图片,支持格式转换)
- 批量处理:支持多图片同时上传和处理
- 压缩率:1-100(JPEG/WebP/AVIF 以该比例为体积上限;无损格式按安全方式尽力优化)
- 用户系统:注册、登录、可开关邮箱验证、API Key 管理
- 兑换码:套餐卡、限时次数卡、批量生成、停用与兑换审计
- 计费与用量:套餐/订阅/配额/发票
- 管理员后台:用户管理、系统监控、配置管理、S3 多端点管理与连通性测试
- 对象存储:Garage/MinIO/AWS S3 兼容,私有 Bucket + 短期签名直连下载
技术栈
| 层级 | 技术选型 | 说明 |
|---|---|---|
| 后端框架 | Axum | 高性能异步 Web 框架 |
| 图片处理 | image-rs + oxipng + webp + ravif | PNG/WebP/AVIF 编解码与优化 |
| 数据库 | PostgreSQL + SQLx | 类型安全的异步数据库 |
| 缓存/队列 | Redis | 会话管理、限流、任务队列(Streams) |
| 前端 | Vue3 + TypeScript | SPA 单页应用 |
| 认证 | JWT + API Key | 双重认证机制 |
| 存储 | 本地文件系统 + AWS S3 SDK | 支持动态 S3 端点、分片上传、签名下载和本地回退 |
| 计费 | Stripe | Checkout/Portal/Webhook |
目录结构
说明:以下为目标目录结构(规划),会随实现逐步补齐。
imageforge/
├── Cargo.toml
├── src/
│ ├── main.rs # 入口
│ ├── config.rs # 配置管理
│ ├── error.rs # 错误处理
│ ├── lib.rs
│ │
│ ├── api/ # API 路由
│ │ ├── mod.rs
│ │ ├── auth.rs # 认证相关
│ │ ├── compress.rs # 压缩相关
│ │ ├── user.rs # 用户相关
│ │ └── admin.rs # 管理员相关
│ │
│ ├── services/ # 业务逻辑
│ │ ├── mod.rs
│ │ ├── compress.rs # 压缩服务
│ │ ├── auth.rs # 认证服务
│ │ ├── user.rs # 用户服务
│ │ └── storage.rs # 存储服务
│ │
│ ├── models/ # 数据模型
│ │ ├── mod.rs
│ │ ├── user.rs
│ │ ├── image.rs
│ │ └── api_key.rs
│ │
│ ├── compress/ # 压缩核心
│ │ ├── mod.rs
│ │ ├── png.rs # PNG 压缩(oxipng + pngquant)
│ │ ├── jpeg.rs # JPEG 压缩(mozjpeg)
│ │ ├── webp.rs # WebP 压缩
│ │ └── avif.rs # AVIF 压缩
│ │
│ └── middleware/ # 中间件
│ ├── mod.rs
│ ├── auth.rs # 认证中间件
│ └── rate_limit.rs # 限流中间件
│
├── migrations/ # 数据库迁移
├── static/ # 静态资源
├── frontend/ # 前端项目
└── docker/ # Docker 配置
快速开始
环境要求
- Rust(建议使用最新 stable;当前依赖链要求
>= 1.91,生产镜像使用 1.92) - PostgreSQL 16+
- Redis 7+
- Node.js 22+(前端构建)
本地开发
# 配置环境变量
cp .env.example .env
# 启动 PostgreSQL / Redis(开发)
docker compose -f docker/docker-compose.dev.yml up -d
# 首次启动时会自动按顺序执行 migrations/ 下的全部迁移
# 启动后端
cargo run
# 启动前端(另一个终端)
cd frontend && npm run dev
Docker 部署
cp docker/.env.production.example .env.production
# 修改全部密钥与 PUBLIC_BASE_URL 后启动完整生产栈
docker compose --env-file .env.production -f docker/docker-compose.prod.yml up -d --build
curl --fail http://127.0.0.1:8080/health
详细配置、更新、备份与真实图片质量回归见 部署指南。
文档索引
- 开工前确认清单
- 产品需求(PRD)
- 技术架构设计
- API 接口文档
- 数据库设计
- 前端设计
- UI/UX 设计
- 计费与用量设计
- 安全与风控
- 邮件服务
- 可观测性
- 部署指南
- 双服务器 S3 方案
- 服务条款(模板)
- 隐私政策(模板)
已确认清单
- 支付渠道首期选型:Stripe
- 计费策略:硬配额(无超额按量)
- 匿名试用:支持,每日 10 次
- 订阅周期:按订阅周期(非自然月)
- 邮件服务:注册验证 + 密码重置(SMTP,预置多服务商模板)
- 默认语言:中文
- Free 套餐 API:不开放(仅 Pro/Business 可用)
待完成清单(上线前)
- 法务页面:隐私政策、服务条款(已提供模板)
- 域名与品牌名最终确认
License
MIT
Description
Languages
Rust
76.8%
Vue
16.3%
TypeScript
2.8%
PLpgSQL
1.7%
Python
1.4%
Other
0.9%