From 98cadb3c8b6181432d576f4a8dc250fcd0bac838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=96=BB=E5=8B=87=E7=A5=A5?= <237899745@qq.com> Date: Mon, 24 Nov 2025 21:38:56 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=B9=20=E6=B8=85=E7=90=86=E5=86=97?= =?UTF-8?q?=E4=BD=99=E6=96=87=E6=A1=A3=E5=92=8C=E8=84=9A=E6=9C=AC=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 项目清理: - 删除重复的部署文档(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 --- CAPTCHA_FEATURE.md | 280 --------- CAPTCHA_QUICK_FIX.md | 268 -------- CAPTCHA_README.md | 173 ------ DEPLOY.md | 183 ------ DEPLOYMENT.md | 189 ------ DOCKER部署指南.md | 1211 ------------------------------------- INSTALL_GUIDE.md | 295 --------- INSTALL_SH_UPDATE.md | 192 ------ QUICK_START.txt | 49 -- UPDATE_SUMMARY_v1.1.0.md | 320 ---------- VERSION.txt | 118 ---- deploy.sh | 155 ----- fix-nginx-upload-limit.sh | 130 ---- fix_install_sh.sh | 82 --- fix_share_path.sh | 21 - 一键部署命令.txt | 192 ------ 16 files changed, 3858 deletions(-) delete mode 100644 CAPTCHA_FEATURE.md delete mode 100644 CAPTCHA_QUICK_FIX.md delete mode 100644 CAPTCHA_README.md delete mode 100644 DEPLOY.md delete mode 100644 DEPLOYMENT.md delete mode 100644 DOCKER部署指南.md delete mode 100644 INSTALL_GUIDE.md delete mode 100644 INSTALL_SH_UPDATE.md delete mode 100644 QUICK_START.txt delete mode 100644 UPDATE_SUMMARY_v1.1.0.md delete mode 100644 VERSION.txt delete mode 100644 deploy.sh delete mode 100644 fix-nginx-upload-limit.sh delete mode 100755 fix_install_sh.sh delete mode 100644 fix_share_path.sh delete mode 100644 一键部署命令.txt diff --git a/CAPTCHA_FEATURE.md b/CAPTCHA_FEATURE.md deleted file mode 100644 index 2662125..0000000 --- a/CAPTCHA_FEATURE.md +++ /dev/null @@ -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 -- 后端日志文件 diff --git a/CAPTCHA_QUICK_FIX.md b/CAPTCHA_QUICK_FIX.md deleted file mode 100644 index a1bc2c3..0000000 --- a/CAPTCHA_QUICK_FIX.md +++ /dev/null @@ -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"}' -``` - -## 📞 提供这些信息后我可以进一步帮助你! diff --git a/CAPTCHA_README.md b/CAPTCHA_README.md deleted file mode 100644 index 3377410..0000000 --- a/CAPTCHA_README.md +++ /dev/null @@ -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次登录失败 -![正常登录表单](screenshots/login_normal.png) -- 显示用户名和密码输入框 -- 提示"用户名或密码错误" - -### 第3次登录失败(触发验证码) -![验证码登录表单](screenshots/login_captcha.png) -- 自动显示验证码输入框 -- 显示4位数字验证码图片 -- 可点击图片刷新验证码 - -### 验证码验证 -![验证码输入](screenshots/captcha_input.png) -- 输入图片中的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. 查看详细文档 diff --git a/DEPLOY.md b/DEPLOY.md deleted file mode 100644 index 3eeb7b1..0000000 --- a/DEPLOY.md +++ /dev/null @@ -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. ✅ 定期备份数据库 - -祝您使用愉快!☁️ diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md deleted file mode 100644 index 6d97557..0000000 --- a/DEPLOYMENT.md +++ /dev/null @@ -1,189 +0,0 @@ -# 玩玩云部署指南 - -## 快速部署 - -### 1. 基础部署(Docker Compose) - -```bash -# 克隆项目 -git clone -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 -``` diff --git a/DOCKER部署指南.md b/DOCKER部署指南.md deleted file mode 100644 index cb6ac37..0000000 --- a/DOCKER部署指南.md +++ /dev/null @@ -1,1211 +0,0 @@ -# 玩玩云 - Docker部署指南 - -> **📌 重要提示:代码自动适配域名** -> -> 本项目代码**完全支持域名动态适配**,无需修改任何代码: -> - ✅ 前端会自动使用当前访问的域名和协议(http/https) -> - ✅ 后端会从HTTP请求头动态获取域名信息 -> - ✅ 上传工具配置文件会自动生成正确的API地址 -> -> **您只需要:** -> 1. 配置宝塔/Nginx的反向代理指向Docker容器 -> 2. 配置SSL证书(可选,推荐) -> 3. 启动Docker容器 -> -> **无需修改代码中的任何域名或IP地址!** - -## 目录 -1. [系统要求](#系统要求) -2. [部署架构](#部署架构) -3. [快速部署步骤](#快速部署步骤) -4. [详细配置说明](#详细配置说明) -5. [常见问题解决](#常见问题解决) -6. [维护操作](#维护操作) - ---- - -## 系统要求 - -### 服务器配置 -- **操作系统**: Ubuntu 20.04+ / CentOS 7+ / Debian 10+ -- **内存**: 最低 1GB RAM(推荐 2GB+) -- **磁盘**: 最低 10GB 可用空间 -- **端口**: 需要开放以下端口 - - `80` - HTTP (可选,用于重定向到HTTPS) - - `443` - HTTPS (SSL访问) - - `8080` - 内部HTTP端口(Docker容器) - - `40001` - 后端API端口(Docker容器) - -### 软件依赖 -- **Docker**: 20.10.0+ -- **Docker Compose**: 2.0.0+ -- **Git**: 用于代码管理(可选) -- **Nginx**: 宝塔面板或系统级Nginx(用于SSL终止和反向代理) - ---- - -## 部署架构 - -``` -互联网 - ↓ -宝塔 Nginx (443 HTTPS) ← SSL证书在此层 - ↓ -Docker Nginx (8080 HTTP) ← 前端静态文件 - ↓ -Backend API (40001) ← Node.js + SQLite - ↓ -SFTP服务器 (用户自建) -``` - -### 容器架构 -``` -docker-compose.yml -├── frontend (nginx:alpine) -│ ├── 静态文件: /usr/share/nginx/html -│ ├── Nginx配置: /etc/nginx/conf.d/default.conf -│ └── 端口: 8080:80, 8443:443 -│ -├── backend (wanwanyun-backend) -│ ├── Node.js应用: /app -│ ├── 数据库: /app/users.db (SQLite) -│ ├── 上传工具: /upload-tool -│ └── 端口: 40001:40001 -│ -└── certbot (certbot/certbot) - └── SSL证书: /etc/letsencrypt (可选) -``` - ---- - -## 快速部署步骤 - -### 步骤1: 准备服务器环境 - -```bash -# 1. 安装Docker -curl -fsSL https://get.docker.com | sh -systemctl start docker -systemctl enable docker - -# 2. 安装Docker Compose -curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose -chmod +x /usr/local/bin/docker-compose - -# 3. 验证安装 -docker --version -docker-compose --version -``` - -### 步骤2: 上传项目文件 - -```bash -# 在服务器上创建项目目录 -mkdir -p /var/www/wanwanyun -cd /var/www/wanwanyun - -# 从本地上传所有文件(在本地执行) -scp -r C:/Users/Administrator/Desktop/ftp-web-manager/* root@YOUR_SERVER_IP:/var/www/wanwanyun/ -``` - -或使用Git: -```bash -cd /var/www/wanwanyun -git clone YOUR_REPOSITORY_URL . -``` - -### 步骤3: 构建后端镜像 - -```bash -cd /var/www/wanwanyun -docker build -t wanwanyun-backend -f backend/Dockerfile . -``` - -**Dockerfile内容**(应该在 `backend/Dockerfile`): -```dockerfile -FROM node:18-alpine - -WORKDIR /app - -# 复制package.json和package-lock.json -COPY backend/package*.json ./ - -# 安装依赖 -RUN npm install --production - -# 复制应用代码 -COPY backend/ ./ - -# 暴露端口 -EXPOSE 40001 - -# 启动应用 -CMD ["node", "server.js"] -``` - -### 步骤4: 启动容器 - -```bash -cd /var/www/wanwanyun -docker-compose up -d - -# 查看容器状态 -docker-compose ps - -# 查看日志 -docker-compose logs -f -``` - -### 步骤5: 配置宝塔Nginx(或系统Nginx) - -#### 宝塔面板配置 - -1. **添加网站** - - 域名: `example.com`(替换为您的实际域名) - - 根目录: `/var/www/wanwanyun/frontend`(仅作为占位,实际不使用) - - PHP版本: 纯静态 - -2. **配置SSL证书** - - 在宝塔面板申请Let's Encrypt证书 - - 或上传自有证书 - -3. **修改Nginx配置** - -编辑网站配置文件(通常在 `/www/server/panel/vhost/nginx/您的域名.conf`): - -```nginx -# HTTP重定向到HTTPS -server { - listen 80; - server_name example.com; # 替换为您的域名 - return 301 https://$server_name$request_uri; -} - -# HTTPS配置 -server { - listen 443 ssl http2; - server_name example.com; # 替换为您的域名 - - # SSL证书路径(宝塔自动配置) - ssl_certificate /www/server/panel/vhost/cert/example.com/fullchain.pem; - ssl_certificate_key /www/server/panel/vhost/cert/example.com/privkey.pem; - - ssl_protocols TLSv1.2 TLSv1.3; - ssl_ciphers HIGH:!aNULL:!MD5; - ssl_prefer_server_ciphers on; - - # 反向代理到Docker容器 - location / { - 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"; - } - - # API反向代理 - location /api/ { - 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; - } - - # 分享链接 - location /s/ { - 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; - } - - # 访问日志 - access_log /www/wwwlogs/example.com.log; - error_log /www/wwwlogs/example.com.error.log; -} -``` - -4. **重载Nginx** -```bash -nginx -t # 测试配置 -nginx -s reload # 重载配置 -``` - -#### 系统Nginx配置(无宝塔) - -配置文件位置: `/etc/nginx/sites-available/wanwanyun.conf` - -```nginx -# 与上述配置相同,但SSL证书路径可能不同 -ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; -ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; -``` - -创建软链接并重载: -```bash -ln -s /etc/nginx/sites-available/wanwanyun.conf /etc/nginx/sites-enabled/ -nginx -t -systemctl reload nginx -``` - -### 步骤6: 验证部署 - -1. **访问网站** - ``` - https://example.com # 替换为您的域名 - ``` - -2. **默认管理员账号** - - 首次启动会自动创建: - - 用户名: `admin` - - 密码: `admin123` - - ⚠️ **登录后请立即修改密码!** - -3. **测试功能** - - ✓ 登录/注册 - - ✓ SFTP配置 - - ✓ 文件列表 - - ✓ 文件上传/下载 - - ✓ 文件分享 - - ✓ 下载上传工具 - ---- - -## 详细配置说明 - -### 1. docker-compose.yml 配置 - -```yaml -version: '3.8' - -services: - backend: - image: wanwanyun-backend - container_name: wanwanyun-backend - restart: always - ports: - - "40001:40001" - volumes: - - ./backend:/app - - /app/node_modules - - ./upload-tool:/upload-tool # 上传工具目录 - environment: - - NODE_ENV=production - networks: - - wanwanyun-network - - frontend: - image: nginx:alpine - container_name: wanwanyun-frontend - restart: always - ports: - - "8080:80" # HTTP端口 - - "8443:443" # HTTPS端口(可选,如果使用Docker内SSL) - volumes: - - ./frontend:/usr/share/nginx/html - - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf - - ./certbot/conf:/etc/letsencrypt # 可选 - - ./certbot/www:/var/www/certbot # 可选 - depends_on: - - backend - networks: - - wanwanyun-network - command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'" - - certbot: # 可选:Docker内自动续期SSL证书 - image: certbot/certbot - container_name: wanwanyun-certbot - restart: unless-stopped - volumes: - - ./certbot/conf:/etc/letsencrypt - - ./certbot/www:/var/www/certbot - entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'" - -networks: - wanwanyun-network: - driver: bridge -``` - -### 2. Nginx配置(Docker内部) - -文件位置: `nginx/nginx.conf` - -```nginx -server { - listen 80; - server_name localhost; - - # 前端静态文件 - location / { - root /usr/share/nginx/html; - index index.html; - try_files $uri $uri/ =404; - } - - # 后端API反向代理 - location /api/ { - proxy_pass http://backend:40001; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection 'upgrade'; - 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_cache_bypass $http_upgrade; - } - - # 分享链接重定向 - location /s/ { - proxy_pass http://backend:40001; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } -} -``` - -### 3. 环境变量配置(可选) - -创建 `.env` 文件: -```env -# 数据库配置 -DB_PATH=/app/users.db - -# JWT密钥(请修改为随机字符串) -JWT_SECRET=your-secret-key-change-this-in-production - -# 后端端口 -PORT=40001 - -# 最大上传大小(字节) -MAX_UPLOAD_SIZE=104857600 - -# 生产环境标志 -NODE_ENV=production -``` - -### 4. 目录结构说明 - -``` -/var/www/wanwanyun/ -├── backend/ # 后端代码 -│ ├── server.js # 主服务器文件 -│ ├── package.json # Node.js依赖 -│ ├── Dockerfile # 后端镜像构建文件 -│ └── users.db # SQLite数据库(自动生成) -│ -├── frontend/ # 前端代码 -│ ├── index.html # 登录页面 -│ ├── app.html # 主应用页面 -│ ├── app.js # Vue.js应用逻辑 -│ └── libs/ # 第三方库 -│ ├── vue.global.js -│ ├── axios.min.js -│ └── fontawesome/ -│ -├── nginx/ # Nginx配置 -│ ├── nginx.conf # 当前使用的配置 -│ └── nginx.conf.example # 配置示例 -│ -├── upload-tool/ # 上传工具 -│ └── dist/ -│ └── 玩玩云上传工具.exe -│ -├── certbot/ # SSL证书(可选) -│ ├── conf/ -│ └── www/ -│ -└── docker-compose.yml # Docker编排文件 -``` - ---- - -## 常见问题解决 - -### 问题1: 502 Bad Gateway - -**症状**: 访问网站显示nginx 502错误 - -**原因**: -- Docker容器未启动 -- 宝塔nginx配置错误(HTTPS代理到HTTP容器) -- 端口冲突 - -**解决方案**: - -```bash -# 1. 检查容器状态 -docker-compose ps - -# 2. 查看容器日志 -docker-compose logs backend -docker-compose logs frontend - -# 3. 重启容器 -docker-compose restart - -# 4. 检查宝塔nginx配置 -# 确保proxy_pass使用HTTP而不是HTTPS -proxy_pass http://127.0.0.1:8080; # 正确 -# proxy_pass https://127.0.0.1:8443; # 错误(如果Docker内未配置SSL) - -# 5. 检查端口占用 -netstat -tulnp | grep 8080 -netstat -tulnp | grep 40001 -``` - -### 问题2: 上传工具无法下载 - -**症状**: 点击"下载上传工具"后浏览器报错 - -**原因**: Docker容器未挂载 `upload-tool` 目录 - -**解决方案**: - -```bash -# 1. 检查docker-compose.yml中是否有以下配置 -# backend服务的volumes部分应包含: -- ./upload-tool:/upload-tool - -# 2. 检查文件是否存在 -ls -la /var/www/wanwanyun/upload-tool/dist/ - -# 3. 重新创建容器(不是重启) -cd /var/www/wanwanyun -docker-compose up -d --force-recreate backend - -# 4. 验证容器内可访问文件 -docker exec wanwanyun-backend ls -la /upload-tool/dist/ -``` - -### 问题3: SFTP连接失败 - -**症状**: 保存SFTP配置时报错 "Connection refused" 或 "Permission denied" - -**原因**: -- SFTP服务器IP/端口错误 -- 防火墙阻止 -- 认证信息错误 -- 服务器IP被SFTP服务器限制 - -**解决方案**: - -```bash -# 1. 在服务器上测试SFTP连接 -sshpass -p 'YOUR_PASSWORD' sftp -P 22 username@sftp.server.com - -# 2. 检查防火墙 -# 确保后端容器可以访问外部SFTP服务器 -docker exec wanwanyun-backend ping sftp.server.com - -# 3. 如果SFTP服务器限制IP -# 需要在SFTP服务器上添加Docker服务器IP到白名单 - -# 4. 检查后端日志 -docker logs wanwanyun-backend | grep -i sftp -``` - -### 问题4: 文件删除失败 "Permission denied" - -**症状**: 删除某些文件时提示权限被拒绝 - -**原因**: SFTP chroot安全限制,根目录文件不可删除 - -**解决方案**: - -这**不是bug**,是安全设计: -- `/` 根目录: 只读,系统配置文件(.bashrc等) -- `/files` 目录: 可读写,用户工作目录 - -**建议**: 所有文件应上传到 `/files` 目录 - -### 问题5: 语法错误 "Uncaught SyntaxError" - -**症状**: 浏览器控制台显示 app.js 语法错误 - -**原因**: JavaScript字符串中有字面换行符 - -**解决方案**: - -```bash -# 检查是否有换行符错误 -cd /var/www/wanwanyun/frontend -cat -A app.js | grep -n "\\$" - -# 如果发现问题,重新从本地同步 -scp C:/Users/Administrator/Desktop/ftp-web-manager/frontend/app.js root@SERVER:/var/www/wanwanyun/frontend/ - -# 重启前端容器 -docker-compose restart frontend -``` - -### 问题6: 数据库锁定 "Database is locked" - -**症状**: 多个用户同时操作时报数据库锁定错误 - -**原因**: SQLite不支持高并发写入 - -**解决方案**: - -1. **短期方案**: 增加超时时间 - -修改 `backend/server.js`: -```javascript -const db = new Database('users.db', { - timeout: 10000 // 增加到10秒 -}); -``` - -2. **长期方案**: 迁移到PostgreSQL或MySQL - -### 问题7: 端口冲突 - -**症状**: 启动容器时报错 "port is already allocated" - -**解决方案**: - -```bash -# 1. 查找占用端口的进程 -netstat -tulnp | grep 8080 -netstat -tulnp | grep 40001 - -# 2. 停止冲突的服务 -systemctl stop nginx # 如果是系统nginx占用8080 - -# 3. 或修改docker-compose.yml中的端口映射 -# 将 "8080:80" 改为 "8081:80" -# 相应修改宝塔nginx配置中的proxy_pass端口 -``` - -### 问题8: SSL证书过期 - -**症状**: 浏览器显示证书无效警告 - -**解决方案**: - -#### 使用宝塔面板: -```bash -# 在宝塔面板网站设置中点击"续签证书" -# 或使用宝塔计划任务自动续签 -``` - -#### 使用Certbot (Docker): -```bash -# 手动续签 -docker-compose run --rm certbot renew - -# 重载nginx -docker-compose exec frontend nginx -s reload - -# certbot容器会自动每12小时检查并续签 -``` - -### 问题9: 容器内存不足 - -**症状**: 容器频繁重启,日志显示 "Out of memory" - -**解决方案**: - -```bash -# 1. 检查内存使用 -docker stats - -# 2. 限制容器内存(在docker-compose.yml中) -services: - backend: - # ... 其他配置 - deploy: - resources: - limits: - memory: 512M - reservations: - memory: 256M - -# 3. 清理Docker缓存 -docker system prune -a -``` - -### 问题10: X-Forwarded-Proto检测失败 - -**症状**: 下载上传工具时生成的URL是HTTP而不是HTTPS - -**原因**: 反向代理未传递协议头 - -**解决方案**: - -确保宝塔nginx配置包含: -```nginx -proxy_set_header X-Forwarded-Proto $scheme; -``` - -验证后端正确读取: -```javascript -// backend/server.js -const protocol = req.get('x-forwarded-proto') || req.protocol; -``` - ---- - -## 维护操作 - -### 日常维护 - -#### 查看日志 -```bash -# 查看所有容器日志 -docker-compose logs -f - -# 查看特定容器日志 -docker-compose logs -f backend -docker-compose logs -f frontend - -# 查看最近100行 -docker-compose logs --tail=100 backend - -# 实时滚动日志 -docker-compose logs -f --tail=50 -``` - -#### 重启服务 -```bash -# 重启所有容器 -docker-compose restart - -# 重启特定容器 -docker-compose restart backend -docker-compose restart frontend - -# 重新创建容器(配置更改后) -docker-compose up -d --force-recreate -``` - -#### 停止和启动 -```bash -# 停止所有容器 -docker-compose stop - -# 启动所有容器 -docker-compose start - -# 完全停止并移除容器 -docker-compose down - -# 启动(创建容器) -docker-compose up -d -``` - -### 更新部署 - -#### 更新代码 -```bash -# 1. 备份数据库 -cp /var/www/wanwanyun/backend/users.db /var/www/wanwanyun/backend/users.db.backup - -# 2. 拉取最新代码(如果使用Git) -cd /var/www/wanwanyun -git pull - -# 3. 或从本地上传更新的文件 -scp C:/Users/Administrator/Desktop/ftp-web-manager/backend/server.js root@SERVER:/var/www/wanwanyun/backend/ -scp C:/Users/Administrator/Desktop/ftp-web-manager/frontend/app.js root@SERVER:/var/www/wanwanyun/frontend/ - -# 4. 重启容器 -docker-compose restart backend frontend -``` - -#### 更新Docker镜像 -```bash -# 1. 停止容器 -docker-compose down - -# 2. 重新构建后端镜像 -docker build -t wanwanyun-backend -f backend/Dockerfile . - -# 3. 拉取最新官方镜像 -docker-compose pull frontend certbot - -# 4. 启动 -docker-compose up -d -``` - -### 备份和恢复 - -#### 备份数据 -```bash -# 创建备份目录 -mkdir -p /backup/wanwanyun/$(date +%Y%m%d) - -# 备份数据库 -cp /var/www/wanwanyun/backend/users.db /backup/wanwanyun/$(date +%Y%m%d)/ - -# 备份整个项目 -tar -czf /backup/wanwanyun/$(date +%Y%m%d)/wanwanyun-full.tar.gz /var/www/wanwanyun - -# 定期备份脚本(添加到crontab) -# 每天凌晨2点备份 -# 0 2 * * * /usr/bin/tar -czf /backup/wanwanyun/$(date +\%Y\%m\%d)/backup.tar.gz /var/www/wanwanyun/backend/users.db -``` - -#### 恢复数据 -```bash -# 停止容器 -docker-compose down - -# 恢复数据库 -cp /backup/wanwanyun/20251108/users.db /var/www/wanwanyun/backend/ - -# 启动容器 -docker-compose up -d -``` - -### 监控和性能 - -#### 监控容器资源 -```bash -# 实时监控 -docker stats - -# 查看容器详细信息 -docker inspect wanwanyun-backend -docker inspect wanwanyun-frontend -``` - -#### 性能优化 - -1. **启用Gzip压缩** (nginx/nginx.conf): -```nginx -gzip on; -gzip_types text/plain text/css application/json application/javascript text/xml application/xml; -gzip_min_length 1000; -``` - -2. **配置浏览器缓存**: -```nginx -location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { - expires 7d; - add_header Cache-Control "public, immutable"; -} -``` - -3. **限制并发连接**: -```nginx -limit_conn_zone $binary_remote_addr zone=addr:10m; -limit_conn addr 10; -``` - -### 清理和优化 - -```bash -# 清理未使用的Docker资源 -docker system prune -a - -# 清理日志(如果过大) -truncate -s 0 /var/lib/docker/containers/*/*-json.log - -# 查看磁盘使用 -docker system df -``` - ---- - -## 安全建议 - -### 1. 修改默认配置 - -- 修改JWT_SECRET为随机字符串 -- 修改数据库默认路径 -- 限制管理员账号数量 - -### 2. 防火墙配置 - -```bash -# 只开放必要端口 -ufw allow 80/tcp -ufw allow 443/tcp -ufw deny 40001/tcp # 不对外开放后端端口 -ufw deny 8080/tcp # 不对外开放Docker HTTP端口 -ufw enable -``` - -### 3. 日志审计 - -```bash -# 定期检查访问日志 -tail -f /www/wwwlogs/example.com.log - -# 查找异常请求 -grep "POST /api/login" /www/wwwlogs/example.com.log | grep -v "200" -``` - -### 4. 定期更新 - -```bash -# 更新系统 -apt update && apt upgrade -y - -# 更新Docker镜像 -docker-compose pull -docker-compose up -d -``` - ---- - -## 故障排查流程 - -### 基本诊断命令 - -```bash -# 1. 检查容器状态 -docker-compose ps - -# 2. 检查端口监听 -netstat -tulnp | grep -E "80|443|8080|40001" - -# 3. 测试后端API -curl http://localhost:40001/api/user/profile - -# 4. 测试前端访问 -curl http://localhost:8080 - -# 5. 检查nginx配置 -nginx -t - -# 6. 查看完整日志 -docker-compose logs --tail=100 - -# 7. 进入容器调试 -docker exec -it wanwanyun-backend sh -docker exec -it wanwanyun-frontend sh -``` - -### 故障决策树 - -``` -网站无法访问 -├── 502 错误 -│ ├── 容器未启动 → docker-compose up -d -│ ├── nginx配置错误 → 检查proxy_pass -│ └── 端口冲突 → netstat检查 -│ -├── 404 错误 -│ ├── 路由配置错误 → 检查nginx.conf -│ └── 文件不存在 → 检查/usr/share/nginx/html -│ -├── 500 错误 -│ ├── 后端崩溃 → docker logs backend -│ ├── 数据库错误 → 检查users.db权限 -│ └── 代码错误 → 查看error.log -│ -└── 连接超时 - ├── 防火墙阻止 → ufw status - ├── 容器网络问题 → docker network ls - └── DNS解析失败 → ping域名 -``` - ---- - -## 联系和支持 - -如果遇到无法解决的问题: - -1. 收集以下信息: - - 错误信息截图 - - `docker-compose logs` 输出 - - `nginx -T` 配置输出 - - 系统信息 `uname -a` - -2. 检查日志中的错误堆栈 - -3. 参考本指南的"常见问题解决"部分 - ---- - -## 附录 - -### A. 完整的docker-compose.yml示例 - -参见项目根目录的 `docker-compose.yml` 文件 - -### B. 完整的Nginx配置示例 - -参见 `nginx/nginx.conf` 和 `nginx/nginx.conf.example` - -### C. 后端Dockerfile示例 - -```dockerfile -FROM node:18-alpine - -WORKDIR /app - -COPY backend/package*.json ./ -RUN npm install --production - -COPY backend/ ./ - -EXPOSE 40001 - -CMD ["node", "server.js"] -``` - -### D. 环境检查脚本 - -```bash -#!/bin/bash -# 保存为 check-env.sh - -echo "=== 玩玩云环境检查 ===" - -echo -e "\n1. Docker版本:" -docker --version - -echo -e "\n2. Docker Compose版本:" -docker-compose --version - -echo -e "\n3. 容器状态:" -docker-compose ps - -echo -e "\n4. 端口监听:" -netstat -tulnp | grep -E "80|443|8080|40001" - -echo -e "\n5. 磁盘空间:" -df -h /var/www/wanwanyun - -echo -e "\n6. 内存使用:" -docker stats --no-stream - -echo -e "\n7. 最近错误日志:" -docker-compose logs --tail=20 | grep -i error - -echo -e "\n=== 检查完成 ===" -``` - ---- - -**文档版本**: v1.0 -**最后更新**: 2025-11-08 -**适用版本**: 玩玩云 v1.0 - ---- - -## SFTP服务器配置指南 - -### 方案:使用bindfs实现根目录可写的chroot - -本项目推荐使用bindfs技术配置SFTP服务器,可以实现: -- ✅ **根目录可写** - 上传工具可直接上传到 `/filename` -- ✅ **Chroot隔离** - 用户只能访问独立空间,安全性高 -- ✅ **无需修改代码** - 上传工具保持原样 - -### 配置步骤 - -#### 1. 安装必要工具 - -```bash -# 在SFTP服务器上执行 -apt-get update -apt-get install -y bindfs openssh-server -``` - -#### 2. 创建用户和目录 - -```bash -# 创建真实数据目录 -mkdir -p /var/sftp_data/wwy_upload -chown -R wwy_upload:wwy_upload /var/sftp_data/wwy_upload -chmod 755 /var/sftp_data/wwy_upload - -# 创建chroot目录 -mkdir -p /home/wwy_ftp_upload - -# 创建用户 -useradd -d /var/sftp_data/wwy_upload -s /bin/bash wwy_upload -printf 'wwy_upload:Wwy@2024Pass' | chpasswd -``` - -#### 3. 配置bindfs挂载 - -```bash -# 使用bindfs挂载(关键步骤) -bindfs --mirror=wwy_upload \ - --force-user=root --force-group=root \ - --perms=0755 \ - /var/sftp_data/wwy_upload /home/wwy_ftp_upload -``` - -**参数说明**: -- `--mirror=wwy_upload`: 以wwy_upload用户身份镜像所有操作 -- `--force-user=root --force-group=root`: 让目录看起来归root所有(满足chroot要求) -- `--perms=0755`: 设置目录权限 - -#### 4. 配置开机自动挂载 - -编辑 `/etc/fstab`,添加: - -``` -/var/sftp_data/wwy_upload /home/wwy_ftp_upload fuse.bindfs mirror=wwy_upload,force-user=root,force-group=root,perms=0755 0 0 -``` - -#### 5. 配置SSH chroot - -编辑 `/etc/ssh/sshd_config`,添加: - -``` -Match User wwy_upload - ChrootDirectory /home/wwy_ftp_upload - ForceCommand internal-sftp - AllowTcpForwarding no - X11Forwarding no -``` - -重启SSH服务: - -```bash -systemctl restart sshd -``` - -#### 6. 测试配置 - -```bash -# 测试上传到根目录 -echo 'Test file' > /tmp/test.txt -sshpass -p 'Wwy@2024Pass' sftp wwy_upload@localhost < { - const filePath = req.query.path; - const sftp = await connectToSFTP(req.user); - - // 获取文件大小(用于显示下载进度) - const fileStats = await sftp.stat(filePath); - const fileSize = fileStats.size; - - // 设置响应头 - res.setHeader('Content-Type', 'application/octet-stream'); - res.setHeader('Content-Length', fileSize); // 浏览器可显示进度 - res.setHeader('Content-Disposition', 'attachment; filename="..."'); - - // 流式传输(服务器不保存临时文件) - const stream = sftp.createReadStream(filePath); - stream.pipe(res); -}); -``` - -### 自动选择逻辑 - -前端自动判断使用哪种模式: - -```javascript -downloadFile(file) { - if (file.httpDownloadUrl) { - // 如果配置了HTTP URL,使用HTTP直接下载 - window.open(file.httpDownloadUrl, "_blank"); - } else { - // 如果没有配置,通过后端SFTP下载 - const link = document.createElement('a'); - link.href = `${this.apiBase}/api/files/download?path=${filePath}&token=${token}`; - link.click(); - } -} -``` - ---- - -## 版本更新日志 - -### v1.1 (2025-11-09) - -**新增功能**: -- ✅ SFTP流式下载(无需配置HTTP URL) -- ✅ 下载进度显示(文件大小、速度、剩余时间) -- ✅ bindfs SFTP服务器配置方案 - -**改进**: -- ✅ 服务器零存储下载(纯中转) -- ✅ 下载逻辑自动选择(HTTP/SFTP) -- ✅ 优化用户体验 - -**修复**: -- ✅ 修复下载无进度显示的问题 -- ✅ 修复未配置HTTP URL时无法下载的问题 - -### v1.0 (2025-11-08) - -**初始版本**: -- ✅ 文件管理基础功能 -- ✅ 文件分享功能 -- ✅ 多用户系统 -- ✅ 上传工具 -- ✅ Docker部署 - ---- - -**文档版本**: v1.1 -**最后更新**: 2025-11-09 -**适用版本**: 玩玩云 v1.1 diff --git a/INSTALL_GUIDE.md b/INSTALL_GUIDE.md deleted file mode 100644 index e326eb3..0000000 --- a/INSTALL_GUIDE.md +++ /dev/null @@ -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. **网络环境**: 需要能够访问外网下载依赖包 - ---- - -**祝您使用愉快!** 🎉 diff --git a/INSTALL_SH_UPDATE.md b/INSTALL_SH_UPDATE.md deleted file mode 100644 index 4d64eeb..0000000 --- a/INSTALL_SH_UPDATE.md +++ /dev/null @@ -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配置 -- 修改后记得测试验证码功能 diff --git a/QUICK_START.txt b/QUICK_START.txt deleted file mode 100644 index c10196e..0000000 --- a/QUICK_START.txt +++ /dev/null @@ -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 - -祝您使用愉快!☁️ diff --git a/UPDATE_SUMMARY_v1.1.0.md b/UPDATE_SUMMARY_v1.1.0.md deleted file mode 100644 index 06e3355..0000000 --- a/UPDATE_SUMMARY_v1.1.0.md +++ /dev/null @@ -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` - ---- - -**感谢使用玩玩云!** 🎉 diff --git a/VERSION.txt b/VERSION.txt deleted file mode 100644 index 069269b..0000000 --- a/VERSION.txt +++ /dev/null @@ -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 提交历史 -许可证: 仅供学习和个人使用 - -═══════════════════════════════════════ diff --git a/deploy.sh b/deploy.sh deleted file mode 100644 index 8fe2bea..0000000 --- a/deploy.sh +++ /dev/null @@ -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 "=========================================" diff --git a/fix-nginx-upload-limit.sh b/fix-nginx-upload-limit.sh deleted file mode 100644 index 17380f6..0000000 --- a/fix-nginx-upload-limit.sh +++ /dev/null @@ -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 diff --git a/fix_install_sh.sh b/fix_install_sh.sh deleted file mode 100755 index 0fa2310..0000000 --- a/fix_install_sh.sh +++ /dev/null @@ -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 "" diff --git a/fix_share_path.sh b/fix_share_path.sh deleted file mode 100644 index 113acbe..0000000 --- a/fix_share_path.sh +++ /dev/null @@ -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" diff --git a/一键部署命令.txt b/一键部署命令.txt deleted file mode 100644 index a98934b..0000000 --- a/一键部署命令.txt +++ /dev/null @@ -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 - - -═══════════════════════════════════════════════════════════════ - -祝您使用愉快! 🎉