Files
ystp/README.md

156 lines
5.5 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.
# ImageForge - Rust 图片压缩服务
一个基于 Rust 的高性能图片压缩服务,提供 Web 界面 + 对外 APIAPI Key+ 计费能力,支持用户系统与管理员后台。
## 项目概述
### 核心功能
- **图片压缩**:支持 PNG/JPG/JPEG/WebP/AVIF/GIF/BMP/TIFF/ICO仅静态图片支持格式转换
- **批量处理**:支持多图片同时上传和处理
- **压缩率**1-100JPEG/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+(前端构建)
### 本地开发
```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