125 lines
4.5 KiB
Markdown
125 lines
4.5 KiB
Markdown
# 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 # API / Worker 进程入口
|
||
│ ├── auth.rs # JWT 签发与解析
|
||
│ ├── config.rs # 环境变量配置
|
||
│ ├── error.rs # 统一错误响应
|
||
│ ├── api/ # HTTP 路由、鉴权、压缩、管理后台
|
||
│ ├── services/ # 压缩、存储、计费、限速、邮件等服务
|
||
│ └── worker/ # Redis Streams 消费与任务处理
|
||
├── migrations/ # SQLx 数据库迁移
|
||
├── frontend/src/ # Vue3 管理端与用户端
|
||
├── docker/ # 镜像、Compose 与 Nginx 配置
|
||
├── docs/ # 设计、API、部署与运维文档
|
||
└── scripts/ # 部署和质量回归脚本
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
### 环境要求
|
||
|
||
- Rust(建议使用最新 stable;当前依赖链要求 `>= 1.91`,生产镜像使用 1.92)
|
||
- PostgreSQL 16+
|
||
- Redis 7+
|
||
- Node.js 22+(前端构建)
|
||
|
||
### 本地开发
|
||
|
||
```bash
|
||
# 配置环境变量
|
||
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 部署
|
||
|
||
```bash
|
||
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
|
||
```
|
||
|
||
详细配置、更新、备份与真实图片质量回归见 [部署指南](./docs/deployment.md)。
|
||
|
||
## 文档索引
|
||
|
||
- [开工前确认清单](./docs/confirm.md)
|
||
- [产品需求(PRD)](./docs/prd.md)
|
||
- [技术架构设计](./docs/architecture.md)
|
||
- [API 接口文档](./docs/api.md)
|
||
- [数据库设计](./docs/database.md)
|
||
- [前端设计](./docs/frontend.md)
|
||
- [UI/UX 设计](./docs/ui.md)
|
||
- [计费与用量设计](./docs/billing.md)
|
||
- [安全与风控](./docs/security.md)
|
||
- [邮件服务](./docs/email.md)
|
||
- [可观测性](./docs/observability.md)
|
||
- [部署指南](./docs/deployment.md)
|
||
- [双服务器 S3 方案](./docs/s3-storage-plan.md)
|
||
- [服务条款(模板)](./docs/terms.md)
|
||
- [隐私政策(模板)](./docs/privacy.md)
|
||
|
||
## 已确认清单
|
||
|
||
- [x] 支付渠道首期选型:Stripe
|
||
- [x] 计费策略:硬配额(无超额按量)
|
||
- [x] 匿名试用:支持,每日 10 次
|
||
- [x] 订阅周期:按订阅周期(非自然月)
|
||
- [x] 邮件服务:注册验证 + 密码重置(SMTP,预置多服务商模板)
|
||
- [x] 默认语言:中文
|
||
- [x] Free 套餐 API:不开放(仅 Pro/Business 可用)
|
||
|
||
## 待完成清单(上线前)
|
||
|
||
- [x] 法务页面:隐私政策、服务条款(已提供模板)
|
||
- [ ] 域名与品牌名最终确认
|
||
|
||
## License
|
||
|
||
MIT
|