Files
ystp/README.md

150 lines
4.8 KiB
Markdown
Raw Permalink 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/ICOGIF 仅静态)
- **批量处理**:支持多图片同时上传和处理
- **压缩率**1-100数值越大压缩越强
- **用户系统**注册、登录、API Key 管理
- **计费与用量**:套餐/订阅/配额/发票
- **管理员后台**:用户管理、系统监控、配置管理
### 技术栈
| 层级 | 技术选型 | 说明 |
|------|----------|------|
| 后端框架 | Axum | 高性能异步 Web 框架 |
| 图片处理 | image-rs + oxipng + webp + ravif | PNG/WebP/AVIF 编解码与优化 |
| 数据库 | PostgreSQL + SQLx | 类型安全的异步数据库 |
| 缓存/队列 | Redis | 会话管理、限流、任务队列Streams |
| 前端 | Vue3 + TypeScript | SPA 单页应用 |
| 认证 | JWT + API Key | 双重认证机制 |
| 存储 | S3 兼容 / 本地 | 对象存储 + 预签名 URL推荐 |
| 计费 | 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当前依赖链要求较新的 Rust建议 `>= 1.85`
- PostgreSQL 16+
- Redis 7+
- Node.js 20+(前端构建)
### 本地开发
```bash
# 配置环境变量
cp .env.example .env
# 启动 PostgreSQL / Redis开发
docker compose -f docker/docker-compose.dev.yml up -d
# 初始化数据库
psql "$DATABASE_URL" -f migrations/001_init.sql
# 启动后端
cargo run
# 启动前端(另一个终端)
cd frontend && npm run dev
```
### Docker 部署
```bash
# 该 compose 仅包含 postgres/redis服务本体请按 docs/deployment.md 构建运行
docker compose -f docker/docker-compose.dev.yml up -d
```
## 文档索引
- [开工前确认清单](./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)
- [服务条款(模板)](./docs/terms.md)
- [隐私政策(模板)](./docs/privacy.md)
## 已确认清单
- [x] 支付渠道首期选型Stripe
- [x] 计费策略:硬配额(无超额按量)
- [x] 匿名试用:支持,每日 10 次
- [x] 订阅周期:按订阅周期(非自然月)
- [x] 邮件服务:注册验证 + 密码重置SMTP预置多服务商模板
- [x] 默认语言:中文
- [x] Free 套餐 API不开放仅 Pro/Business 可用)
## 待完成清单(上线前)
- [x] 法务页面:隐私政策、服务条款(已提供模板)
- [ ] 域名与品牌名最终确认
## License
MIT