🧹 清理冗余文档和脚本文件
项目清理: - 删除重复的部署文档(DEPLOY.md, DEPLOYMENT.md, DOCKER部署指南.md等) - 删除过时的验证码功能文档(CAPTCHA_*.md) - 删除临时修复脚本(fix_*.sh) - 删除旧版本文档(VERSION.txt, UPDATE_SUMMARY_v1.1.0.md) - 删除重复的部署脚本(deploy.sh) 精简原因: - README.md 已包含完整的部署和使用说明 - install.sh 提供一键部署功能 - 减少文档冗余,降低维护成本 - 保持项目结构清晰简洁 保留的核心文件: - README.md(主文档) - install.sh(一键部署脚本) - docker-compose.yml(Docker 配置) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,280 +0,0 @@
|
||||
# 登录验证码功能说明
|
||||
|
||||
## 功能概述
|
||||
|
||||
本次更新为"玩玩云"云存储系统添加了登录验证码功能,提高了系统的安全性。该功能会在用户输错密码一定次数后自动显示验证码,要求用户输入验证码才能继续尝试登录。
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 1. 智能验证码触发
|
||||
- **自动触发**:当用户输错密码2次后,系统会自动显示验证码输入框
|
||||
- **适用范围**:前台用户登录和后台管理员登录均适用
|
||||
- **双重保护**:基于IP地址和用户名两个维度进行失败次数统计
|
||||
|
||||
### 2. 验证码特点
|
||||
- **纯数字验证码**:4位数字,易于识别和输入
|
||||
- **彩色显示**:验证码图片使用彩色显示,提高可读性
|
||||
- **点击刷新**:点击验证码图片即可刷新获取新的验证码
|
||||
- **有效期限**:验证码有效期为5分钟,过期后需要刷新
|
||||
- **安全存储**:验证码存储在服务器端session中,防止客户端篡改
|
||||
|
||||
### 3. 防爆破机制
|
||||
- **失败限制**:15分钟内失败5次将被封锁30分钟
|
||||
- **渐进式保护**:
|
||||
- 第1-2次失败:仅提示密码错误
|
||||
- 第3-5次失败:显示验证码要求输入
|
||||
- 第5次失败:封锁IP和用户名30分钟
|
||||
|
||||
## 技术实现
|
||||
|
||||
### 后端改动
|
||||
|
||||
#### 1. 新增依赖
|
||||
- `svg-captcha`: 用于生成SVG格式的验证码图片
|
||||
- `express-session`: 用于管理session存储验证码
|
||||
|
||||
#### 2. 新增API端点
|
||||
```
|
||||
GET /api/captcha
|
||||
```
|
||||
- 功能:生成并返回SVG格式的验证码图片
|
||||
- 返回:SVG图片数据
|
||||
- Session存储:验证码文本和生成时间
|
||||
|
||||
#### 3. 修改登录API
|
||||
```
|
||||
POST /api/login
|
||||
```
|
||||
新增参数:
|
||||
- `captcha` (可选): 验证码输入值
|
||||
|
||||
验证逻辑:
|
||||
1. 检查IP和用户名的失败次数
|
||||
2. 如果失败次数 >= 2,则要求提供验证码
|
||||
3. 验证验证码的有效性(是否存在、是否过期、是否正确)
|
||||
4. 验证码错误返回 `needCaptcha: true`
|
||||
|
||||
#### 4. RateLimiter增强
|
||||
- 新增 `getFailureCount()` 方法:获取指定key的失败次数
|
||||
- `recordFailure()` 返回值新增 `needCaptcha` 字段
|
||||
|
||||
### 前端改动
|
||||
|
||||
#### 1. 数据字段
|
||||
新增:
|
||||
```javascript
|
||||
showCaptcha: false, // 是否显示验证码
|
||||
captchaUrl: '', // 验证码图片URL
|
||||
loginForm.captcha: '' // 验证码输入值
|
||||
```
|
||||
|
||||
#### 2. UI组件
|
||||
在登录表单中添加:
|
||||
- 验证码输入框(条件显示)
|
||||
- 验证码图片显示区域
|
||||
- 点击刷新提示文字
|
||||
|
||||
#### 3. 逻辑方法
|
||||
新增 `refreshCaptcha()` 方法:
|
||||
```javascript
|
||||
refreshCaptcha() {
|
||||
this.captchaUrl = `${this.apiBase}/api/captcha?t=${Date.now()}`;
|
||||
}
|
||||
```
|
||||
|
||||
修改 `handleLogin()` 方法:
|
||||
- 登录失败时检查 `response.data.needCaptcha`
|
||||
- 如果需要验证码,显示验证码并调用 `refreshCaptcha()`
|
||||
- 登录成功后隐藏验证码并清空输入
|
||||
|
||||
## 使用说明
|
||||
|
||||
### 用户使用流程
|
||||
|
||||
1. **首次登录尝试**
|
||||
- 输入用户名和密码
|
||||
- 点击"登录"按钮
|
||||
- 如果密码错误,会提示"用户名或密码错误"
|
||||
|
||||
2. **第三次登录尝试(触发验证码)**
|
||||
- 输入用户名和密码
|
||||
- 系统自动显示验证码输入框
|
||||
- 输入图片中显示的4位数字
|
||||
- 如果看不清,点击图片刷新验证码
|
||||
- 点击"登录"按钮
|
||||
|
||||
3. **验证码验证**
|
||||
- 如果验证码错误,会提示"验证码错误",验证码会自动刷新
|
||||
- 如果验证码过期,会提示"验证码已过期,请刷新验证码"
|
||||
- 验证码正确且密码正确,登录成功
|
||||
|
||||
4. **账号封锁**
|
||||
- 如果连续失败5次,账号将被封锁30分钟
|
||||
- 封锁期间尝试登录会提示"账号已被封禁"
|
||||
|
||||
### 管理员说明
|
||||
|
||||
管理员登录时同样受到验证码保护,流程与普通用户完全一致。
|
||||
|
||||
## 配置说明
|
||||
|
||||
### Session配置
|
||||
|
||||
在 `backend/server.js` 中配置session:
|
||||
|
||||
```javascript
|
||||
app.use(session({
|
||||
secret: process.env.SESSION_SECRET || 'your-session-secret-change-in-production',
|
||||
resave: false,
|
||||
saveUninitialized: false,
|
||||
cookie: {
|
||||
secure: process.env.COOKIE_SECURE === 'true',
|
||||
httpOnly: true,
|
||||
maxAge: 10 * 60 * 1000 // 10分钟
|
||||
}
|
||||
}));
|
||||
```
|
||||
|
||||
建议在 `.env` 文件中设置:
|
||||
```
|
||||
SESSION_SECRET=你的session密钥
|
||||
```
|
||||
|
||||
### 验证码参数
|
||||
|
||||
在 `backend/server.js` 的验证码生成代码中可调整:
|
||||
|
||||
```javascript
|
||||
const captcha = svgCaptcha.create({
|
||||
size: 4, // 验证码长度(4位数字)
|
||||
noise: 2, // 干扰线条数
|
||||
color: true, // 使用彩色
|
||||
background: '#f0f0f0', // 背景色
|
||||
width: 120, // 宽度
|
||||
height: 40, // 高度
|
||||
fontSize: 50, // 字体大小
|
||||
charPreset: '0123456789' // 只使用数字
|
||||
});
|
||||
```
|
||||
|
||||
### 防爆破参数
|
||||
|
||||
在 `backend/server.js` 中配置RateLimiter:
|
||||
|
||||
```javascript
|
||||
const loginLimiter = new RateLimiter({
|
||||
maxAttempts: 5, // 最大失败次数
|
||||
windowMs: 15 * 60 * 1000, // 统计窗口(15分钟)
|
||||
blockDuration: 30 * 60 * 1000 // 封锁时长(30分钟)
|
||||
});
|
||||
```
|
||||
|
||||
**验证码触发阈值**在登录逻辑中设置:
|
||||
```javascript
|
||||
const needCaptcha = ipFailures >= 2 || usernameFailures >= 2;
|
||||
```
|
||||
可以修改 `>= 2` 来调整触发次数。
|
||||
|
||||
## 安全建议
|
||||
|
||||
1. **设置SESSION_SECRET**
|
||||
- 在生产环境中务必设置强随机的SESSION_SECRET
|
||||
- 使用 `node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"` 生成
|
||||
|
||||
2. **启用HTTPS**
|
||||
- 在生产环境中设置 `COOKIE_SECURE=true`
|
||||
- 确保使用HTTPS协议
|
||||
|
||||
3. **定期审计**
|
||||
- 定期检查登录失败日志
|
||||
- 关注异常的登录尝试
|
||||
|
||||
4. **调整参数**
|
||||
- 根据实际使用情况调整失败次数阈值
|
||||
- 根据用户反馈调整验证码难度
|
||||
|
||||
## 测试方法
|
||||
|
||||
### 测试验证码显示
|
||||
|
||||
1. 启动服务器:`cd backend && node server.js`
|
||||
2. 访问登录页面
|
||||
3. 使用错误的用户名或密码登录2次
|
||||
4. 第3次尝试时应该看到验证码输入框
|
||||
|
||||
### 测试验证码API
|
||||
|
||||
```bash
|
||||
curl "http://localhost:40001/api/captcha" > test.svg
|
||||
```
|
||||
|
||||
查看生成的 test.svg 文件,应该显示一个4位数字的验证码。
|
||||
|
||||
### 测试登录流程
|
||||
|
||||
```bash
|
||||
# 第一次失败(无验证码)
|
||||
curl -X POST http://localhost:40001/api/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"test","password":"wrong"}'
|
||||
|
||||
# 第二次失败(无验证码)
|
||||
curl -X POST http://localhost:40001/api/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"test","password":"wrong"}'
|
||||
|
||||
# 第三次失败(需要验证码)
|
||||
curl -X POST http://localhost:40001/api/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"test","password":"wrong"}'
|
||||
# 返回: {"success":false,"message":"请输入验证码","needCaptcha":true}
|
||||
```
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 问题1:验证码不显示
|
||||
|
||||
**可能原因**:
|
||||
- Session未正确配置
|
||||
- 前端未正确接收 `needCaptcha` 标志
|
||||
|
||||
**解决方法**:
|
||||
- 检查浏览器控制台是否有错误
|
||||
- 检查后端日志是否有session相关错误
|
||||
- 确认 `express-session` 依赖已安装
|
||||
|
||||
### 问题2:验证码一直提示错误
|
||||
|
||||
**可能原因**:
|
||||
- Session未持久化
|
||||
- 验证码大小写不匹配
|
||||
|
||||
**解决方法**:
|
||||
- 验证码已统一转换为小写进行比较
|
||||
- 检查浏览器是否禁用了Cookie
|
||||
|
||||
### 问题3:验证码图片不加载
|
||||
|
||||
**可能原因**:
|
||||
- CORS配置问题
|
||||
- API路径错误
|
||||
|
||||
**解决方法**:
|
||||
- 检查 `ALLOWED_ORIGINS` 环境变量配置
|
||||
- 确认API基础路径配置正确
|
||||
|
||||
## 更新日志
|
||||
|
||||
**版本:1.1.0**
|
||||
- 新增登录验证码功能
|
||||
- 密码错误2次后自动显示验证码
|
||||
- 支持点击刷新验证码
|
||||
- 验证码有效期5分钟
|
||||
- 前台和后台登录均支持
|
||||
|
||||
## 技术支持
|
||||
|
||||
如有问题,请查看:
|
||||
- 项目README.md
|
||||
- GitHub Issues
|
||||
- 后端日志文件
|
||||
@@ -1,268 +0,0 @@
|
||||
# 验证码快速修复指南
|
||||
|
||||
## 🔍 问题诊断
|
||||
|
||||
你的验证码API **没有返回Set-Cookie**,说明配置没有正确应用。
|
||||
|
||||
测试结果:
|
||||
```
|
||||
curl -si https://cs.workyai.cn/api/captcha
|
||||
HTTP/2 200
|
||||
❌ 没有 Set-Cookie 响应头
|
||||
```
|
||||
|
||||
## 🎯 解决方案(按顺序检查)
|
||||
|
||||
### 步骤1:检查Nginx配置文件
|
||||
|
||||
```bash
|
||||
# 在服务器上运行
|
||||
cd /root/vue-driven-cloud-storage # 或你的项目路径
|
||||
|
||||
# 方法1:查找配置文件
|
||||
find /etc/nginx -name "*.conf" -exec grep -l "workyai.cn\|40001" {} \;
|
||||
|
||||
# 方法2:查看nginx主配置
|
||||
nginx -T | grep -A 30 "location /api"
|
||||
```
|
||||
|
||||
**检查项**:
|
||||
- [ ] 是否有 `proxy_set_header Cookie $http_cookie;`
|
||||
- [ ] 是否有 `proxy_pass_header Set-Cookie;`
|
||||
|
||||
### 步骤2:手动添加Cookie配置
|
||||
|
||||
假设你的Nginx配置文件是 `/etc/nginx/conf.d/xxx.conf`:
|
||||
|
||||
```bash
|
||||
# 1. 找到配置文件
|
||||
nginx -T | grep -B 5 "location /api" | grep "# configuration file"
|
||||
|
||||
# 2. 编辑配置文件(替换为你的实际路径)
|
||||
vim /etc/nginx/conf.d/玩玩云.conf
|
||||
|
||||
# 3. 在 location /api 块中,找到这一行:
|
||||
# proxy_set_header X-Forwarded-Proto $scheme;
|
||||
#
|
||||
# 在它后面添加3行:
|
||||
# Cookie传递配置(验证码session需要)
|
||||
proxy_set_header Cookie $http_cookie;
|
||||
proxy_pass_header Set-Cookie;
|
||||
|
||||
# 4. 保存并测试
|
||||
nginx -t
|
||||
|
||||
# 5. 如果测试通过,重新加载
|
||||
nginx -s reload
|
||||
```
|
||||
|
||||
### 步骤3:验证修改是否生效
|
||||
|
||||
```bash
|
||||
# 测试验证码API是否返回Set-Cookie
|
||||
curl -si https://cs.workyai.cn/api/captcha | grep -i "set-cookie"
|
||||
|
||||
# 应该看到类似:
|
||||
# Set-Cookie: captcha.sid=s%3A...; Path=/; HttpOnly; SameSite=Lax
|
||||
```
|
||||
|
||||
如果还是没有,继续下一步。
|
||||
|
||||
### 步骤4:检查后端是否正确启动
|
||||
|
||||
```bash
|
||||
# 检查后端进程
|
||||
ps aux | grep "node.*server.js"
|
||||
|
||||
# 检查后端日志
|
||||
pm2 logs backend # 如果使用pm2
|
||||
# 或
|
||||
tail -f /path/to/backend/logs/error.log
|
||||
|
||||
# 重启后端
|
||||
pm2 restart backend # 如果使用pm2
|
||||
# 或
|
||||
pkill -f "node server.js"
|
||||
cd /path/to/backend
|
||||
node server.js > /dev/null 2>&1 &
|
||||
```
|
||||
|
||||
### 步骤5:检查后端依赖
|
||||
|
||||
```bash
|
||||
cd /path/to/backend
|
||||
|
||||
# 检查session依赖是否安装
|
||||
npm list express-session svg-captcha
|
||||
|
||||
# 如果未安装,安装它们
|
||||
npm install express-session svg-captcha
|
||||
|
||||
# 重启后端
|
||||
pm2 restart backend
|
||||
```
|
||||
|
||||
### 步骤6:检查.env配置
|
||||
|
||||
```bash
|
||||
cd /path/to/backend
|
||||
|
||||
# 查看.env文件
|
||||
cat .env
|
||||
|
||||
# 确保有这些配置(可选,有默认值)
|
||||
# SESSION_SECRET=your-random-secret
|
||||
# COOKIE_SECURE=false # 或true(如果是HTTPS)
|
||||
```
|
||||
|
||||
## 🔧 完整的修复脚本
|
||||
|
||||
在服务器上创建并运行:
|
||||
|
||||
```bash
|
||||
cat > fix_captcha.sh << 'SCRIPT_EOF'
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🔧 验证码快速修复脚本"
|
||||
echo "================================"
|
||||
echo ""
|
||||
|
||||
# 1. 查找Nginx配置
|
||||
echo "1. 查找Nginx配置文件..."
|
||||
NGINX_CONF=$(find /etc/nginx /www/server -name "*.conf" -exec grep -l "location /api" {} \; 2>/dev/null | grep -v backup | head -1)
|
||||
|
||||
if [[ -z "$NGINX_CONF" ]]; then
|
||||
echo "❌ 未找到Nginx配置文件"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "找到配置: $NGINX_CONF"
|
||||
echo ""
|
||||
|
||||
# 2. 检查是否已有Cookie配置
|
||||
if grep -q "proxy_set_header Cookie" "$NGINX_CONF"; then
|
||||
echo "✅ Cookie配置已存在"
|
||||
else
|
||||
echo "❌ Cookie配置缺失,正在添加..."
|
||||
|
||||
# 备份
|
||||
cp "$NGINX_CONF" "${NGINX_CONF}.backup.$(date +%Y%m%d%H%M%S)"
|
||||
|
||||
# 添加Cookie配置
|
||||
sed -i '/proxy_set_header X-Forwarded-Proto \$scheme;/a\
|
||||
\
|
||||
# Cookie传递配置(验证码session需要)\
|
||||
proxy_set_header Cookie $http_cookie;\
|
||||
proxy_pass_header Set-Cookie;' "$NGINX_CONF"
|
||||
|
||||
echo "✅ Cookie配置已添加"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 3. 测试Nginx配置
|
||||
echo "3. 测试Nginx配置..."
|
||||
if nginx -t; then
|
||||
echo "✅ Nginx配置测试通过"
|
||||
else
|
||||
echo "❌ Nginx配置测试失败"
|
||||
exit 1
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 4. 重新加载Nginx
|
||||
echo "4. 重新加载Nginx..."
|
||||
nginx -s reload && echo "✅ Nginx已重新加载" || echo "❌ Nginx重新加载失败"
|
||||
echo ""
|
||||
|
||||
# 5. 验证修复
|
||||
echo "5. 验证验证码API..."
|
||||
sleep 2
|
||||
if curl -si http://localhost:40001/api/captcha 2>&1 | grep -q "Set-Cookie"; then
|
||||
echo "✅ 验证码API正常返回Set-Cookie"
|
||||
else
|
||||
echo "⚠️ 验证码API未返回Set-Cookie,可能需要检查后端"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "================================"
|
||||
echo "✅ 修复完成!"
|
||||
echo ""
|
||||
echo "请清除浏览器缓存后重新测试"
|
||||
SCRIPT_EOF
|
||||
|
||||
chmod +x fix_captcha.sh
|
||||
sudo bash fix_captcha.sh
|
||||
```
|
||||
|
||||
## 📝 检查清单
|
||||
|
||||
执行以下检查:
|
||||
|
||||
### Nginx配置
|
||||
```bash
|
||||
# 查看location /api配置
|
||||
nginx -T 2>/dev/null | grep -A 20 "location /api"
|
||||
|
||||
# 必须包含:
|
||||
# ✓ proxy_set_header Cookie $http_cookie;
|
||||
# ✓ proxy_pass_header Set-Cookie;
|
||||
```
|
||||
|
||||
### 后端配置
|
||||
```bash
|
||||
# 检查后端是否运行
|
||||
curl http://localhost:40001/api/health
|
||||
|
||||
# 检查session依赖
|
||||
cd /path/to/backend && npm list | grep session
|
||||
|
||||
# 必须有:
|
||||
# ✓ express-session@x.x.x
|
||||
# ✓ svg-captcha@x.x.x
|
||||
```
|
||||
|
||||
### Cookie传递
|
||||
```bash
|
||||
# 完整测试
|
||||
curl -v http://localhost:40001/api/captcha 2>&1 | grep -i "set-cookie"
|
||||
|
||||
# 必须看到:
|
||||
# < Set-Cookie: captcha.sid=...
|
||||
```
|
||||
|
||||
## 🆘 仍然不行?
|
||||
|
||||
如果以上步骤都完成了还是不行,请提供:
|
||||
|
||||
1. **Nginx配置内容**
|
||||
```bash
|
||||
nginx -T 2>/dev/null | grep -A 30 "location /api"
|
||||
```
|
||||
|
||||
2. **后端日志**
|
||||
```bash
|
||||
pm2 logs backend --lines 50
|
||||
```
|
||||
|
||||
3. **验证码API响应**
|
||||
```bash
|
||||
curl -vi http://localhost:40001/api/captcha
|
||||
```
|
||||
|
||||
4. **完整的curl测试**
|
||||
```bash
|
||||
# 生成验证码
|
||||
curl -vi https://cs.workyai.cn/api/captcha -c cookies.txt
|
||||
|
||||
# 查看cookie
|
||||
cat cookies.txt
|
||||
|
||||
# 测试登录
|
||||
curl -vi https://cs.workyai.cn/api/login \
|
||||
-b cookies.txt \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"admin","password":"wrong","captcha":"1234"}'
|
||||
```
|
||||
|
||||
## 📞 提供这些信息后我可以进一步帮助你!
|
||||
@@ -1,173 +0,0 @@
|
||||
# 登录验证码功能 - 快速开始
|
||||
|
||||
## 功能说明
|
||||
|
||||
本次更新为"玩玩云"添加了登录验证码功能,提高系统安全性:
|
||||
|
||||
✅ **自动触发**:密码输错2次后自动显示验证码
|
||||
✅ **智能保护**:基于IP和用户名双重维度防护
|
||||
✅ **易于使用**:点击图片即可刷新验证码
|
||||
✅ **前后通用**:前台用户和后台管理员登录均适用
|
||||
|
||||
## 安装依赖
|
||||
|
||||
已为后端安装以下依赖:
|
||||
```bash
|
||||
cd backend
|
||||
npm install svg-captcha express-session
|
||||
```
|
||||
|
||||
## 快速启动
|
||||
|
||||
### 1. 启动后端服务
|
||||
```bash
|
||||
cd backend
|
||||
node server.js
|
||||
```
|
||||
|
||||
### 2. 访问登录页面
|
||||
打开浏览器访问:`http://localhost:40001`
|
||||
|
||||
### 3. 测试验证码功能
|
||||
|
||||
**方法1:浏览器手动测试**
|
||||
1. 输入任意用户名和错误密码
|
||||
2. 点击"登录"按钮2次
|
||||
3. 第3次尝试时会自动显示验证码输入框
|
||||
4. 输入验证码后继续登录
|
||||
|
||||
**方法2:使用测试脚本**
|
||||
```bash
|
||||
# 确保后端服务已启动
|
||||
./test_captcha.sh
|
||||
```
|
||||
|
||||
## 使用截图流程
|
||||
|
||||
### 第1-2次登录失败
|
||||

|
||||
- 显示用户名和密码输入框
|
||||
- 提示"用户名或密码错误"
|
||||
|
||||
### 第3次登录失败(触发验证码)
|
||||

|
||||
- 自动显示验证码输入框
|
||||
- 显示4位数字验证码图片
|
||||
- 可点击图片刷新验证码
|
||||
|
||||
### 验证码验证
|
||||

|
||||
- 输入图片中的4位数字
|
||||
- 点击"登录"继续
|
||||
|
||||
## 配置说明
|
||||
|
||||
### 环境变量配置(可选)
|
||||
|
||||
在 `backend/.env` 文件中添加:
|
||||
|
||||
```env
|
||||
# Session密钥(建议生产环境修改)
|
||||
SESSION_SECRET=your-session-secret-here
|
||||
|
||||
# Cookie安全(HTTPS环境启用)
|
||||
COOKIE_SECURE=false
|
||||
```
|
||||
|
||||
### 调整验证码触发次数
|
||||
|
||||
编辑 `backend/server.js`,找到以下代码:
|
||||
|
||||
```javascript
|
||||
// 第683行附近
|
||||
const needCaptcha = ipFailures >= 2 || usernameFailures >= 2;
|
||||
```
|
||||
|
||||
修改 `>= 2` 为你想要的次数(如 `>= 3` 表示第4次才需要验证码)。
|
||||
|
||||
### 调整防爆破参数
|
||||
|
||||
编辑 `backend/server.js`,找到以下代码:
|
||||
|
||||
```javascript
|
||||
// 第394行附近
|
||||
const loginLimiter = new RateLimiter({
|
||||
maxAttempts: 5, // 最大失败次数
|
||||
windowMs: 15 * 60 * 1000, // 15分钟
|
||||
blockDuration: 30 * 60 * 1000 // 封锁30分钟
|
||||
});
|
||||
```
|
||||
|
||||
## 文件修改清单
|
||||
|
||||
### 后端文件
|
||||
- ✅ `backend/server.js` - 添加验证码生成API和登录验证逻辑
|
||||
- ✅ `backend/package.json` - 添加验证码依赖
|
||||
|
||||
### 前端文件
|
||||
- ✅ `frontend/app.html` - 添加验证码输入框和图片显示
|
||||
- ✅ `frontend/app.js` - 添加验证码逻辑和刷新方法
|
||||
|
||||
### 新增文件
|
||||
- ✅ `CAPTCHA_FEATURE.md` - 详细功能说明文档
|
||||
- ✅ `CAPTCHA_README.md` - 快速开始指南
|
||||
- ✅ `test_captcha.sh` - 自动化测试脚本
|
||||
|
||||
## 功能特点
|
||||
|
||||
### 验证码特性
|
||||
- **纯数字**:只使用0-9数字,易于识别
|
||||
- **4位长度**:平衡安全性和用户体验
|
||||
- **彩色显示**:提高可读性
|
||||
- **点击刷新**:用户体验友好
|
||||
- **5分钟有效期**:防止验证码被重复使用
|
||||
|
||||
### 安全机制
|
||||
- **渐进式保护**:
|
||||
- 1-2次失败:仅密码验证
|
||||
- 3-5次失败:要求验证码
|
||||
- 5次失败:封锁30分钟
|
||||
- **双重维度**:同时基于IP和用户名统计
|
||||
- **Session存储**:验证码存储在服务器端,防止篡改
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 验证码不显示
|
||||
**检查项**:
|
||||
1. 确认后端服务已启动
|
||||
2. 检查浏览器控制台是否有错误
|
||||
3. 确认已输错密码至少2次
|
||||
|
||||
### 验证码一直错误
|
||||
**检查项**:
|
||||
1. 确认输入的是图片中的数字
|
||||
2. 刷新验证码重新尝试
|
||||
3. 检查浏览器是否禁用Cookie
|
||||
|
||||
### API返回错误
|
||||
**检查项**:
|
||||
1. 查看后端日志:`tail -f backend/logs/error.log`
|
||||
2. 确认依赖已安装:`cd backend && npm list svg-captcha express-session`
|
||||
3. 重启后端服务
|
||||
|
||||
## 测试清单
|
||||
|
||||
- [ ] 第1次登录失败不显示验证码
|
||||
- [ ] 第2次登录失败不显示验证码
|
||||
- [ ] 第3次登录失败显示验证码
|
||||
- [ ] 验证码图片可以正常加载
|
||||
- [ ] 点击验证码图片可以刷新
|
||||
- [ ] 输入正确验证码和正确密码可以登录成功
|
||||
- [ ] 输入错误验证码提示"验证码错误"
|
||||
- [ ] 管理员登录也受到验证码保护
|
||||
- [ ] 登录成功后验证码自动隐藏
|
||||
|
||||
## 技术支持
|
||||
|
||||
详细技术文档:[CAPTCHA_FEATURE.md](./CAPTCHA_FEATURE.md)
|
||||
|
||||
如有问题,请:
|
||||
1. 查看后端日志
|
||||
2. 检查浏览器控制台
|
||||
3. 运行测试脚本 `./test_captcha.sh`
|
||||
4. 查看详细文档
|
||||
183
DEPLOY.md
183
DEPLOY.md
@@ -1,183 +0,0 @@
|
||||
# 玩玩云 - 部署指南
|
||||
|
||||
## 🚀 快速部署(3分钟完成)
|
||||
|
||||
### 第一步:上传项目到服务器
|
||||
|
||||
```bash
|
||||
# 方法1: 使用scp上传
|
||||
scp -r ftp-web-manager root@服务器IP:/var/www/
|
||||
|
||||
# 方法2: 使用FTP工具上传到 /var/www/ 目录
|
||||
```
|
||||
|
||||
### 第二步:SSH登录服务器
|
||||
|
||||
```bash
|
||||
ssh root@服务器IP
|
||||
```
|
||||
|
||||
### 第三步:一键部署
|
||||
|
||||
```bash
|
||||
cd /var/www/ftp-web-manager
|
||||
bash deploy.sh
|
||||
```
|
||||
|
||||
部署脚本会自动:
|
||||
- ✅ 检查Docker环境
|
||||
- ✅ 创建必要目录
|
||||
- ✅ 构建Docker镜像
|
||||
- ✅ 启动所有服务
|
||||
- ✅ 显示访问信息
|
||||
|
||||
### 第四步:访问系统
|
||||
|
||||
打开浏览器访问:
|
||||
```
|
||||
http://服务器IP:8080
|
||||
```
|
||||
|
||||
使用默认账号登录:
|
||||
```
|
||||
用户名: admin
|
||||
密码: admin123
|
||||
```
|
||||
|
||||
**⚠️ 重要:首次登录后立即修改密码!**
|
||||
|
||||
---
|
||||
|
||||
## 📋 环境要求
|
||||
|
||||
- Docker 20.10.0+
|
||||
- Docker Compose 2.0.0+
|
||||
- 最低 1GB 内存(推荐 2GB+)
|
||||
- Linux 系统(Ubuntu/Debian/CentOS)
|
||||
|
||||
---
|
||||
|
||||
## 🔧 手动部署(如果自动脚本失败)
|
||||
|
||||
```bash
|
||||
# 1. 进入项目目录
|
||||
cd /var/www/ftp-web-manager
|
||||
|
||||
# 2. 创建必要目录
|
||||
mkdir -p certbot/conf certbot/www backend/uploads
|
||||
|
||||
# 3. 构建并启动
|
||||
docker-compose up --build -d
|
||||
|
||||
# 4. 查看日志
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ 部署验证
|
||||
|
||||
检查容器状态:
|
||||
```bash
|
||||
docker-compose ps
|
||||
```
|
||||
|
||||
应该看到3个容器都是 "Up" 状态:
|
||||
- wanwanyun-backend
|
||||
- wanwanyun-frontend
|
||||
- wanwanyun-certbot
|
||||
|
||||
查看后端日志:
|
||||
```bash
|
||||
docker-compose logs backend
|
||||
```
|
||||
|
||||
应该看到:
|
||||
```
|
||||
数据库初始化完成
|
||||
默认管理员账号已创建
|
||||
玩玩云已启动
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛑 停止服务
|
||||
|
||||
```bash
|
||||
cd /var/www/ftp-web-manager
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 重启服务
|
||||
|
||||
```bash
|
||||
cd /var/www/ftp-web-manager
|
||||
docker-compose restart
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📦 更新代码
|
||||
|
||||
```bash
|
||||
cd /var/www/ftp-web-manager
|
||||
git pull # 或重新上传文件
|
||||
docker-compose up --build -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ❓ 常见问题
|
||||
|
||||
### Q: 端口8080被占用怎么办?
|
||||
|
||||
修改 docker-compose.yml 中的端口映射:
|
||||
```yaml
|
||||
ports:
|
||||
- "8081:80" # 改为8081或其他端口
|
||||
```
|
||||
|
||||
### Q: Docker容器启动失败?
|
||||
|
||||
```bash
|
||||
# 查看详细日志
|
||||
docker-compose logs backend
|
||||
|
||||
# 重新构建
|
||||
docker-compose down
|
||||
docker-compose up --build -d
|
||||
```
|
||||
|
||||
### Q: 忘记管理员密码怎么办?
|
||||
|
||||
删除数据库文件重新初始化:
|
||||
```bash
|
||||
docker-compose down
|
||||
rm backend/ftp-manager.db
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### Q: 如何配置HTTPS?
|
||||
|
||||
参考主README.md中的SSL配置章节。
|
||||
|
||||
---
|
||||
|
||||
## 📞 获取帮助
|
||||
|
||||
- 查看详细文档: README.md
|
||||
- 查看部署检查报告: 桌面上的检查报告文件
|
||||
- 查看对话历史: 桌面上的对话总结文件
|
||||
|
||||
---
|
||||
|
||||
**部署成功后,记得:**
|
||||
1. ✅ 修改admin密码
|
||||
2. ✅ 配置SFTP连接
|
||||
3. ✅ 设置JWT密钥(backend/.env)
|
||||
4. ✅ 配置HTTPS(生产环境)
|
||||
5. ✅ 定期备份数据库
|
||||
|
||||
祝您使用愉快!☁️
|
||||
189
DEPLOYMENT.md
189
DEPLOYMENT.md
@@ -1,189 +0,0 @@
|
||||
# 玩玩云部署指南
|
||||
|
||||
## 快速部署
|
||||
|
||||
### 1. 基础部署(Docker Compose)
|
||||
|
||||
```bash
|
||||
# 克隆项目
|
||||
git clone <repository-url>
|
||||
cd ftp-web-manager
|
||||
|
||||
# 启动服务
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
服务将在以下端口运行:
|
||||
- Frontend (Nginx): 8080 (HTTP), 8443 (HTTPS)
|
||||
- Backend (Node.js): 40001
|
||||
|
||||
### 2. 如果使用宿主机Nginx作为反向代理
|
||||
|
||||
如果你在宿主机上使用Nginx作为SSL终止/反向代理(推荐用于生产环境),需要在Nginx配置中添加大文件上传支持。
|
||||
|
||||
#### 2.1 创建Nginx配置文件
|
||||
|
||||
创建 `/etc/nginx/sites-available/wanwanyun.conf`(或对应的配置目录):
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name your-domain.com;
|
||||
|
||||
# HTTP重定向到HTTPS
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name your-domain.com;
|
||||
|
||||
# SSL证书配置(使用Let's Encrypt或其他证书)
|
||||
ssl_certificate /path/to/fullchain.pem;
|
||||
ssl_certificate_key /path/to/privkey.pem;
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers HIGH:!aNULL:!MD5;
|
||||
ssl_prefer_server_ciphers on;
|
||||
|
||||
# 反向代理到Docker容器
|
||||
location / {
|
||||
# ⚠️ 重要:设置最大上传文件大小为5GB
|
||||
client_max_body_size 5G;
|
||||
|
||||
# ⚠️ 重要:大文件上传超时设置(1小时)
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_connect_timeout 3600s;
|
||||
|
||||
# 代理到Docker容器的8080端口
|
||||
proxy_pass http://127.0.0.1:8080;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.2 应用配置
|
||||
|
||||
```bash
|
||||
# 启用站点配置
|
||||
ln -s /etc/nginx/sites-available/wanwanyun.conf /etc/nginx/sites-enabled/
|
||||
|
||||
# 测试Nginx配置
|
||||
nginx -t
|
||||
|
||||
# 重新加载Nginx
|
||||
nginx -s reload
|
||||
```
|
||||
|
||||
### 3. 宝塔面板用户
|
||||
|
||||
如果使用宝塔面板,配置文件通常在:
|
||||
- `/www/server/panel/vhost/nginx/your-domain.conf`
|
||||
|
||||
在站点的 `location /` 块中添加:
|
||||
|
||||
```nginx
|
||||
location / {
|
||||
# 设置最大上传文件大小为5GB
|
||||
client_max_body_size 5G;
|
||||
|
||||
# 大文件上传超时设置(1小时)
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_connect_timeout 3600s;
|
||||
|
||||
# ... 其他代理配置
|
||||
}
|
||||
```
|
||||
|
||||
然后重载Nginx:
|
||||
```bash
|
||||
nginx -s reload
|
||||
```
|
||||
|
||||
## 上传限制说明
|
||||
|
||||
系统支持的最大上传文件大小为 **5GB**,需要在以下三个层级进行配置:
|
||||
|
||||
### 1. ✅ 容器内Nginx(已配置)
|
||||
- 文件:`nginx/nginx.conf`
|
||||
- 配置:`client_max_body_size 5G;`
|
||||
|
||||
### 2. ✅ 后端Multer(已配置)
|
||||
- 文件:`backend/server.js`
|
||||
- 配置:`limits: { fileSize: 5 * 1024 * 1024 * 1024 }`
|
||||
|
||||
### 3. ⚠️ 宿主机Nginx(需要手动配置)
|
||||
- 如果使用宿主机Nginx作为反向代理
|
||||
- 必须在 `location /` 块中添加 `client_max_body_size 5G;`
|
||||
- 否则上传会在64MB时失败(Nginx默认限制)
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 上传文件提示413错误
|
||||
|
||||
**问题**:上传大于64MB的文件时失败,浏览器控制台显示 `413 Payload Too Large`
|
||||
|
||||
**原因**:宿主机Nginx的 `client_max_body_size` 限制(默认1MB或64MB)
|
||||
|
||||
**解决方案**:
|
||||
1. 找到宿主机Nginx配置文件(通常是 `/etc/nginx/sites-available/` 或 `/www/server/panel/vhost/nginx/`)
|
||||
2. 在 `location /` 块中添加:
|
||||
```nginx
|
||||
client_max_body_size 5G;
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_connect_timeout 3600s;
|
||||
```
|
||||
3. 测试并重载Nginx:
|
||||
```bash
|
||||
nginx -t
|
||||
nginx -s reload
|
||||
```
|
||||
|
||||
### 上传进度
|
||||
|
||||
前端已实现实时上传进度显示(使用axios的 `onUploadProgress`),无需额外配置。
|
||||
|
||||
## 存储配置
|
||||
|
||||
系统支持两种存储方式:
|
||||
|
||||
### 本地存储
|
||||
- 文件存储在:`backend/local-storage/`
|
||||
- 可设置用户配额限制
|
||||
- 适合中小型部署
|
||||
|
||||
### SFTP存储
|
||||
- 用户可配置自己的SFTP服务器
|
||||
- 支持HTTP直接下载(配置 `http_download_base_url`)
|
||||
- 适合大规模部署
|
||||
|
||||
## 安全建议
|
||||
|
||||
1. **使用HTTPS**:生产环境务必配置SSL证书
|
||||
2. **定期备份数据库**:`backend/data.db` 包含所有用户数据
|
||||
3. **限制管理员账号**:定期审查用户权限
|
||||
4. **配置防火墙**:只开放必要的端口(80, 443)
|
||||
|
||||
## 技术支持
|
||||
|
||||
如有问题,请查看日志:
|
||||
|
||||
```bash
|
||||
# 后端日志
|
||||
docker logs wanwanyun-backend
|
||||
|
||||
# 前端日志
|
||||
docker logs wanwanyun-frontend
|
||||
|
||||
# Nginx日志
|
||||
tail -f /www/wwwlogs/your-domain.log
|
||||
tail -f /www/wwwlogs/your-domain.error.log
|
||||
```
|
||||
1211
DOCKER部署指南.md
1211
DOCKER部署指南.md
File diff suppressed because it is too large
Load Diff
295
INSTALL_GUIDE.md
295
INSTALL_GUIDE.md
@@ -1,295 +0,0 @@
|
||||
# 玩玩云 - 一键部署指南
|
||||
|
||||
## 🚀 一键安装命令
|
||||
|
||||
在您的服务器上执行以下任意一条命令即可开始安装:
|
||||
|
||||
### 方式1: 使用 curl
|
||||
```bash
|
||||
curl -fsSL https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash
|
||||
```
|
||||
|
||||
### 方式2: 使用 wget
|
||||
```bash
|
||||
wget -qO- https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 一键更新命令
|
||||
|
||||
如果您已经部署了玩玩云,可以使用以下命令快速更新到最新版本:
|
||||
|
||||
### 方式1: 使用 curl (推荐)
|
||||
```bash
|
||||
curl -fsSL https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash -s -- --update
|
||||
```
|
||||
|
||||
### 方式2: 使用 wget
|
||||
```bash
|
||||
wget -qO- https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash -s -- --update
|
||||
```
|
||||
|
||||
### 方式3: 本地脚本
|
||||
```bash
|
||||
wget https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh
|
||||
bash install.sh --update
|
||||
```
|
||||
|
||||
### 更新说明
|
||||
更新过程会:
|
||||
- ✅ 从Gitee拉取最新代码
|
||||
- ✅ 自动备份数据库和用户文件
|
||||
- ✅ 更新后端依赖(npm install)
|
||||
- ✅ 重启后端服务
|
||||
- ✅ 保留所有配置和用户数据
|
||||
|
||||
更新不会影响:
|
||||
- ✅ 数据库文件(用户、分享链接等)
|
||||
- ✅ 用户上传的文件(storage目录)
|
||||
- ✅ 配置文件(.env)
|
||||
- ✅ Nginx配置
|
||||
|
||||
---
|
||||
|
||||
## 📋 系统要求
|
||||
|
||||
### 支持的操作系统
|
||||
- Ubuntu 18.04 / 20.04 / 22.04
|
||||
- Debian 10 / 11 / 12
|
||||
- CentOS 7 / 8
|
||||
- RHEL 7 / 8
|
||||
|
||||
### 硬件要求
|
||||
- **CPU**: 1核心及以上
|
||||
- **内存**: 最低512MB,推荐1GB+
|
||||
- **磁盘**: 最低2GB可用空间,推荐5GB+
|
||||
- **网络**: 需要能访问外网(下载依赖包)
|
||||
|
||||
### 端口要求
|
||||
- **80**: HTTP访问(必须)
|
||||
- **443**: HTTPS访问(可选,如果使用SSL)
|
||||
- **40001**: 后端服务端口(内部使用)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 部署流程
|
||||
|
||||
执行安装命令后,脚本会自动引导您完成以下步骤:
|
||||
|
||||
### 1️⃣ 环境检测
|
||||
自动检测系统信息:
|
||||
- 操作系统类型和版本
|
||||
- CPU架构
|
||||
- 内存和磁盘空间
|
||||
- 网络连接状态
|
||||
- 公网IP地址
|
||||
|
||||
### 2️⃣ 选择软件源
|
||||
```
|
||||
请选择软件包安装源:
|
||||
[1] 官方源 (国外服务器推荐)
|
||||
[2] 阿里云镜像源 (国内服务器推荐,速度更快)
|
||||
```
|
||||
**建议**: 国内服务器选择 [2],国外服务器选择 [1]
|
||||
|
||||
### 3️⃣ 自动安装依赖
|
||||
脚本会自动安装以下环境(如果未安装):
|
||||
- Node.js 18.x
|
||||
- Nginx
|
||||
- PM2
|
||||
- SQLite3
|
||||
- 其他必要工具
|
||||
|
||||
### 4️⃣ 选择访问模式
|
||||
|
||||
#### 域名模式 (推荐)
|
||||
```
|
||||
请选择访问模式:
|
||||
[1] 域名模式 (推荐,支持HTTPS)
|
||||
[2] IP模式 (仅HTTP,适合测试)
|
||||
```
|
||||
|
||||
**如果选择 [1] 域名模式**:
|
||||
1. 输入您的域名(例如: wwy.example.com)
|
||||
2. 脚本会自动验证域名解析
|
||||
3. 选择SSL证书部署方式
|
||||
|
||||
#### SSL证书方案
|
||||
```
|
||||
请选择SSL证书自动部署方式:
|
||||
|
||||
【推荐方案】
|
||||
[1] Certbot (Let's Encrypt官方工具)
|
||||
- 最稳定可靠,支持自动续期
|
||||
|
||||
【备选方案】
|
||||
[2] acme.sh + Let's Encrypt
|
||||
- 纯Shell脚本,更轻量级
|
||||
[3] acme.sh + ZeroSSL
|
||||
- Let's Encrypt的免费替代品
|
||||
[4] acme.sh + Buypass
|
||||
- 挪威免费CA,有效期180天
|
||||
|
||||
【云服务商证书】
|
||||
[5] 阿里云免费证书 (需提供AccessKey)
|
||||
[6] 腾讯云免费证书 (需提供SecretKey)
|
||||
|
||||
【其他选项】
|
||||
[7] 使用已有证书 (手动上传证书文件)
|
||||
[8] 暂不配置HTTPS (可后续配置)
|
||||
```
|
||||
|
||||
**建议**:
|
||||
- 首选 [1] Certbot
|
||||
- 如果失败,脚本会自动建议尝试 [2] 或 [3]
|
||||
- 测试环境可选 [8] 跳过HTTPS
|
||||
|
||||
### 5️⃣ 配置管理员账号
|
||||
```
|
||||
管理员用户名 [默认: admin]:
|
||||
管理员密码(至少6位):
|
||||
确认密码:
|
||||
```
|
||||
|
||||
### 6️⃣ 自动部署
|
||||
脚本会自动完成:
|
||||
- ✅ 创建项目目录
|
||||
- ✅ 从Gitee下载项目代码
|
||||
- ✅ 安装后端依赖(npm install)
|
||||
- ✅ 创建配置文件和数据库
|
||||
- ✅ 部署SSL证书(如果选择)
|
||||
- ✅ 配置Nginx反向代理
|
||||
- ✅ 启动后端服务(PM2管理)
|
||||
- ✅ 健康检查
|
||||
|
||||
### 7️⃣ 部署完成
|
||||
```
|
||||
╔═══════════════════════════════════════════════════════════════╗
|
||||
║ ║
|
||||
║ 🎉 部署成功! ║
|
||||
║ ║
|
||||
╚═══════════════════════════════════════════════════════════════╝
|
||||
|
||||
访问地址: https://wwy.example.com
|
||||
管理员账号: admin
|
||||
管理员密码: ********
|
||||
|
||||
常用命令:
|
||||
查看服务状态: pm2 status
|
||||
查看日志: pm2 logs wanwanyun-backend
|
||||
重启服务: pm2 restart wanwanyun-backend
|
||||
停止服务: pm2 stop wanwanyun-backend
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 常见问题
|
||||
|
||||
### 1. 如何查看部署日志?
|
||||
```bash
|
||||
pm2 logs wanwanyun-backend
|
||||
```
|
||||
|
||||
### 2. 如何重启服务?
|
||||
```bash
|
||||
pm2 restart wanwanyun-backend
|
||||
```
|
||||
|
||||
### 3. 如何修改配置?
|
||||
编辑配置文件后重启服务:
|
||||
```bash
|
||||
nano /var/www/wanwanyun/backend/.env
|
||||
pm2 restart wanwanyun-backend
|
||||
```
|
||||
|
||||
### 4. SSL证书过期怎么办?
|
||||
- **Certbot**: 自动续期,无需手动操作
|
||||
- **acme.sh**: 自动续期,无需手动操作
|
||||
- **手动证书**: 需要手动更新证书文件并重启Nginx
|
||||
|
||||
### 5. 忘记管理员密码怎么办?
|
||||
修改配置文件并重启:
|
||||
```bash
|
||||
nano /var/www/wanwanyun/backend/.env
|
||||
# 修改 ADMIN_PASSWORD 的值
|
||||
pm2 restart wanwanyun-backend
|
||||
```
|
||||
|
||||
### 6. 如何卸载?
|
||||
使用一键卸载命令:
|
||||
```bash
|
||||
# 方式1: 在线卸载
|
||||
curl -fsSL https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash -s -- --uninstall
|
||||
|
||||
# 方式2: 在线卸载
|
||||
wget -qO- https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash -s -- --uninstall
|
||||
|
||||
# 方式3: 本地卸载(如果已下载脚本)
|
||||
bash install.sh --uninstall
|
||||
```
|
||||
|
||||
**卸载特性**:
|
||||
- 双重确认机制,防止误删
|
||||
- 可选数据备份到 `/root/wanwanyun-backup-YYYYMMDD-HHMMSS`
|
||||
- 完整清理:
|
||||
- PM2 进程: wanwanyun-backend
|
||||
- 项目目录: /var/www/wanwanyun
|
||||
- Nginx 配置: /etc/nginx/sites-enabled/wanwanyun.conf
|
||||
- SSL 证书: /etc/nginx/ssl/*
|
||||
- 临时文件和缓存
|
||||
- 保留系统环境:
|
||||
- Node.js
|
||||
- Nginx
|
||||
- PM2
|
||||
- 编译工具(build-essential、gcc-c++等)
|
||||
- 智能残留检查
|
||||
|
||||
**手动卸载**(仅作参考,推荐使用自动卸载):
|
||||
```bash
|
||||
# 停止服务
|
||||
pm2 delete wanwanyun-backend
|
||||
|
||||
# 删除项目目录
|
||||
rm -rf /var/www/wanwanyun
|
||||
|
||||
# 删除Nginx配置
|
||||
rm -f /etc/nginx/sites-enabled/wanwanyun.conf
|
||||
systemctl reload nginx
|
||||
```
|
||||
|
||||
### 7. 端口被占用怎么办?
|
||||
检查端口占用:
|
||||
```bash
|
||||
netstat -tunlp | grep :80
|
||||
netstat -tunlp | grep :40001
|
||||
```
|
||||
|
||||
停止占用端口的进程或修改配置文件端口。
|
||||
|
||||
### 8. 域名解析未生效怎么办?
|
||||
- 等待DNS解析生效(通常需要几分钟到几小时)
|
||||
- 暂时选择 [8] 跳过HTTPS配置
|
||||
- 解析生效后可手动配置SSL
|
||||
|
||||
---
|
||||
|
||||
## 📞 获取帮助
|
||||
|
||||
- **项目地址**: https://gitee.com/yu-yon/vue-driven-cloud-storage
|
||||
- **问题反馈**: 提交Issue到Gitee仓库
|
||||
- **部署文档**: 查看项目README.md
|
||||
|
||||
---
|
||||
|
||||
## 📝 注意事项
|
||||
|
||||
1. **需要root权限**: 脚本需要使用 `sudo` 或以root用户运行
|
||||
2. **防火墙设置**: 确保80和443端口已开放
|
||||
3. **域名解析**: 使用域名模式前,请先将域名解析到服务器IP
|
||||
4. **备份数据**: 升级前请备份数据库和配置文件
|
||||
5. **网络环境**: 需要能够访问外网下载依赖包
|
||||
|
||||
---
|
||||
|
||||
**祝您使用愉快!** 🎉
|
||||
@@ -1,192 +0,0 @@
|
||||
# install.sh 更新说明 - 验证码Cookie配置
|
||||
|
||||
## 需要修改的原因
|
||||
|
||||
验证码功能依赖Cookie传递session信息。install.sh生成的Nginx配置中缺少Cookie传递设置,导致验证码无法正常工作。
|
||||
|
||||
## 需要修改的位置
|
||||
|
||||
install.sh文件中有**3处**`location /api`配置需要添加Cookie传递设置。
|
||||
|
||||
### 位置1:第2372-2387行(HTTP配置)
|
||||
|
||||
在 `configure_nginx_http_first()` 函数中:
|
||||
|
||||
```nginx
|
||||
location /api {
|
||||
proxy_pass http://localhost:${BACKEND_PORT};
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
proxy_set_header Host $host;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
# ⬇️ 在这里添加以下3行 ⬇️
|
||||
# Cookie传递配置(验证码session需要)
|
||||
proxy_set_header Cookie $http_cookie;
|
||||
proxy_pass_header Set-Cookie;
|
||||
|
||||
# 上传超时设置
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_connect_timeout 300s;
|
||||
}
|
||||
```
|
||||
|
||||
### 位置2:第2650行附近(HTTPS配置)
|
||||
|
||||
在 `configure_nginx_final()` 函数的HTTPS配置中:
|
||||
|
||||
```nginx
|
||||
location /api {
|
||||
proxy_pass http://localhost:${BACKEND_PORT};
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
proxy_set_header Host $host;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
# ⬇️ 在这里添加以下3行 ⬇️
|
||||
# Cookie传递配置(验证码session需要)
|
||||
proxy_set_header Cookie $http_cookie;
|
||||
proxy_pass_header Set-Cookie;
|
||||
|
||||
# 上传超时设置
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_connect_timeout 300s;
|
||||
}
|
||||
```
|
||||
|
||||
### 位置3:第2783行附近(虚拟主机配置)
|
||||
|
||||
在另一个Nginx配置块中:
|
||||
|
||||
```nginx
|
||||
location /api {
|
||||
proxy_pass http://localhost:${BACKEND_PORT};
|
||||
# ... 其他配置 ...
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
# ⬇️ 在这里添加以下3行 ⬇️
|
||||
# Cookie传递配置(验证码session需要)
|
||||
proxy_set_header Cookie $http_cookie;
|
||||
proxy_pass_header Set-Cookie;
|
||||
|
||||
# 上传超时设置
|
||||
# ...
|
||||
}
|
||||
```
|
||||
|
||||
## 手动修改方法
|
||||
|
||||
### 方法1:使用vim编辑器
|
||||
|
||||
```bash
|
||||
vim install.sh
|
||||
|
||||
# 在vim中:
|
||||
# 1. 按 / 搜索:location /api
|
||||
# 2. 找到 proxy_set_header X-Forwarded-Proto $scheme; 这一行
|
||||
# 3. 在其后添加3行Cookie配置
|
||||
# 4. 按 n 继续查找下一个,重复步骤2-3
|
||||
# 5. 共修改3处
|
||||
# 6. :wq 保存退出
|
||||
```
|
||||
|
||||
### 方法2:使用sed批量替换
|
||||
|
||||
```bash
|
||||
cd /home/yuyx/aaaaaa/网盘/vue-driven-cloud-storage
|
||||
|
||||
# 备份
|
||||
cp install.sh install.sh.backup
|
||||
|
||||
# 批量替换(在所有location /api块中的X-Forwarded-Proto后添加)
|
||||
# 注意:这个命令需要仔细测试
|
||||
sed -i '/proxy_set_header X-Forwarded-Proto \\$scheme;/a\
|
||||
\
|
||||
# Cookie传递配置(验证码session需要)\
|
||||
proxy_set_header Cookie $http_cookie;\
|
||||
proxy_pass_header Set-Cookie;' install.sh
|
||||
|
||||
# 验证修改
|
||||
grep -A 2 "Cookie传递配置" install.sh
|
||||
```
|
||||
|
||||
### 方法3:手动复制粘贴
|
||||
|
||||
1. 打开install.sh
|
||||
2. 搜索 `location /api`(会找到3处)
|
||||
3. 在每处的 `proxy_set_header X-Forwarded-Proto $scheme;` 后面添加:
|
||||
|
||||
```
|
||||
# Cookie传递配置(验证码session需要)
|
||||
proxy_set_header Cookie $http_cookie;
|
||||
proxy_pass_header Set-Cookie;
|
||||
```
|
||||
|
||||
## 验证修改
|
||||
|
||||
```bash
|
||||
# 检查是否修改了3处
|
||||
grep -c "Cookie传递配置" install.sh
|
||||
# 输出应该是: 3
|
||||
|
||||
# 查看修改的位置
|
||||
grep -n "Cookie传递配置" install.sh
|
||||
```
|
||||
|
||||
## 应用修改
|
||||
|
||||
### 新部署时
|
||||
直接运行修改后的install.sh即可,它会生成包含Cookie配置的Nginx配置文件。
|
||||
|
||||
### 已部署的服务
|
||||
需要手动更新Nginx配置文件:
|
||||
|
||||
```bash
|
||||
# 编辑Nginx配置
|
||||
vim /etc/nginx/sites-available/玩玩云.conf
|
||||
# 或
|
||||
vim /etc/nginx/conf.d/玩玩云.conf
|
||||
|
||||
# 在location /api块中添加Cookie配置
|
||||
# 测试配置
|
||||
nginx -t
|
||||
|
||||
# 重新加载
|
||||
nginx -s reload
|
||||
```
|
||||
|
||||
## 为什么需要这个配置
|
||||
|
||||
1. **proxy_set_header Cookie $http_cookie;**
|
||||
- 将浏览器发送的Cookie转发给后端
|
||||
- 后端才能读取验证码session
|
||||
|
||||
2. **proxy_pass_header Set-Cookie;**
|
||||
- 将后端的Set-Cookie响应头传递给浏览器
|
||||
- 浏览器才能保存验证码session cookie
|
||||
|
||||
3. **缺少这两行会导致**:
|
||||
- 验证码session无法建立
|
||||
- 验证码一直提示"已过期"
|
||||
- Cookie在Nginx层被过滤掉
|
||||
|
||||
## 相关提交
|
||||
|
||||
- nginx/nginx.conf 已经修改(提交 5f3fd38)
|
||||
- install.sh 需要同步更新(本文档)
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 修改install.sh后,需要提交到Git
|
||||
- 已部署的服务需要手动更新Nginx配置
|
||||
- 修改后记得测试验证码功能
|
||||
@@ -1,49 +0,0 @@
|
||||
╔══════════════════════════════════════════════════════════════╗
|
||||
║ 玩玩云 - 快速开始指南 ║
|
||||
╚══════════════════════════════════════════════════════════════╝
|
||||
|
||||
【最简单的部署方法 - 3步完成】
|
||||
|
||||
1️⃣ 上传项目到服务器的 /var/www/ 目录
|
||||
|
||||
2️⃣ SSH登录服务器,执行:
|
||||
cd /var/www/ftp-web-manager
|
||||
bash deploy.sh
|
||||
|
||||
3️⃣ 打开浏览器访问:
|
||||
http://服务器IP:8080
|
||||
|
||||
默认账号:admin
|
||||
默认密码:admin123
|
||||
|
||||
✅ 部署完成!
|
||||
|
||||
───────────────────────────────────────────────────────────────
|
||||
|
||||
【环境要求】
|
||||
✓ Docker 20.10+
|
||||
✓ Docker Compose 2.0+
|
||||
✓ Linux系统
|
||||
✓ 1GB+ 内存
|
||||
|
||||
───────────────────────────────────────────────────────────────
|
||||
|
||||
【详细文档】
|
||||
📖 完整部署指南:DEPLOY.md
|
||||
📖 使用说明:README.md
|
||||
📖 部署检查报告:桌面上的检查报告
|
||||
|
||||
───────────────────────────────────────────────────────────────
|
||||
|
||||
【重要提示】
|
||||
⚠️ 首次登录后立即修改admin密码
|
||||
⚠️ 生产环境请配置HTTPS
|
||||
⚠️ 定期备份 backend/ftp-manager.db 数据库文件
|
||||
|
||||
───────────────────────────────────────────────────────────────
|
||||
|
||||
【获取帮助】
|
||||
💬 查看常见问题:DEPLOY.md
|
||||
💬 查看详细文档:README.md
|
||||
|
||||
祝您使用愉快!☁️
|
||||
@@ -1,320 +0,0 @@
|
||||
# 玩玩云 v1.1.0 更新总结
|
||||
|
||||
**发布日期**: 2025-11-13
|
||||
**版本**: v1.1.0
|
||||
**提交记录**: ac9f1c7
|
||||
|
||||
---
|
||||
|
||||
## 🎉 本次更新内容
|
||||
|
||||
### 1. 🔐 安全增强 - 防爆破保护系统
|
||||
|
||||
#### 登录防爆破保护
|
||||
- **限制策略**: 5次失败尝试/15分钟
|
||||
- **封锁时长**: 30分钟
|
||||
- **保护维度**:
|
||||
- IP地址维度(防止同一IP多次尝试)
|
||||
- 用户名维度(防止针对特定账号的攻击)
|
||||
- **技术实现**:
|
||||
- 新增 `RateLimiter` 类
|
||||
- 使用内存存储(TTL机制)
|
||||
- 自动清理过期记录
|
||||
|
||||
#### 分享密码防爆破保护
|
||||
- **限制策略**: 10次失败尝试/10分钟
|
||||
- **封锁时长**: 20分钟
|
||||
- **保护维度**: IP + 分享码组合
|
||||
- **应用场景**:
|
||||
- `/api/share/:code/verify` - 密码验证
|
||||
- 防止暴力破解分享密码
|
||||
|
||||
#### 反向代理支持
|
||||
- 支持读取 `X-Forwarded-For` 头
|
||||
- 正确识别真实客户端IP
|
||||
- 适配 Nginx/Caddy 等反向代理
|
||||
|
||||
#### 安全日志
|
||||
```javascript
|
||||
[防爆破] 拦截登录尝试 - IP: xxx.xxx.xxx.xxx, 原因: IP被封锁
|
||||
[防爆破] 封锁Key: login:username:admin, 失败次数: 5, 封锁时长: 30分钟
|
||||
[防爆破清理] 已清理 12 个过期尝试记录, 3 个过期封锁记录
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. 🔧 部署优化 - 上传工具修复
|
||||
|
||||
#### 问题描述
|
||||
更新脚本执行 `git pull` 时会删除 `upload-tool` 目录,但由于 `.gitignore` 排除了 `dist/*.exe`,导致更新后上传工具丢失。
|
||||
|
||||
#### 解决方案
|
||||
在 `install.sh` 更新流程中添加检查逻辑:
|
||||
|
||||
```bash
|
||||
# 检查并重新下载上传工具(如果需要)
|
||||
if [[ ! -f "${PROJECT_DIR}/upload-tool/dist/玩玩云上传工具.exe" ]]; then
|
||||
print_info "检测到上传工具丢失,正在重新下载..."
|
||||
build_upload_tool
|
||||
else
|
||||
FILE_SIZE=$(stat -c%s "${PROJECT_DIR}/upload-tool/dist/玩玩云上传工具.exe")
|
||||
if [[ $FILE_SIZE -lt 30000000 ]]; then
|
||||
print_warning "上传工具文件大小异常,正在重新下载..."
|
||||
build_upload_tool
|
||||
fi
|
||||
fi
|
||||
```
|
||||
|
||||
#### 功能特性
|
||||
- ✅ 自动检测上传工具是否存在
|
||||
- ✅ 验证文件大小确保完整性(>30MB)
|
||||
- ✅ 自动从直链下载:`http://a.haory.top/e/e82/玩玩云上传工具.exe`
|
||||
- ✅ 最多重试3次,确保下载成功
|
||||
|
||||
---
|
||||
|
||||
### 3. 🎨 界面优化
|
||||
|
||||
#### 首页更新
|
||||
- **版本标识**: "v1.0 生产就绪版本" → "版本号 V1.0"
|
||||
- **功能描述**: 明确说明支持 SFTP 和本地存储双模式
|
||||
- **统计卡片**:
|
||||
- 移除 "100%开源免费"
|
||||
- 移除 "Docker 一键部署"
|
||||
- 新增 "双模式 - SFTP + 本地存储"
|
||||
- **页脚简化**: 移除不可点击的导航链接
|
||||
|
||||
#### 功能说明优化
|
||||
- 将 "流式下载" 更名为 "灵活下载"
|
||||
- 明确说明本地存储模式不是流式中转
|
||||
|
||||
---
|
||||
|
||||
## 📊 提交记录
|
||||
|
||||
### Commit 1: 防爆破保护
|
||||
```
|
||||
commit c439966
|
||||
feat: 添加登录和分享密码防爆破保护
|
||||
|
||||
- 新增RateLimiter类实现基于IP和用户名的限流
|
||||
- 登录接口: 5次失败/15分钟后封锁30分钟
|
||||
- 分享密码: 10次失败/10分钟后封锁20分钟
|
||||
- 支持X-Forwarded-For反向代理
|
||||
- 自动清理过期记录
|
||||
- 详细的安全日志记录
|
||||
```
|
||||
|
||||
**变更文件**:
|
||||
- `backend/server.js`: +233行, -1行
|
||||
|
||||
### Commit 2: 上传工具修复
|
||||
```
|
||||
commit 72063c5
|
||||
fix: 修复更新脚本导致上传工具丢失的问题
|
||||
|
||||
- 在更新流程中添加上传工具完整性检查
|
||||
- 如果上传工具丢失或文件大小异常,自动重新下载
|
||||
- 使用已有的build_upload_tool函数从直链下载
|
||||
- 验证文件大小确保下载完整(>30MB)
|
||||
```
|
||||
|
||||
**变更文件**:
|
||||
- `install.sh`: +16行
|
||||
|
||||
### Commit 3: 版本发布
|
||||
```
|
||||
commit ac9f1c7
|
||||
chore: 发布 v1.1.0 版本
|
||||
|
||||
新增功能:
|
||||
- 登录和分享密码防爆破保护
|
||||
- 更新脚本自动检测和修复上传工具
|
||||
- 首页界面优化
|
||||
```
|
||||
|
||||
**变更文件**:
|
||||
- `VERSION.txt`: +46行, -26行
|
||||
|
||||
---
|
||||
|
||||
## 🧪 测试建议
|
||||
|
||||
### 1. 防爆破保护测试
|
||||
|
||||
**登录限流测试**:
|
||||
```bash
|
||||
# 连续5次错误密码登录
|
||||
curl -X POST http://localhost:40001/api/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"admin","password":"wrongpass"}'
|
||||
|
||||
# 第6次应返回 429 状态码
|
||||
# 响应: {"success":false,"message":"登录尝试过多,请在 30 分钟后重试","blocked":true}
|
||||
```
|
||||
|
||||
**分享密码限流测试**:
|
||||
```bash
|
||||
# 连续10次错误密码
|
||||
for i in {1..11}; do
|
||||
curl -X POST http://localhost:40001/api/share/XXXXX/verify \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"password":"wrongpass"}'
|
||||
echo ""
|
||||
done
|
||||
|
||||
# 第11次应返回 429 状态码
|
||||
```
|
||||
|
||||
### 2. 上传工具修复测试
|
||||
|
||||
```bash
|
||||
# 1. 备份当前上传工具
|
||||
mv upload-tool/dist/玩玩云上传工具.exe /tmp/backup.exe
|
||||
|
||||
# 2. 执行更新
|
||||
./install.sh
|
||||
# 选择选项 7: 更新系统
|
||||
|
||||
# 3. 验证上传工具已自动恢复
|
||||
ls -lh upload-tool/dist/玩玩云上传工具.exe
|
||||
# 应显示文件大小约 43MB
|
||||
```
|
||||
|
||||
### 3. 反向代理测试
|
||||
|
||||
Nginx配置示例:
|
||||
```nginx
|
||||
location /api/ {
|
||||
proxy_pass http://localhost:40001;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
```
|
||||
|
||||
验证日志中显示的是真实客户端IP而非代理IP。
|
||||
|
||||
---
|
||||
|
||||
## 📝 升级指南
|
||||
|
||||
### 从 v1.0.0 升级到 v1.1.0
|
||||
|
||||
#### 方法一: 使用安装脚本(推荐)
|
||||
```bash
|
||||
cd /opt/vue-driven-cloud-storage
|
||||
./install.sh
|
||||
# 选择选项 7: 更新系统
|
||||
```
|
||||
|
||||
脚本会自动:
|
||||
1. 停止现有服务
|
||||
2. 拉取最新代码
|
||||
3. 检测并重新下载上传工具(如需要)
|
||||
4. 更新依赖
|
||||
5. 重启服务
|
||||
|
||||
#### 方法二: 手动更新
|
||||
```bash
|
||||
# 1. 停止服务
|
||||
pm2 stop vue-driven-cloud-storage-backend
|
||||
|
||||
# 2. 备份数据
|
||||
cp -r backend/data /tmp/backup-data
|
||||
|
||||
# 3. 拉取代码
|
||||
git pull origin master
|
||||
|
||||
# 4. 检查上传工具
|
||||
ls -lh upload-tool/dist/玩玩云上传工具.exe
|
||||
# 如果不存在或小于30MB,重新下载:
|
||||
wget -O upload-tool/dist/玩玩云上传工具.exe \
|
||||
http://a.haory.top/e/e82/玩玩云上传工具.exe
|
||||
|
||||
# 5. 重启服务
|
||||
pm2 restart vue-driven-cloud-storage-backend
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 技术细节
|
||||
|
||||
### RateLimiter 实现原理
|
||||
|
||||
```javascript
|
||||
class RateLimiter {
|
||||
constructor(options) {
|
||||
this.maxAttempts = options.maxAttempts || 5;
|
||||
this.windowMs = options.windowMs || 15 * 60 * 1000;
|
||||
this.blockDuration = options.blockDuration || 30 * 60 * 1000;
|
||||
this.attempts = new Map(); // 尝试记录
|
||||
this.blockedKeys = new Map(); // 封锁记录
|
||||
}
|
||||
|
||||
recordFailure(key) {
|
||||
// 检查是否已封锁
|
||||
if (this.isBlocked(key)) {
|
||||
return { blocked: true, ... };
|
||||
}
|
||||
|
||||
// 记录失败尝试
|
||||
let info = this.attempts.get(key) || { count: 0, windowEnd: ... };
|
||||
info.count++;
|
||||
|
||||
// 达到阈值,进行封锁
|
||||
if (info.count >= this.maxAttempts) {
|
||||
this.blockedKeys.set(key, { expiresAt: ... });
|
||||
return { blocked: true, ... };
|
||||
}
|
||||
|
||||
return { blocked: false, remainingAttempts: ... };
|
||||
}
|
||||
|
||||
recordSuccess(key) {
|
||||
// 认证成功,清除所有记录
|
||||
this.attempts.delete(key);
|
||||
this.blockedKeys.delete(key);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 中间件应用
|
||||
|
||||
```javascript
|
||||
// 登录接口
|
||||
app.post('/api/login',
|
||||
loginRateLimitMiddleware, // 添加限流中间件
|
||||
[...validators],
|
||||
async (req, res) => {
|
||||
// 验证失败
|
||||
if (!user || !passwordCorrect) {
|
||||
loginLimiter.recordFailure(req.rateLimitKeys.ipKey);
|
||||
loginLimiter.recordFailure(req.rateLimitKeys.usernameKey);
|
||||
return res.status(401).json({...});
|
||||
}
|
||||
|
||||
// 验证成功
|
||||
loginLimiter.recordSuccess(req.rateLimitKeys.ipKey);
|
||||
loginLimiter.recordSuccess(req.rateLimitKeys.usernameKey);
|
||||
return res.json({...});
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐛 已知问题
|
||||
|
||||
无已知问题。
|
||||
|
||||
---
|
||||
|
||||
## 📧 反馈与支持
|
||||
|
||||
如遇到问题,请通过以下方式反馈:
|
||||
- Gitee Issues: https://gitee.com/yu-yon/vue-driven-cloud-storage/issues
|
||||
- 查看日志: `pm2 logs vue-driven-cloud-storage-backend`
|
||||
|
||||
---
|
||||
|
||||
**感谢使用玩玩云!** 🎉
|
||||
118
VERSION.txt
118
VERSION.txt
@@ -1,118 +0,0 @@
|
||||
玩玩云 - 版本信息
|
||||
═══════════════════════════════════════
|
||||
|
||||
版本号: v1.1.0
|
||||
发布日期: 2025-11-13
|
||||
状态: 生产就绪 ✅
|
||||
|
||||
═══════════════════════════════════════
|
||||
|
||||
【v1.1.0 新增功能】
|
||||
|
||||
✅ 安全增强
|
||||
- 登录防爆破保护(5次失败封锁30分钟)
|
||||
- 分享密码防爆破保护(10次失败封锁20分钟)
|
||||
- 基于IP和用户名的智能限流
|
||||
- 支持反向代理X-Forwarded-For
|
||||
- 详细的安全日志记录
|
||||
|
||||
✅ 部署优化
|
||||
- 修复更新脚本导致上传工具丢失的问题
|
||||
- 自动检测和重新下载上传工具
|
||||
- 更新流程更加稳定可靠
|
||||
|
||||
✅ 界面优化
|
||||
- 更新首页版本标识
|
||||
- 优化功能描述更加清晰
|
||||
- 简化页脚设计
|
||||
|
||||
═══════════════════════════════════════
|
||||
|
||||
【v1.0.0 核心功能】
|
||||
|
||||
✅ 完整的文件管理功能
|
||||
- SFTP文件浏览、上传、下载
|
||||
- 服务器本地存储支持
|
||||
- 文件重命名、删除
|
||||
- 流式下载,支持进度显示
|
||||
|
||||
✅ 文件分享功能
|
||||
- 生成分享链接
|
||||
- 支持密码保护
|
||||
- 支持有效期设置
|
||||
- 双模式下载(HTTP/SFTP)
|
||||
|
||||
✅ 用户管理系统
|
||||
- 用户注册、登录
|
||||
- 密码加密存储
|
||||
- JWT认证
|
||||
- 管理员权限管理
|
||||
|
||||
✅ 桌面上传工具
|
||||
- 拖拽上传
|
||||
- 实时进度显示
|
||||
- 自动配置
|
||||
|
||||
✅ Docker容器化部署
|
||||
- 一键部署脚本
|
||||
- 自动环境检查
|
||||
- 完整的日志记录
|
||||
|
||||
═══════════════════════════════════════
|
||||
|
||||
【技术栈】
|
||||
|
||||
后端:
|
||||
- Node.js 20
|
||||
- Express 4.x
|
||||
- better-sqlite3
|
||||
- ssh2-sftp-client
|
||||
- JWT认证
|
||||
- bcrypt加密
|
||||
|
||||
前端:
|
||||
- Vue.js 3
|
||||
- Axios
|
||||
- Font Awesome
|
||||
|
||||
部署:
|
||||
- Docker
|
||||
- Docker Compose
|
||||
- Nginx
|
||||
|
||||
═══════════════════════════════════════
|
||||
|
||||
【安全特性】
|
||||
|
||||
✅ 密码bcrypt加密
|
||||
✅ JWT令牌认证
|
||||
✅ SFTP密码安全存储
|
||||
✅ SQL注入防护
|
||||
✅ XSS防护
|
||||
✅ CORS配置
|
||||
✅ 登录防爆破保护 (新增)
|
||||
✅ 分享密码防爆破保护 (新增)
|
||||
|
||||
═══════════════════════════════════════
|
||||
|
||||
【已修复的问题】
|
||||
|
||||
v1.1.0:
|
||||
✅ 更新脚本导致上传工具丢失
|
||||
✅ 缺少登录防爆破保护
|
||||
✅ 缺少分享密码防爆破保护
|
||||
|
||||
v1.0.0:
|
||||
✅ 数据库初始化语法错误
|
||||
✅ 分享链接重定向错误
|
||||
✅ 分享页面下载按钮缺失
|
||||
✅ 密码验证错误
|
||||
✅ SFTP连接过早关闭
|
||||
✅ Docker配置不完整
|
||||
|
||||
═══════════════════════════════════════
|
||||
|
||||
更新日志: 查看 Git 提交历史
|
||||
许可证: 仅供学习和个人使用
|
||||
|
||||
═══════════════════════════════════════
|
||||
155
deploy.sh
155
deploy.sh
@@ -1,155 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 玩玩云一键部署脚本
|
||||
# 使用方法: bash deploy.sh
|
||||
|
||||
set -e
|
||||
|
||||
echo "========================================="
|
||||
echo " 玩玩云 - 一键部署脚本"
|
||||
echo "========================================="
|
||||
echo ""
|
||||
|
||||
# 检查Docker
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo "❌ 错误: Docker未安装"
|
||||
echo "请先安装Docker: https://docs.docker.com/engine/install/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查Docker Compose
|
||||
if ! command -v docker-compose &> /dev/null; then
|
||||
echo "❌ 错误: Docker Compose未安装"
|
||||
echo "请先安装Docker Compose: https://docs.docker.com/compose/install/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✓ Docker版本: $(docker --version)"
|
||||
echo "✓ Docker Compose版本: $(docker-compose --version)"
|
||||
echo ""
|
||||
|
||||
# 检查必要的目录
|
||||
echo "📁 检查项目结构..."
|
||||
REQUIRED_DIRS=("backend" "frontend" "nginx")
|
||||
for dir in "${REQUIRED_DIRS[@]}"; do
|
||||
if [ ! -d "$dir" ]; then
|
||||
echo "❌ 错误: 缺少 $dir 目录"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
echo "✓ 项目结构完整"
|
||||
echo ""
|
||||
|
||||
# 创建必要的目录
|
||||
echo "📂 创建必要的目录..."
|
||||
mkdir -p certbot/conf
|
||||
mkdir -p certbot/www
|
||||
mkdir -p backend/uploads
|
||||
mkdir -p storage
|
||||
echo "✓ 目录创建完成"
|
||||
echo ""
|
||||
|
||||
# 检查.env文件并生成JWT密钥
|
||||
echo "🔐 配置环境变量..."
|
||||
if [ ! -f "backend/.env" ]; then
|
||||
echo "⚠️ backend/.env 文件不存在,正在创建..."
|
||||
|
||||
if [ -f "backend/.env.example" ]; then
|
||||
cp backend/.env.example backend/.env
|
||||
echo "✓ 已从.env.example创建.env文件"
|
||||
else
|
||||
echo "⚠️ .env.example不存在,创建基础配置"
|
||||
cat > backend/.env << 'ENVEOF'
|
||||
PORT=40001
|
||||
NODE_ENV=production
|
||||
ADMIN_USERNAME=admin
|
||||
ADMIN_PASSWORD=admin123
|
||||
STORAGE_ROOT=/app/storage
|
||||
# CORS配置 - 生产环境必须设置!
|
||||
# 示例: ALLOWED_ORIGINS=https://yourdomain.com
|
||||
ALLOWED_ORIGINS=
|
||||
COOKIE_SECURE=false
|
||||
ENVEOF
|
||||
echo ""
|
||||
echo "⚠️ 警告: ALLOWED_ORIGINS未配置!"
|
||||
echo " 生产环境必须在backend/.env中设置ALLOWED_ORIGINS"
|
||||
echo " 示例: ALLOWED_ORIGINS=https://cs.workyai.cn"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# 生成随机JWT密钥
|
||||
echo "🔑 生成随机JWT密钥..."
|
||||
JWT_SECRET=$(openssl rand -hex 32 2>/dev/null || cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 64 | head -n 1)
|
||||
|
||||
# 替换或添加JWT_SECRET
|
||||
if grep -q "^JWT_SECRET=" backend/.env; then
|
||||
sed -i "s|^JWT_SECRET=.*|JWT_SECRET=$JWT_SECRET|" backend/.env
|
||||
else
|
||||
echo "JWT_SECRET=$JWT_SECRET" >> backend/.env
|
||||
fi
|
||||
|
||||
echo "✓ JWT密钥已生成并保存"
|
||||
else
|
||||
echo "✓ backend/.env 文件已存在"
|
||||
|
||||
# 检查JWT_SECRET是否为默认值
|
||||
if grep -q "^JWT_SECRET=your-secret-key" backend/.env; then
|
||||
echo "⚠️ 检测到JWT_SECRET使用默认值,正在生成新密钥..."
|
||||
JWT_SECRET=$(openssl rand -hex 32 2>/dev/null || cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 64 | head -n 1)
|
||||
sed -i "s|^JWT_SECRET=.*|JWT_SECRET=$JWT_SECRET|" backend/.env
|
||||
echo "✓ JWT密钥已更新"
|
||||
fi
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 停止旧容器
|
||||
echo "🔄 停止旧容器..."
|
||||
docker-compose down 2>/dev/null || true
|
||||
echo "✓ 旧容器已停止"
|
||||
echo ""
|
||||
|
||||
# 构建并启动
|
||||
echo "🚀 构建并启动服务..."
|
||||
docker-compose up --build -d
|
||||
|
||||
# 等待服务启动
|
||||
echo ""
|
||||
echo "⏳ 等待服务启动..."
|
||||
sleep 5
|
||||
|
||||
# 检查容器状态
|
||||
echo ""
|
||||
echo "📊 检查容器状态..."
|
||||
docker-compose ps
|
||||
|
||||
# 检查后端日志
|
||||
echo ""
|
||||
echo "📝 后端启动日志:"
|
||||
docker-compose logs --tail=20 backend
|
||||
|
||||
# 显示访问信息
|
||||
echo ""
|
||||
echo "========================================="
|
||||
echo " 🎉 部署完成!"
|
||||
echo "========================================="
|
||||
echo ""
|
||||
echo "📍 访问地址:"
|
||||
echo " 前端: http://localhost:8080"
|
||||
echo " 后端API: http://localhost:40001"
|
||||
echo ""
|
||||
echo "👤 默认管理员账号:"
|
||||
echo " 用户名: admin"
|
||||
echo " 密码: admin123"
|
||||
echo " ⚠️ 请立即登录并修改密码!"
|
||||
echo ""
|
||||
echo "🔐 安全提示:"
|
||||
echo " JWT密钥已自动生成,保存在 backend/.env 中"
|
||||
echo " 请妥善保管该文件!"
|
||||
echo ""
|
||||
echo "📚 查看日志:"
|
||||
echo " docker-compose logs -f"
|
||||
echo ""
|
||||
echo "🛑 停止服务:"
|
||||
echo " docker-compose down"
|
||||
echo ""
|
||||
echo "========================================="
|
||||
@@ -1,130 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
################################################################################
|
||||
# 玩玩云 - Nginx上传限制快速修复脚本
|
||||
# 将上传限制从默认值改为10GB,超时时间改为1小时
|
||||
################################################################################
|
||||
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${BLUE}╔═══════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${BLUE}║ 玩玩云 - Nginx上传限制快速修复脚本 ║${NC}"
|
||||
echo -e "${BLUE}╚═══════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
|
||||
# 检查root权限
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo -e "${RED}✗ 此脚本需要root权限运行${NC}"
|
||||
echo -e "${YELLOW}请使用: sudo bash fix-nginx-upload-limit.sh${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 查找Nginx配置文件
|
||||
NGINX_CONF=""
|
||||
if [[ -f /etc/nginx/sites-available/wanwanyun.conf ]]; then
|
||||
NGINX_CONF="/etc/nginx/sites-available/wanwanyun.conf"
|
||||
elif [[ -f /etc/nginx/conf.d/wanwanyun.conf ]]; then
|
||||
NGINX_CONF="/etc/nginx/conf.d/wanwanyun.conf"
|
||||
else
|
||||
echo -e "${RED}✗ 未找到Nginx配置文件${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}✓ 找到配置文件: $NGINX_CONF${NC}"
|
||||
echo ""
|
||||
|
||||
# 备份原配置
|
||||
BACKUP_FILE="${NGINX_CONF}.backup-$(date +%Y%m%d-%H%M%S)"
|
||||
cp "$NGINX_CONF" "$BACKUP_FILE"
|
||||
echo -e "${GREEN}✓ 已备份配置到: $BACKUP_FILE${NC}"
|
||||
echo ""
|
||||
|
||||
# 检查是否已经配置过
|
||||
if grep -q "client_max_body_size 10G" "$NGINX_CONF"; then
|
||||
echo -e "${YELLOW}⚠ 配置已经是10GB,无需修改${NC}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}正在修改Nginx配置...${NC}"
|
||||
|
||||
# 创建临时文件
|
||||
TEMP_FILE=$(mktemp)
|
||||
|
||||
# 处理配置文件
|
||||
awk '
|
||||
/^server \{/ { in_server=1 }
|
||||
in_server && /server_name/ && !added_size {
|
||||
print
|
||||
print ""
|
||||
print " # 文件上传大小限制(10GB)"
|
||||
print " client_max_body_size 10G;"
|
||||
added_size=1
|
||||
next
|
||||
}
|
||||
in_server && /location \/api/ { in_api=1 }
|
||||
in_api && /proxy_set_header X-Forwarded-Proto/ {
|
||||
print
|
||||
print ""
|
||||
print " # 上传超时设置(大文件上传需要更长时间,设置为1小时)"
|
||||
print " proxy_read_timeout 3600s;"
|
||||
print " proxy_send_timeout 3600s;"
|
||||
print " proxy_connect_timeout 300s;"
|
||||
in_api=0
|
||||
next
|
||||
}
|
||||
# 删除旧的超时设置
|
||||
/proxy_read_timeout/ && in_api { next }
|
||||
/proxy_send_timeout/ && in_api { next }
|
||||
/proxy_connect_timeout/ && in_api { next }
|
||||
# 删除旧的 client_max_body_size
|
||||
/client_max_body_size/ { next }
|
||||
{ print }
|
||||
' "$NGINX_CONF" > "$TEMP_FILE"
|
||||
|
||||
# 替换原文件
|
||||
mv "$TEMP_FILE" "$NGINX_CONF"
|
||||
|
||||
echo -e "${GREEN}✓ 配置已更新${NC}"
|
||||
echo ""
|
||||
|
||||
# 测试Nginx配置
|
||||
echo -e "${BLUE}测试Nginx配置...${NC}"
|
||||
if nginx -t 2>&1 | grep -q "successful"; then
|
||||
echo -e "${GREEN}✓ Nginx配置测试通过${NC}"
|
||||
echo ""
|
||||
|
||||
# 重载Nginx
|
||||
echo -e "${BLUE}重载Nginx服务...${NC}"
|
||||
systemctl reload nginx
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
echo -e "${GREEN}✓ Nginx已重载${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}╔═══════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${GREEN}║ ✓ 修复完成! ║${NC}"
|
||||
echo -e "${GREEN}╚═══════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE}新的配置:${NC}"
|
||||
echo " • 上传大小限制: 10GB"
|
||||
echo " • 读取超时: 3600秒 (1小时)"
|
||||
echo " • 发送超时: 3600秒 (1小时)"
|
||||
echo " • 连接超时: 300秒 (5分钟)"
|
||||
echo ""
|
||||
echo -e "${YELLOW}注意: 请确保您的磁盘空间足够存储大文件!${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ Nginx重载失败${NC}"
|
||||
echo -e "${YELLOW}正在恢复备份...${NC}"
|
||||
cp "$BACKUP_FILE" "$NGINX_CONF"
|
||||
systemctl reload nginx
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}✗ Nginx配置测试失败${NC}"
|
||||
echo -e "${YELLOW}正在恢复备份...${NC}"
|
||||
cp "$BACKUP_FILE" "$NGINX_CONF"
|
||||
exit 1
|
||||
fi
|
||||
@@ -1,82 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 自动修改install.sh添加Cookie配置的脚本
|
||||
|
||||
set -e
|
||||
|
||||
echo "========================================="
|
||||
echo "install.sh Cookie配置自动修改脚本"
|
||||
echo "========================================="
|
||||
echo ""
|
||||
|
||||
# 检查文件是否存在
|
||||
if [[ ! -f "install.sh" ]]; then
|
||||
echo "❌ 错误: install.sh文件不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 备份
|
||||
echo "📦 备份install.sh..."
|
||||
cp install.sh install.sh.backup.$(date +%Y%m%d%H%M%S)
|
||||
echo "✅ 备份完成"
|
||||
echo ""
|
||||
|
||||
# 检查是否已经修改过
|
||||
if grep -q "Cookie传递配置" install.sh; then
|
||||
echo "ℹ️ 检测到install.sh已经包含Cookie配置"
|
||||
echo " 跳过修改"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "🔧 开始修改install.sh..."
|
||||
echo ""
|
||||
|
||||
# 使用perl进行多行匹配和替换
|
||||
perl -i -pe '
|
||||
BEGIN {
|
||||
$cookie_config = "\n" .
|
||||
" # Cookie传递配置(验证码session需要)\n" .
|
||||
" proxy_set_header Cookie \$http_cookie;\n" .
|
||||
" proxy_pass_header Set-Cookie;";
|
||||
}
|
||||
|
||||
# 在 location /api 块中的 X-Forwarded-Proto 后添加Cookie配置
|
||||
if (/proxy_set_header X-Forwarded-Proto \\\$scheme;/ && $in_api_block) {
|
||||
$_ .= $cookie_config . "\n";
|
||||
$added_count++;
|
||||
}
|
||||
|
||||
$in_api_block = 1 if /location \/api/;
|
||||
$in_api_block = 0 if /^\s*\}/;
|
||||
' install.sh
|
||||
|
||||
# 验证修改结果
|
||||
count=$(grep -c "Cookie传递配置" install.sh || echo "0")
|
||||
|
||||
echo "========================================="
|
||||
echo "修改完成"
|
||||
echo "========================================="
|
||||
echo ""
|
||||
echo "📊 修改统计:"
|
||||
echo " - 添加Cookie配置: $count 处"
|
||||
echo ""
|
||||
|
||||
if [[ "$count" -eq 3 ]]; then
|
||||
echo "✅ 成功!修改了3处location /api配置"
|
||||
echo ""
|
||||
echo "修改位置:"
|
||||
grep -n "Cookie传递配置" install.sh | sed 's/^/ 行 /'
|
||||
echo ""
|
||||
echo "📝 建议:"
|
||||
echo " 1. 检查修改是否正确: diff install.sh.backup.* install.sh"
|
||||
echo " 2. 提交到Git: git add install.sh && git commit -m '添加Cookie配置'"
|
||||
echo " 3. 已部署的服务需要手动更新Nginx配置"
|
||||
elif [[ "$count" -gt 0 ]]; then
|
||||
echo "⚠️ 警告: 只修改了 $count 处,预期应该是3处"
|
||||
echo " 请手动检查install.sh文件"
|
||||
else
|
||||
echo "❌ 错误: 修改失败,没有添加任何Cookie配置"
|
||||
echo " 请查看 INSTALL_SH_UPDATE.md 手动修改"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
@@ -1,21 +0,0 @@
|
||||
#!/bin/bash
|
||||
# 修复 isPathWithinShare 函数的路径比较逻辑
|
||||
# 解决分享路径有无斜杠前缀导致的匹配失败问题
|
||||
|
||||
cd "$(dirname "$0")/backend"
|
||||
|
||||
echo "开始修复 server.js..."
|
||||
|
||||
# 使用sed修复
|
||||
sed -i '179s/const normalizedRequest/let normalizedRequest/' server.js
|
||||
sed -i '180s/const normalizedShare/let normalizedShare/' server.js
|
||||
|
||||
# 在第180行后添加路径统一处理
|
||||
sed -i "180a\\
|
||||
\\
|
||||
// 统一移除开头的斜杠进行比较\\
|
||||
normalizedRequest = normalizedRequest.replace(/^\\\\\\/+/, '');\\
|
||||
normalizedShare = normalizedShare.replace(/^\\\\\\/+/, '');" server.js
|
||||
|
||||
echo "修复完成!"
|
||||
echo "请运行: pm2 restart all"
|
||||
192
一键部署命令.txt
192
一键部署命令.txt
@@ -1,192 +0,0 @@
|
||||
╔═══════════════════════════════════════════════════════════════╗
|
||||
║ ║
|
||||
║ 🌩️ 玩玩云 - 一键部署命令 ║
|
||||
║ ║
|
||||
╚═══════════════════════════════════════════════════════════════╝
|
||||
|
||||
📦 项目地址:
|
||||
https://gitee.com/yu-yon/vue-driven-cloud-storage
|
||||
|
||||
|
||||
🚀 一键安装命令(在服务器上执行):
|
||||
|
||||
方式1 (推荐):
|
||||
curl -fsSL https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash
|
||||
|
||||
方式2:
|
||||
wget -qO- https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash
|
||||
|
||||
|
||||
🔄 一键更新命令(在服务器上执行):
|
||||
|
||||
方式1 (推荐):
|
||||
curl -fsSL https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash -s -- --update
|
||||
|
||||
方式2:
|
||||
wget -qO- https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash -s -- --update
|
||||
|
||||
方式3 (如果已下载脚本):
|
||||
bash install.sh --update
|
||||
|
||||
|
||||
🗑️ 一键卸载命令(在服务器上执行):
|
||||
|
||||
方式1:
|
||||
curl -fsSL https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash -s -- --uninstall
|
||||
|
||||
方式2:
|
||||
wget -qO- https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/install.sh | bash -s -- --uninstall
|
||||
|
||||
方式3 (如果已下载脚本):
|
||||
bash install.sh --uninstall
|
||||
|
||||
|
||||
✅ v1.2.6 更新说明:
|
||||
- 🔄 更新脚本增加数据库迁移功能
|
||||
- 自动检测并升级旧的100MB上传限制到10GB
|
||||
- 确保使用更新脚本时数据库配置也会同步更新
|
||||
- 修复更新后仍然保留旧配置的问题
|
||||
|
||||
✅ v1.2.5 更新说明:
|
||||
- 🔥【严重】修复后端代码硬编码100MB上传限制的问题
|
||||
- 将 database.js 中的数据库初始化默认值从100MB改为10GB
|
||||
- 将 server.js 中两处fallback默认值从100MB改为10GB
|
||||
- 确保新部署的系统默认支持10GB单文件上传
|
||||
|
||||
✅ v1.2.4 更新说明:
|
||||
- 🔥【严重】修复管理员账号密码无法正确设置的问题(再次修复)
|
||||
- 在 server.js 开头添加 require('dotenv').config()
|
||||
- 确保环境变量从 .env 文件正确加载
|
||||
- 之前虽然 .env 写入了正确的值,但 server.js 没有加载导致仍使用默认值
|
||||
|
||||
✅ v1.2.3 更新说明:
|
||||
- 🔥【严重】紧急修复更新脚本数据丢失的问题
|
||||
- 重写更新逻辑,改为文件级别复制
|
||||
- 明确排除 data/storage/.env 目录,防止覆盖用户数据
|
||||
- 添加三层保护:排除列表 + 完整性检查 + 备份恢复
|
||||
- 新增 restore-data.sh 脚本帮助受影响用户恢复数据
|
||||
|
||||
✅ v1.2.2 更新说明:
|
||||
- 提升上传限制到 10GB(之前为 500MB)
|
||||
- 延长超时时间到 1小时(之前为 5分钟)
|
||||
- 适配大文件上传场景
|
||||
- 新增 fix-nginx-upload-limit.sh 快速修复脚本
|
||||
|
||||
✅ v1.2.1 更新说明:
|
||||
- 修复 413 错误(Request Entity Too Large)
|
||||
- 为 Nginx 配置添加 client_max_body_size 500M
|
||||
- 添加上传超时设置(proxy_read_timeout 300s)
|
||||
|
||||
✅ v1.2.0 更新说明:
|
||||
- 🎉【新功能】一键更新功能
|
||||
- 自动从Gitee拉取最新代码
|
||||
- 智能备份数据库和用户文件
|
||||
- 自动更新依赖并重启服务
|
||||
- 保留所有用户数据和配置
|
||||
- 支持命令行和交互式菜单两种方式
|
||||
|
||||
✅ v1.1.6 更新说明:
|
||||
- 🔥【严重】修复管理员账号密码设置无效的问题(首次尝试修复)
|
||||
- 安装时设置的管理员账号密码现在会正确生效
|
||||
- 之前版本始终使用默认 admin/admin123,现已修复
|
||||
- 注意:此版本修复不完整,v1.2.4 为最终修复版本
|
||||
|
||||
✅ v1.1.5 更新说明:
|
||||
- 新增安装/卸载模式交互式选择
|
||||
- 支持 curl | bash 管道执行时的友好提示
|
||||
- 优化智能端口检测(80/443/40001 被占用时可自定义)
|
||||
- 允许多个项目共存于同一服务器
|
||||
|
||||
✅ v1.1.4 更新说明:
|
||||
- 智能端口检测和自定义端口配置
|
||||
- 解决端口冲突问题
|
||||
- 支持自定义 HTTP/HTTPS/后端端口
|
||||
|
||||
✅ v1.1.3 更新说明:
|
||||
- 集成一键卸载功能到主脚本
|
||||
- 双重确认机制防止误删
|
||||
- 可选数据备份功能
|
||||
- 完整清理项目文件、PM2进程、Nginx配置、SSL证书
|
||||
- 保留系统环境(Node.js、Nginx、PM2、编译工具)
|
||||
- 智能残留检查
|
||||
|
||||
✅ v1.1.2 更新说明:
|
||||
- 修复npm依赖安装失败问题
|
||||
- 降级better-sqlite3以兼容Node.js 18.x+
|
||||
- 自动安装C++编译工具(gcc-c++, make, python3)
|
||||
- 确保native模块编译成功
|
||||
|
||||
✅ v1.1.1 更新说明:
|
||||
- 升级到 Node.js 20.x LTS(长期支持版本)
|
||||
- 解决 Node.js 18.x 即将停止支持的警告问题
|
||||
- 更长的官方支持周期(至2026年4月)
|
||||
- 更好的性能和安全性
|
||||
|
||||
✅ v1.1.0 更新说明:
|
||||
- 新增支持 Rocky Linux、AlmaLinux、Fedora、openSUSE
|
||||
- 实现统一包管理器检测,自动适配不同系统
|
||||
- 优化阿里云镜像源配置,支持更多发行版
|
||||
- 改进系统兼容性,未识别系统可自动检测包管理器
|
||||
- 全面支持 APT、YUM、DNF、Zypper 包管理器
|
||||
|
||||
|
||||
✨ 支持的操作系统:
|
||||
- ✅ Ubuntu 18.04 / 20.04 / 22.04 / 24.04
|
||||
- ✅ Debian 10 / 11 / 12
|
||||
- ✅ CentOS 7 / 8
|
||||
- ✅ RHEL 7 / 8 / 9
|
||||
- ✅ Rocky Linux 8 / 9
|
||||
- ✅ AlmaLinux 8 / 9
|
||||
- ✅ Fedora 35+
|
||||
- ✅ openSUSE Leap
|
||||
- ✅ 其他基于以上系统的发行版
|
||||
|
||||
|
||||
✨ 脚本特性:
|
||||
- ✅ 完全自动化部署,无需手动操作
|
||||
- ✅ 支持 Ubuntu/Debian/CentOS/RHEL/Rocky/AlmaLinux/Fedora/openSUSE
|
||||
- ✅ 自动检测系统并安装对应依赖
|
||||
- ✅ 自动安装 Node.js、Nginx、PM2 等依赖
|
||||
- ✅ 提供官方源和阿里云镜像源选择
|
||||
- ✅ 支持域名/IP 两种访问模式
|
||||
- ✅ 6种SSL证书自动部署方案
|
||||
- ✅ 智能容错和重试机制
|
||||
- ✅ 健康检查和完整提示
|
||||
|
||||
|
||||
📋 用户只需:
|
||||
1. 选择软件源(官方/阿里云)
|
||||
2. 选择访问模式(域名/IP)
|
||||
3. 如果是域名模式,选择SSL证书方案
|
||||
4. 输入管理员账号和密码
|
||||
5. 等待自动部署完成
|
||||
|
||||
|
||||
💡 使用示例:
|
||||
|
||||
1. 登录服务器(SSH)
|
||||
2. 复制一键安装命令并执行
|
||||
3. 按照提示输入选项(例如输入 2 选择阿里云源)
|
||||
4. 等待部署完成
|
||||
5. 访问您的域名或IP地址
|
||||
|
||||
|
||||
📖 详细文档:
|
||||
https://gitee.com/yu-yon/vue-driven-cloud-storage/blob/master/INSTALL_GUIDE.md
|
||||
|
||||
|
||||
🔧 部署后管理:
|
||||
- 查看服务状态: pm2 status
|
||||
- 查看日志: pm2 logs wanwanyun-backend
|
||||
- 重启服务: pm2 restart wanwanyun-backend
|
||||
- 配置文件: /var/www/wanwanyun/backend/.env
|
||||
|
||||
|
||||
📞 获取帮助:
|
||||
- 提交Issue: https://gitee.com/yu-yon/vue-driven-cloud-storage/issues
|
||||
- 查看文档: 项目README.md
|
||||
|
||||
|
||||
═══════════════════════════════════════════════════════════════
|
||||
|
||||
祝您使用愉快! 🎉
|
||||
Reference in New Issue
Block a user