# 玩玩云 - 现代化云存储管理平台

> 一个功能完整的云存储管理系统，支持本地存储和OSS云存储，提供文件管理、分享、邮件验证等企业级功能。

<div align="center">

![Version](https://img.shields.io/badge/version-3.1.0-blue.svg)
![License](https://img.shields.io/badge/license-Personal%20Use-green.svg)
![Node](https://img.shields.io/badge/node-20.x-brightgreen.svg)
![Vue](https://img.shields.io/badge/vue-3.x-42b883.svg)

</div>

## ✨ 项目特色

玩玩云是一个现代化的Web文件管理系统，让您可以通过浏览器轻松管理文件。系统支持**双存储模式**（本地存储/OSS云存储），提供完整的用户管理、文件分享、邮件通知等企业级功能。

### 核心特性

#### 🗂️ 双存储模式
- **本地存储** - 快速读写，适合小型部署
- **OSS云存储** - 连接云服务，支持大容量存储（支持阿里云 OSS、腾讯云 COS、AWS S3）
- **一键切换** - 在管理面板轻松切换存储方式

#### 📁 完整的文件管理
- 文件浏览、上传、下载、重命名、删除
- 支持文件夹操作
- 流式下载，服务器零存储中转
- 实时进度显示

#### 🔗 智能文件分享
- 生成分享链接，支持密码保护
- 支持有效期设置（1小时-永久）
- 分享密码防爆破保护（10次失败封锁20分钟）
- 支持API直接下载

#### 👥 完善的用户系统
- 用户注册、登录、邮箱验证
- 密码加密存储（bcrypt）
- 邮件找回密码功能
- JWT令牌认证
- 管理员权限管理

#### 🔐 企业级安全防护
- **登录验证码** - 2次密码错误后自动显示验证码
- **防爆破保护** - 5次登录失败封锁30分钟
- **分享密码保护** - 10次密码错误封锁20分钟
- **智能限流** - 基于IP和用户名双重维度
- **安全日志** - 详细记录所有安全事件

#### 📧 邮件通知系统
- 注册邮箱验证
- 密码重置邮件
- 支持SMTP配置
- 邮件模板可自定义

#### 🖥️ 桌面上传工具
- 拖拽上传，简单易用
- 实时显示上传进度
- 自动配置，无需手动设置
- 支持大文件上传

#### ⚡ 一键部署
- 全自动安装脚本（install.sh）
- 自动检测和安装依赖（Node.js、Nginx等）
- 支持宝塔面板环境
- 自动配置Nginx反向代理
- 支持Docker容器化部署

## 🚀 快速开始

### 环境要求

- **操作系统**: Linux (Ubuntu 18.04+ / Debian 10+ / CentOS 7+)
- **内存**: 最低 1GB RAM（推荐 2GB+）
- **磁盘空间**: 至少 2GB 可用空间

### 方式1: 一键部署（推荐）⭐

使用我们的自动化安装脚本，5分钟即可完成部署：

```bash
# 使用 curl
curl -fsSL https://git.workyai.cn/237899745/vue-driven-cloud-storage/raw/branch/master/install.sh | bash

# 或使用 wget
wget -qO- https://git.workyai.cn/237899745/vue-driven-cloud-storage/raw/branch/master/install.sh | bash
```

安装脚本会自动完成以下工作：
- ✅ 检测系统环境
- ✅ 安装 Node.js 20.x（如未安装）
- ✅ 安装 Nginx（如未安装）
- ✅ 克隆项目代码
- ✅ 安装依赖包
- ✅ 配置 Nginx 反向代理
- ✅ 配置系统服务（systemd）
- ✅ 自动启动服务
- ✅ 显示访问信息

### 方式2: Docker 部署

适合熟悉 Docker 的用户：

```bash
# 1. 克隆项目
git clone https://git.workyai.cn/237899745/vue-driven-cloud-storage.git
cd vue-driven-cloud-storage

# 2. 启动服务
docker-compose up -d

# 3. 查看日志
docker-compose logs -f
```

### 方式3: 手动部署

详细步骤请参考 [INSTALL_GUIDE.md](./INSTALL_GUIDE.md)

### 首次访问

部署完成后，访问系统：

- **访问地址**: http://你的服务器IP
- **默认管理员账号**:
  - 用户名: `admin`
  - 密码: `admin123`
  - ⚠️ **请立即登录并修改密码！**

## 📖 使用指南

### 配置存储方式

登录后进入"管理面板" → "存储管理"，选择存储方式：

#### 本地存储（推荐新手）
- 无需额外配置
- 文件存储在服务器本地
- 适合小型部署

#### OSS云存储（适合大容量）
1. 点击"切换到 OSS"
2. 填写 OSS 配置：
   - 云服务商：选择阿里云/腾讯云/AWS S3
   - 地域：如 `oss-cn-hangzhou` / `ap-guangzhou` / `us-east-1`
   - Access Key ID：从云服务商获取
   - Access Key Secret：从云服务商获取
   - 存储桶名称：在云控制台创建
   - 自定义 Endpoint：可选，一般不需要填写
3. 保存配置

**⚠️ 重要：OSS Bucket CORS 配置**

使用 OSS 直连上传下载功能，必须在 Bucket 中配置 CORS 规则：

```xml
<!-- 阿里云 OSS / 腾讯云 COS / AWS S3 通用配置 -->
<CORSConfiguration>
  <CORSRule>
    <AllowedOrigin>https://你的域名.com</AllowedOrigin>
    <AllowedOrigin>https://www.你的域名.com</AllowedOrigin>
    <!-- 如果是本地测试，添加： -->
    <AllowedOrigin>http://localhost:3000</AllowedOrigin>

    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>

    <AllowedHeader>*</AllowedHeader>
    <ExposeHeader>ETag</ExposeHeader>
    <ExposeHeader>x-amz-request-id</ExposeHeader>
  </CORSRule>
</CORSConfiguration>
```

**各云服务商控制台配置路径：**
- **阿里云 OSS**：Bucket 管理 → 权限管理 → 跨域设置 → 创建规则
- **腾讯云 COS**：存储桶管理 → 安全管理 → 跨域访问 CORS 设置
- **AWS S3**：Bucket → Permissions → CORS configuration

### 配置邮件服务

进入"管理面板" → "系统设置" → "邮件配置"：

```
SMTP服务器: smtp.example.com
SMTP端口: 465
发件邮箱: noreply@example.com
SMTP密码: 你的授权码
```

配置后即可使用邮箱验证和密码重置功能。

### 文件管理

- **上传文件**: 点击"上传文件"按钮选择本地文件
- **下载文件**: 点击文件行的下载图标
- **重命名**: 点击文件名旁的编辑图标
- **删除文件**: 点击删除图标
- **创建文件夹**: 点击"新建文件夹"按钮

### 文件分享

1. 选择要分享的文件，点击"分享"按钮
2. 设置分享选项：
   - 分享密码（可选）
   - 有效期（1小时、1天、7天、永久）
3. 复制分享链接发送给他人
4. 在"我的分享"中管理所有分享链接

### 使用桌面上传工具

1. 进入"上传工具"页面
2. 下载适合你系统的上传工具
3. 输入服务器地址和API密钥
4. 拖拽文件即可上传

## 📁 项目结构

```
vue-driven-cloud-storage/
├── backend/                  # 后端服务
│   ├── server.js            # Express 服务器 (含邮件、API等)
│   ├── database.js          # SQLite 数据库操作
│   ├── storage.js           # 存储接口 (本地/OSS)
│   ├── auth.js              # JWT 认证中间件
│   ├── package.json         # 依赖配置
│   ├── Dockerfile           # Docker 构建文件
│   ├── .env.example         # 环境变量示例
│   ├── data/                # 数据库目录
│   └── storage/             # 本地存储目录
│
├── frontend/                # 前端代码
│   ├── index.html          # 登录注册页面
│   ├── app.html            # 主应用页面
│   ├── share.html          # 分享页面
│   ├── verify.html         # 邮箱验证页面
│   ├── reset-password.html # 密码重置页面
│   └── libs/               # 第三方库 (Vue.js, Axios, FontAwesome)
│
├── nginx/                   # Nginx 配置
│   ├── nginx.conf          # 反向代理配置
│   └── nginx.conf.example  # 配置模板
│
├── upload-tool/             # 桌面上传工具
│   ├── upload_tool.py      # Python 上传工具源码
│   ├── requirements.txt    # Python 依赖
│   ├── build.bat           # Windows 打包脚本
│   └── build.sh            # Linux/Mac 打包脚本
│
├── install.sh              # 一键安装脚本
├── docker-compose.yml      # Docker 编排文件
├── .gitignore              # Git 忽略文件
└── README.md               # 本文件
```

## 🛠️ 技术栈

### 后端技术
- **Node.js 20** - JavaScript 运行时
- **Express 4.x** - Web 应用框架
- **better-sqlite3** - 轻量级数据库
- **@aws-sdk/client-s3** - OSS/S3 云存储 SDK
- **jsonwebtoken** - JWT 认证
- **bcrypt** - 密码加密
- **nodemailer** - 邮件发送
- **svg-captcha** - 验证码生成
- **express-session** - Session 管理

### 前端技术
- **Vue.js 3** - 渐进式 JavaScript 框架
- **Axios** - HTTP 请求库
- **Font Awesome** - 图标库
- **原生 CSS** - 现代化界面设计

### 部署方案
- **Docker** - 容器化
- **Docker Compose** - 容器编排
- **Nginx** - 反向代理和静态资源服务
- **Systemd** - 系统服务管理

## 🔐 安全特性

### 认证与授权
- ✅ bcrypt 密码加密（10轮盐值）
- ✅ JWT 令牌认证
- ✅ Session 安全管理
- ✅ CORS 跨域配置
- ✅ SQL 注入防护（参数化查询）
- ✅ XSS 防护（输入过滤）

### 防爆破保护
- ✅ 登录验证码（2次失败后显示）
- ✅ 登录防爆破（5次失败封锁30分钟）
- ✅ 分享密码防爆破（10次失败封锁20分钟）
- ✅ 基于 IP + 用户名双重维度限流
- ✅ 支持反向代理 X-Forwarded-For

### 数据安全
- ✅ OSS 密钥加密存储
- ✅ 数据库事务支持
- ✅ 定期清理过期分享
- ✅ 安全日志记录

## 🔧 管理维护

### 查看服务状态

```bash
# Systemd 部署
sudo systemctl status vue-cloud-storage

# Docker 部署
docker-compose ps
```

### 查看日志

```bash
# Systemd 部署
sudo journalctl -u vue-cloud-storage -f

# Docker 部署
docker-compose logs -f backend
```

### 重启服务

```bash
# Systemd 部署
sudo systemctl restart vue-cloud-storage

# Docker 部署
docker-compose restart
```

### 备份数据

```bash
# 备份数据库
sudo cp /var/www/vue-driven-cloud-storage/backend/data/database.db \
        /backup/database.db.$(date +%Y%m%d)

# 备份上传文件（本地存储模式）
sudo tar -czf /backup/uploads-$(date +%Y%m%d).tar.gz \
        /var/www/vue-driven-cloud-storage/backend/uploads/
```

### 更新系统

```bash
cd /var/www/vue-driven-cloud-storage
git pull
cd backend && npm install
sudo systemctl restart vue-cloud-storage
```

## 📊 性能优化建议

### 生产环境配置

1. **启用 HTTPS**
   - 使用 Let's Encrypt 免费证书
   - 在 Nginx 中配置 SSL

2. **配置缓存**
   - 启用 Nginx 静态资源缓存
   - 配置浏览器缓存策略

3. **数据库优化**
   - 定期清理过期数据
   - 定期备份数据库

4. **监控告警**
   - 配置日志监控
   - 设置磁盘空间告警

## ❓ 常见问题

### 安装相关

**Q: 一键安装脚本支持哪些系统？**
A: Ubuntu 18.04+、Debian 10+、CentOS 7+、宝塔面板环境。

**Q: 如何查看安装进度？**
A: 安装脚本会实时显示进度，完成后显示访问地址。

### 使用相关

**Q: 如何切换存储方式？**
A: 登录后进入"管理面板" → "存储管理"，点击切换按钮即可。

**Q: 忘记管理员密码怎么办？**
A: 点击登录页的"忘记密码"，通过邮箱重置密码。如未配置邮箱，需要手动重置数据库。

**Q: 上传文件大小限制是多少？**
A: 默认限制 5GB，可在 Nginx 配置中修改 `client_max_body_size`。

### 故障排查

**Q: 无法访问系统**
1. 检查服务是否启动：`sudo systemctl status vue-cloud-storage`
2. 检查防火墙是否开放端口
3. 查看 Nginx 日志：`sudo tail -f /var/log/nginx/error.log`

**Q: OSS 连接失败**
1. 检查云服务商控制台，确认 Access Key 是否有效
2. 验证地域和存储桶名称是否正确
3. 检查存储桶的权限设置（需要允许读写操作）
4. 检查网络连接和防火墙设置

**Q: OSS 上传失败，提示 CORS 错误**
1. 确认已在 Bucket 中配置 CORS 规则（参考上方配置指南）
2. 检查 AllowedOrigin 是否包含你的域名
3. 确认 AllowedMethod 包含 PUT 方法
4. 检查 AllowedHeader 设置为 *

**Q: 邮件发送失败**
1. 检查 SMTP 配置是否正确
2. 确认 SMTP 密码是授权码（非登录密码）
3. 查看后端日志排查错误

## 📝 更新日志

### v3.1.0 (2025-01-18)
- 🚀 **重大架构优化**：OSS 直连上传下载（不经过后端）
  - 上传速度提升 50%，服务器流量节省 50%
  - 下载直连 OSS，享受 CDN 加速
  - 使用 AWS Presigned URL 保证安全性
- ✨ 支持本地存储和 OSS 混合模式
- ✨ 新增 OSS Bucket CORS 配置说明
- ✨ 分享下载也支持 OSS 直连
- 🐛 修复上传/删除后空间统计不刷新的问题
- 🐛 清理残留的 httpDownloadUrl 无效代码

### v3.0.0 (2025-01-18)
- 🚀 重大架构升级：SFTP → OSS 云存储
- ✨ 支持阿里云 OSS、腾讯云 COS、AWS S3
- ✨ 新增 OSS 空间统计缓存机制
- ✨ 优化上传工具，使用 API 上传
- 🐛 修复 SFTP 残留代码引用
- 💄 优化前端 UI，移除 SFTP 相关界面

### v1.1.0 (2025-11-13)
- ✨ 新增登录验证码功能
- ✨ 新增登录防爆破保护（5次失败封锁30分钟）
- ✨ 新增分享密码防爆破保护（10次失败封锁20分钟）
- ✨ 支持反向代理 X-Forwarded-For
- 🐛 修复更新脚本导致上传工具丢失
- 💄 优化管理面板界面

### v1.0.0 (2025-11-01)
- 🎉 首个正式版本发布
- ✨ 完整的文件管理功能
- ✨ 双存储模式（本地/OSS）
- ✨ 文件分享功能
- ✨ 用户管理系统
- ✨ 邮件验证和密码重置
- ✨ 桌面上传工具
- ✨ 一键部署脚本

完整更新日志请查看 [VERSION.txt](./VERSION.txt)

## 🤝 贡献指南

欢迎提交 Issue 和 Pull Request！

### 开发环境搭建

```bash
# 克隆项目
git clone https://git.workyai.cn/237899745/vue-driven-cloud-storage.git
cd vue-driven-cloud-storage

# 安装依赖
cd backend && npm install

# 启动开发服务器
node server.js
```

### 提交规范

- feat: 新功能
- fix: 修复bug
- docs: 文档更新
- style: 代码格式调整
- refactor: 重构
- test: 测试相关
- chore: 构建/工具相关

## 📄 许可证

本项目仅供学习和个人使用。

## 💬 联系方式

- **项目地址**: https://git.workyai.cn/237899745/vue-driven-cloud-storage
- **Gitee镜像**: https://gitee.com/yu-yon/vue-driven-cloud-storage
- **问题反馈**: 请在 Gitea 提交 Issue

## 🙏 致谢

感谢所有开源项目的贡献者！

---

**玩玩云** - 让云存储管理更简单 ☁️

<div align="center">

Made with ❤️ by 玩玩云团队

</div>
