Commit Graph

55 Commits

Author SHA1 Message Date
WanWanYun
06056563b2 修复: 选项顺序调整 + acme.sh切换到GitHub官方源
问题:
1. 主界面菜单顺序:用户反馈[5]在[4]上面,需要对调
2. SSL选项顺序:阿里云和Buypass编号需要对调
3. acme.sh安装:Gitee镜像不稳定,导致安装失败

修复:
1. 主界面菜单
   - [4] SSL证书管理 (原[5])
   - [5] 卸载玩玩云 (原[4])

2. SSL证书选项(两处:choose_ssl_method + ssl_choose_method)
   - [4] 阿里云免费证书 (原[5])
   - [5] acme.sh + Buypass (原[4])

3. deploy_ssl() 函数
   - case 4: deploy_aliyun_ssl
   - case 5: deploy_acme_buypass

4. ssl_fallback() 函数
   - 备选方案显示和case分支对应调整

5. acme.sh安装源切换
   - deploy_acme_letsencrypt: 移除Gitee镜像检测,统一使用GitHub
   - deploy_acme_zerossl: 移除Gitee镜像检测,统一使用GitHub
   - deploy_acme_buypass: 移除Gitee镜像检测,统一使用GitHub
   - 提示:国内用户会较慢,但更稳定可靠

影响:
- 菜单顺序更合理(危险操作放最后)
- SSL选项分类更清晰
- acme.sh安装成功率大幅提升(GitHub官方源稳定性更好)

注意:
- 其他依赖(npm、系统包)仍使用阿里云镜像加速
- 仅acme.sh使用GitHub官方源

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 14:09:29 +08:00
WanWanYun
41f823db54 修复: 真正移除acme.sh安装脚本的--install参数
问题:
- v4.0.11修复了安装脚本URL,但忘记移除--install参数
- 官方安装脚本https://get.acme.sh应该不带参数直接运行
- --install是给安装后的acme.sh主程序用的,不是给安装脚本用的
- 导致安装脚本执行后,目录创建但文件未正确安装

修复:
- deploy_acme_letsencrypt: 移除 --install 参数
- deploy_acme_zerossl: 移除 --install 参数
- deploy_acme_buypass: 移除 --install 参数
- 统一使用: bash "$TEMP_INSTALL_SCRIPT" (不带参数)

影响:
- 修复acme.sh安装后目录为空的根本问题
- 确保所有acme.sh方案(Let's Encrypt/ZeroSSL/Buypass)正常工作

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 14:02:10 +08:00
WanWanYun
503a760b17 feat: 添加独立的SSL证书管理模式
新增功能:
- 新增 --ssl/--cert/ssl 命令行参数
- 交互式菜单添加 [5] SSL证书管理 选项
- 可单独配置/更换/续签SSL证书,无需重新部署整个项目

使用场景:
1. 初次部署时选择了"暂不配置HTTPS",现在想添加证书
2. 现有证书即将过期,需要续签(虽然有自动续期,但也可手动)
3. 想更换SSL方案(例如从Certbot换到acme.sh)
4. 想更换域名的SSL证书
5. 想移除HTTPS配置,改回HTTP模式

核心功能:
- ssl_main() - SSL证书管理主流程
- ssl_check_project() - 检查项目是否已安装
- ssl_load_existing_config() - 读取现有配置(域名、端口等)
- ssl_configure_domain() - 配置或更改域名
- ssl_choose_method() - 选择SSL方案(1-8,含移除HTTPS)
- ssl_deploy_certificate() - 部署证书
- ssl_update_nginx_config() - 更新Nginx配置
- ssl_reload_services() - 重载Nginx和后端服务
- ssl_verify_deployment() - 验证部署结果
- print_ssl_completion() - 显示完成信息和使用提示

使用方法:
# 方法1: 命令行参数
bash install.sh --ssl

# 方法2: 交互式菜单
bash install.sh
> 选择 [5] SSL证书管理

# 方法3: 别名
bash install.sh --cert

工作流程:
1. 检查项目是否已安装
2. 读取现有Nginx配置(HTTP/HTTPS端口、域名)
3. 确认或修改域名配置
4. 选择SSL证书方案(支持所有8种方案)
5. 先配置HTTP模式(Let's Encrypt验证需要)
6. 申请/部署SSL证书
7. 更新Nginx为HTTPS配置(或保持HTTP,如果选择8)
8. 重载Nginx和后端服务
9. 验证部署并显示证书信息

特殊选项:
- [8] 移除HTTPS配置 - 将HTTPS站点改回HTTP模式
- [0] 取消操作 - 不做任何修改

技术特点:
- 智能读取现有配置,自动填充域名和端口
- 支持宝塔面板和标准Nginx环境
- 兼容所有SSL方案(Certbot、acme.sh系列、手动证书)
- 自动处理证书路径和Nginx配置
- 显示证书有效期信息

影响范围:
- install.sh 新增 ~450 行代码
- 添加 9 个新函数
- 更新交互式菜单和命令行帮助
2025-11-13 13:56:06 +08:00
WanWanYun
30de3327e8 fix: 修复acme.sh安装失败 - 使用正确的安装脚本URL
问题描述:
- acme.sh安装后目录存在但为空(无acme.sh主脚本文件)
- 用户截图显示:~/.acme.sh目录创建但文件未复制
- 导致所有acme.sh方案(Let's Encrypt/ZeroSSL/Buypass)全部失败

根本原因:
- 错误的Gitee镜像URL:
   https://gitee.com/neilpang/acme.sh/raw/master/acme.sh (主程序文件)
   https://get.acme.sh (官方安装脚本)

- 直接下载主程序文件acme.sh,然后执行 bash acme.sh --install
- 但acme.sh主程序不是安装器,无法自行安装

正确安装流程:
- 官方安装脚本 https://get.acme.sh 会自动:
  1. 创建 ~/.acme.sh 目录
  2. 下载所有必需文件(acme.sh + 依赖)
  3. 设置权限和环境变量

修复方案:
- 统一使用官方安装脚本URL: https://get.acme.sh
- 通过环境变量 ACME_USE_GITEE=1 控制国内镜像加速
- 官方安装脚本会根据此环境变量自动选择Gitee镜像

修复内容:
1. deploy_acme_letsencrypt() - 修复Let's Encrypt方案
2. deploy_acme_zerossl() - 修复ZeroSSL方案
3. deploy_acme_buypass() - 修复Buypass方案

技术细节:
- 国内网络:export ACME_USE_GITEE=1 + curl https://get.acme.sh
- 海外网络:直接 curl https://get.acme.sh
- 安装脚本自动识别环境变量并选择最快镜像

影响范围:
- install.sh:1344-1428 (Let's Encrypt)
- install.sh:1508-1574 (ZeroSSL)
- install.sh:1648-1713 (Buypass)

预期效果:
-  acme.sh成功安装并包含所有必需文件
-  国内网络自动使用Gitee镜像加速
-  证书申请流程顺利进行
2025-11-13 12:58:03 +08:00
WanWanYun
ff8ba91b8d fix: 修复后端端口更换时脚本异常退出的问题
问题描述:
- 部署时后端端口被占用,用户更换其他端口后脚本异常退出
- 根因: health_check()函数中netstat命令失败时触发set -e导致脚本退出

修复内容:
1. 端口检查添加错误抑制 (2>/dev/null)
2. 添加ss命令作为netstat的fallback
3. Nginx状态检查直接通过目录检测BT Panel环境
4. 修复变量作用域问题 (IS_BT_PANEL仅在局部函数中定义)

技术细节:
- netstat -tunlp 2>/dev/null || ss -tunlp 2>/dev/null
- 使用 [[ -d /www/server/nginx ]] 直接检测宝塔面板
- 宝塔环境使用pgrep检查nginx进程
- 标准环境使用systemctl is-active检查

影响范围:
- health_check() 函数 (install.sh:2588-2612)
- 提升脚本在端口冲突场景下的健壮性
- 兼容宝塔面板和标准Nginx环境
2025-11-13 12:16:14 +08:00
WanWanYun
f7034adb9f fix: 修复Nginx配置,恢复index.html作为主页
- 将Nginx index指令从 app.html 改为 index.html
- 将try_files回退路径从 /app.html 改为 /index.html
- 恢复产品展示主页,而不是直接跳转到登录页
- 影响HTTP和HTTPS配置的所有3处location块
2025-11-13 10:08:12 +08:00
WanWanYun
58d2038ed3 fix: 全面改进SSL证书部署逻辑
**Certbot改进(方案1)**:
- Ubuntu/Debian优先使用snap安装(官方推荐)
- 避免Python依赖冲突(urllib3.contrib.appengine问题)
- snap失败自动降级到apt安装
- 添加安装验证逻辑

**acme.sh改进(方案2-4)**:
- 改用两步安装:先下载到临时文件,验证后执行
- 检查下载文件大小和内容完整性
- 验证脚本内容(检测acme.sh关键词)
- 增加等待时间:2秒→5秒
- 统一三个方案(Let's Encrypt/ZeroSSL/Buypass)

**诊断增强**:
- 添加安装位置查找功能
- 改进错误提示信息
- 提供更详细的排查步骤

**兼容性**:
- 支持Ubuntu/Debian (apt)
- 支持CentOS/RHEL (yum/dnf)
- 支持openSUSE (zypper)
- 兼容宝塔面板环境
2025-11-13 09:57:28 +08:00
WanWanYun
72ec10ef4e fix: configure_nginx_final()函数添加宝塔面板Nginx重载支持
- 修复选择"暂不配置HTTPS"时Nginx重载失败的问题
- 添加与configure_nginx_http_first()相同的三重保障机制
- 支持宝塔面板环境的nginx命令直接操作
2025-11-13 09:50:39 +08:00
WanWanYun
c1b8e7b929 fix: 优化宝塔面板Nginx重载逻辑,添加多种重启方式
- 添加BT Panel专用的Nginx重载流程
- 尝试多种方法:BT CLI工具、直接nginx命令、systemctl备用
- 改用进程检查(pgrep)验证Nginx状态,不依赖systemctl
- 修复BT Panel环境下nginx启动失败的问题
2025-11-13 09:39:47 +08:00
WanWanYun
0f53d0638c fix: 添加宝塔面板(BT Panel)Nginx配置支持
问题:
- 用户使用宝塔面板,Nginx配置路径为 /www/server/nginx/
- 标准路径 /etc/nginx/ 不适用于宝塔
- systemctl restart nginx 导致宝塔Nginx启动失败

宝塔特征:
- 配置文件:/www/server/nginx/conf/nginx.conf
- 虚拟主机:/www/server/panel/vhost/nginx/*.conf
- 需要使用reload而不是restart

修复:
1. 添加宝塔面板检测逻辑(检查 /www/server/nginx 目录)
2. 使用宝塔专用配置目录:/www/server/panel/vhost/nginx/
3. 宝塔环境使用reload,避免影响其他站点
4. 配置文件优先级:
   - 宝塔面板 > Debian/Ubuntu > CentOS/RHEL
5. 所有三个Nginx配置函数都已更新

修复的函数:
- configure_nginx_http_first() - 检测宝塔并使用专用目录
- configure_nginx_http() - 同上
- configure_nginx_https() - 同上

预期效果:
- 宝塔用户:配置写入 /www/server/panel/vhost/nginx/wanwanyun.conf
- 宝塔用户:使用 systemctl reload nginx
- 标准Nginx:行为不变

相关错误:
Job for nginx.service failed because the control process exited with error code
2025-11-13 09:32:20 +08:00
WanWanYun
66f9a30c5c fix: 修复Nginx配置目录兼容性,确保sites-available目录存在
问题:
- Ubuntu 22.04系统在configure_nginx_http_first()时报错
- 错误:/etc/nginx/sites-available/wanwanyun.conf: No such file or directory
- 原因:部分Ubuntu/Debian系统Nginx安装后未自动创建sites-available目录

修复:
1. 在所有Nginx配置函数中添加目录检测和创建逻辑
2. 使用mkdir -p确保目录存在后再写入配置文件
3. 兼容两种Nginx配置结构:
   - Ubuntu/Debian: sites-available + sites-enabled (软链接)
   - CentOS/RHEL: conf.d (直接加载.conf文件)
4. 根据PKG_MANAGER变量判断系统类型(更可靠)

修复的函数:
- configure_nginx_http_first() - 两阶段部署的第一步
- configure_nginx_http() - HTTP模式配置
- configure_nginx_https() - HTTPS模式配置

预期效果:
- Ubuntu/Debian系统:自动创建sites-available和sites-enabled目录
- CentOS/RHEL系统:使用conf.d目录
- 不再因为目录不存在而部署失败

相关错误:
line 1964: /etc/nginx/sites-available/wanwanyun.conf: No such file or directory
2025-11-13 09:27:01 +08:00
WanWanYun
bb073232c4 fix: 增强acme.sh安装验证,立即检查目录是否创建
问题:
- 用户反馈方法2-4(acme.sh系列)显示"安装目录不存在"
- 安装命令返回成功(exit 0)但目录未创建
- 导致验证阶段报错但无法诊断原因

原因分析:
- 安装命令可能显示帮助文本而非真正安装
- 仅依赖exit code无法判断是否真正安装成功
- 缺少安装后的立即验证

改进:
1. 捕获安装命令的退出码(不再使用if判断)
2. 安装后立即检查目录和文件是否创建
3. 验证条件:exit code = 0 AND 目录存在 AND 文件存在
4. 失败时显示详细诊断信息:
   - 安装命令退出码
   - 目录是否存在
   - 文件是否存在
   - HOME环境变量
   - 当前用户
5. 统一三个acme.sh函数的验证逻辑

预期效果:
- 如果安装真的失败,会显示详细诊断信息
- 用户和开发者可以根据诊断信息判断具体问题
- 不再有"显示成功但实际失败"的情况

影响函数:
- deploy_acme_letsencrypt()
- deploy_acme_zerossl()
- deploy_acme_buypass()

相关提交:
- 18512d9 (增强acme.sh验证逻辑)
- 4a73a8c (Gitee镜像加速)
2025-11-13 08:53:17 +08:00
WanWanYun
565bf7dffc fix: 修改Certbot为webroot模式,配合两阶段Nginx部署
问题:
- Certbot使用--nginx插件时需要已存在的server block
- 原执行顺序在Nginx配置前就部署SSL,导致找不到server block

改进:
1. 改用certonly --webroot模式(不自动修改Nginx配置)
2. 使用项目frontend目录作为webroot进行域名验证
3. 手动创建证书软链接到/etc/nginx/ssl/(与其他方法统一)
4. 配合新的两阶段Nginx部署流程:
   - 阶段1: configure_nginx_http_first() 先创建HTTP server block
   - 阶段2: deploy_ssl() 可以通过HTTP验证域名
   - 阶段3: configure_nginx_final() 根据SSL结果配置HTTPS

修复错误:
"Could not automatically find a matching server block for [domain]"

相关提交:
- 7c4e1ed (重构Nginx配置为两阶段部署)
- 18512d9 (增强acme.sh验证)
- 4a73a8c (Gitee镜像加速)
2025-11-13 08:51:13 +08:00
WanWanYun
18512d92ed fix: 增强acme.sh安装验证逻辑,添加详细诊断信息
问题:
- acme.sh安装显示成功,但文件验证立即失败
- 无法判断具体原因(路径/权限/时序问题)

改进:
1. 添加2秒等待,确保文件系统同步
2. 分步骤验证:目录 → 文件 → 权限 → 运行
3. 失败时显示目录内容,方便诊断
4. 自动修复权限问题(chmod +x)
5. 测试脚本实际可运行性(--version)

影响范围:
- deploy_acme_letsencrypt()
- deploy_acme_zerossl()
- deploy_acme_buypass()

相关提交:
- e915d5e (添加基础错误检查)
- 4a73a8c (Gitee镜像加速)
- a7aca93 (智能SSL fallback)
2025-11-13 01:51:22 +08:00
WanWanYun
a7aca93355 feat: ssl_fallback智能排除已失败的方案
问题描述:
- 用户选择方案2失败后,fallback还推荐方案2
- 用户再次选择方案2,还是会失败
- 浪费时间,用户体验差

修复方案:
- ssl_fallback函数接收失败的方案编号作为参数
- 动态生成可用选项,排除已失败的方案
- 显示提示:方案X已失败,已从列表中移除
- 如果备选方案再次失败,递归调用fallback并排除

改进内容:
1. ssl_fallback($failed_method) - 接收方案编号
2. 动态显示可用选项(排除失败方案)
3. 输入验证:只接受可用选项
4. 递归调用:如果备选方案也失败,继续排除

方案编号映射:
- 1: Certbot
- 2: acme.sh + Let's Encrypt
- 3: acme.sh + ZeroSSL
- 4: acme.sh + Buypass
- 5: 阿里云(未实现)
- 6: 腾讯云(未实现)
- 8: 不配置HTTPS

用户体验改进:
- 避免重复尝试失败的方案
- 清晰提示哪个方案已失败
- 自动缩小选择范围
- 节省用户时间

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 01:46:05 +08:00
WanWanYun
4a73a8c348 fix: 修复Gitee镜像加速仍从GitHub下载的问题
问题描述:
- 虽然显示"使用Gitee镜像加速"
- 但acme.sh安装脚本内部仍从GitHub下载tar.gz包
- 导致国内网络安装失败

根本原因:
- 使用了 --install-online 参数
- acme.sh脚本会在线下载master.tar.gz
- 默认还是从GitHub下载

修复方案:
- 使用acme.sh官方推荐的方法
- 设置环境变量 ACME_USE_GITEE=1
- 让acme.sh内部也使用Gitee源
- 移除 --install-online 参数

官方文档:
https://github.com/acmesh-official/acme.sh/wiki/Install-in-China

修复代码:
# 国内网络
export ACME_USE_GITEE=1
curl https://gitee.com/neilpang/acme.sh/raw/master/acme.sh | sh

修复函数:
- deploy_acme_letsencrypt
- deploy_acme_zerossl
- deploy_acme_buypass

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 01:41:14 +08:00
WanWanYun
e915d5e4db fix: 修复acme.sh系列SSL证书申请失败误报成功的问题
问题描述:
- acme.sh安装失败(GitHub连接超时)但显示"成功"
- 证书申请失败但显示"成功"
- 导致Nginx配置找不到证书文件而失败退出

修复内容:
1. 所有acme.sh函数添加返回码检查
2. 安装失败时正确返回失败状态
3. 证书申请失败时正确返回失败状态
4. 证书安装失败时正确返回失败状态

新增功能:
- 检测网络环境(海外/中国大陆)
- 国内网络自动使用Gitee镜像加速
- 详细的步骤提示(安装/申请/部署)
- 失败时显示常见原因

修复函数:
- deploy_acme_letsencrypt: 完整重写,添加所有检查
- deploy_acme_zerossl: 添加返回码检查和镜像支持
- deploy_acme_buypass: 添加返回码检查和镜像支持

网络优化:
- 海外: 使用官方源 https://get.acme.sh
- 国内: 使用Gitee镜像 https://gitee.com/neilpang/acme.sh

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 01:36:59 +08:00
WanWanYun
417464c639 fix: 修复SSL证书申请失败后仍显示成功的问题
问题描述:
- Certbot申请证书失败后,脚本误报为成功
- 导致后续Nginx配置时找不到证书文件而失败退出

修复内容:
- 检查certbot命令的返回码,正确判断成败
- 失败时显示常见失败原因
- 通过ssl_fallback函数提供备选方案
- 用户可选择其他SSL方案或暂不配置HTTPS

改进逻辑:
1. certbot执行成功 → 配置HTTPS
2. certbot执行失败 → 调用ssl_fallback
3. ssl_fallback提供选项:
   - 尝试其他SSL方案(acme.sh等)
   - 暂不配置HTTPS(使用HTTP模式)
4. SSL_METHOD=8时正确使用HTTP配置

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 01:22:36 +08:00
WanWanYun
59a693ff15 fix: 修复智能端口检测在set -e模式下导致脚本退出的问题
问题描述:
- check_port_status函数返回非零值导致脚本在set -e模式下退出
- 使用grep -oP在某些Debian系统上不兼容

修复内容:
- 修改check_port_status始终返回0,避免触发set -e退出
- 将grep -oP替换为sed命令,提高兼容性
- 通过echo返回状态字符串而非返回码

测试场景:
- Debian 12系统验证通过
- 端口检测功能正常工作

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 01:12:13 +08:00
WanWanYun
20d23509e7 feat: 添加智能端口检测和Nginx虚拟主机支持 (v4.0)
新增功能:
- 智能识别占用端口的进程(Nginx/Apache/其他)
- 支持Nginx虚拟主机模式,多网站共用80/443端口
- 根据不同进程提供针对性解决方案
- 优化用户交互体验,提供清晰的选项说明

改进内容:
- 新增check_port_status()函数识别进程类型
- 改进configure_ports()函数支持虚拟主机选择
- 添加SHARE_NGINX标志跟踪部署模式
- 443端口智能继承80端口的选择

技术要点:
- Nginx占用端口时提供共用选项(推荐)
- Apache占用时提示冲突并给出解决方案
- 其他进程占用时引导用户更换端口
- 完整保留v3.0的CORS双重来源支持

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 01:07:22 +08:00
0fc378576f 改进: 增强上传工具下载的可靠性和错误提示
问题背景:
- 用户反馈SFTP模式下载上传工具失败,浏览器无反应
- 服务器日志显示: [上传工具] exe文件不存在
- 安装脚本显示"安装成功",但exe实际下载失败
- 原因:下载失败但脚本继续执行(return 0),用户未注意到警告

改进内容:
1. 添加重试机制
   - 最多重试3次
   - 每次失败后等待5秒
   - 显示当前尝试次数

2. 增加超时时间
   - wget: --timeout=300 (5分钟)
   - curl: --max-time 300 (5分钟)
   - 避免下载43MB文件时超时

3. 文件大小验证
   - 下载前:检查现有文件大小,异常则重新下载
   - 下载后:验证文件至少30MB(正常42MB)
   - 文件过小则删除并提示错误

4. 改进错误提示
   - 下载中:显示文件大小和预计时间
   - 失败时:列出可能的原因
   - 提供手动下载链接和路径

5. 进度显示优化
   - 显示当前尝试次数
   - 显示文件大小(MB)
   - wget添加 --no-check-certificate 避免证书问题

测试场景:
 正常下载(文件不存在)
 跳过下载(文件已存在且大小正常)
 重新下载(文件存在但大小异常)
 网络失败重试(最多3次)
 下载超时处理(5分钟超时)

用户体验:
- 明确知道下载进度
- 失败时有详细的错误信息和解决方案
- 不会误以为安装成功但功能不可用

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 20:06:30 +08:00
0dc2ac9188 功能: 自动检测并升级C++编译器版本
问题背景:
- better-sqlite3 v11+ 需要C++20标准支持
- C++20需要g++ 10或更高版本
- Ubuntu 20.04等老系统默认g++ 9.x,不支持C++20
- 导致WSL2用户编译失败: "unrecognized command line option '-std=c++20'"

实现内容:
1. 新增check_cpp_compiler()函数
   - 检测g++是否已安装
   - 获取当前g++版本号
   - 如果版本<10,自动升级

2. 支持多个Linux发行版:
   - Ubuntu/Debian: 添加toolchain PPA,安装g++-11
   - CentOS 7: 安装devtoolset-11
   - CentOS 8+: 安装gcc-toolset-11
   - OpenSUSE: 安装gcc11-c++

3. 自动设置为默认编译器:
   - 使用update-alternatives设置优先级
   - CentOS使用source启用gcc-toolset

4. 调用时机:
   - 安装模式:install_dependencies()末尾
   - 更新模式:update_install_dependencies()中

5. 错误处理:
   - 升级失败时给出明确提示
   - 不支持的系统给出手动升级建议

测试场景:
-  Ubuntu 20.04 (g++ 9.x → 11.x)
-  CentOS 7/8
-  已有g++ 10+的系统(跳过升级)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 15:18:01 +08:00
59721a3a93 修复: 更正Python配置方式,解决npm错误
问题:
- 使用了错误的命令: npm config set python python3
- npm报错: 'python' is not a valid npm option
- 导致脚本在安装依赖时直接退出

修复:
- 删除错误的 npm config set python python3 命令
- 改用环境变量方式: PYTHON=python3 npm install --production
- 这是node-gyp官方推荐的方式

测试:
- 环境变量会在npm install执行期间生效
- node-gyp会自动识别PYTHON环境变量
- 不会产生invalid option错误

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 12:13:53 +08:00
ee3c522a37 修复: 改进npm依赖安装,解决better-sqlite3编译失败问题
问题分析:
- better-sqlite3是native模块,需要node-gyp编译
- node-gyp需要Python环境
- 部分系统只有python3命令,没有python命令
- 导致编译失败: "python3" is not in PATH or produced an error

修复内容:
1. 在安装和更新依赖前自动创建python软链接(python -> python3)
2. 配置npm使用python3: npm config set python python3
3. 添加依赖安装进度提示(避免用户以为卡住)
4. 改进错误处理和提示信息
5. 安装失败时提供详细的解决方案和日志路径
6. 支持用户选择忽略错误继续安装

适用场景:
- Ubuntu/Debian: 使用ln -sf创建软链接
- CentOS/RHEL: 使用alternatives管理Python版本
- 其他系统: 回退到ln -sf

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 12:01:44 +08:00
644c468a67 功能: 在安装脚本主菜单添加退出选项
- 在操作模式选择菜单中添加 [0] 退出脚本 选项
- 修改输入提示从 [1-4] 改为 [0-4]
- 在case语句中添加选项0的处理逻辑
- 选择0时显示"正在退出脚本..."并正常退出

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 11:24:52 +08:00
229a381a63 优化: 简化上传工具下载提示信息
- 去掉操作系统检测提示
- 统一提示"正在下载上传工具..."
- 明确上传工具仅支持Windows平台
- 修复变量引用问题
2025-11-12 00:50:37 +08:00
f730fcfaff 配置: 更新上传工具下载地址
- 使用用户提供的CDN地址: http://a.haory.top/e/e82/
- Windows版本直接下载
- 部署时自动下载到upload-tool/dist目录
- 无需Python环境,无需手动打包
2025-11-12 00:46:38 +08:00
c76808f03b 优化: 改为从Release下载预编译上传工具
- 不再需要服务器Python环境
- 支持从Gitee Release直接下载exe
- 自动检测操作系统下载对应版本
- 支持wget和curl两种下载方式
- 下载失败时友好提示,不影响部署
2025-11-12 00:42:44 +08:00
160201b942 功能: 部署时自动打包上传工具
- 添加build_upload_tool()函数自动打包上传工具
- 检测已存在的可执行文件,避免重复打包
- 打包失败时给出友好提示,不影响部署流程
- 支持Windows exe和Linux可执行文件自动打包
2025-11-12 00:38:01 +08:00
340e328b76 修复: install.sh自动配置PUBLIC_PORT环境变量
- 部署时自动添加PUBLIC_PORT到.env文件
- 值为nginx监听的HTTP端口(HTTP_PORT变量)
- 解决非标准端口部署时分享链接缺少端口号的问题
- 标准端口(80/443)不会在分享链接中显示端口号
2025-11-11 23:42:43 +08:00
2390b6c91c 优化: 改进repair模式的服务验证逻辑
1. 在repair_verify_services中添加3秒延迟等待服务启动
2. 修正数据库文件路径检查(ftp-manager.db而非database.db)
3. 避免因服务启动延迟导致的误报警告
2025-11-11 18:07:57 +08:00
be363f36b3 修复: 修复repair模式中的nginx配置备份逻辑
问题:
- 备份文件保存在sites-enabled目录导致nginx测试失败
- nginx会读取该目录下所有文件包括旧的错误备份

解决方案:
- 将备份文件保存到/root/目录而不是sites-enabled
- 在生成新配置前先清理旧的.backup.*文件
- 使用2>/dev/null || true避免清理不存在文件时报错
2025-11-11 17:50:41 +08:00
81738943d5 修复: Nginx配置中/s/路径的proxy_set_header变量转义问题
- 在configure_nginx_http()和configure_nginx_https()中
- 将$host、$remote_addr等Nginx变量正确转义
- 修复'invalid number of arguments'错误
2025-11-11 17:42:18 +08:00
f2ceaf68bf 修复: 将repair_main函数移至主执行流程之前以避免'command not found'错误 2025-11-11 17:32:28 +08:00
6504026eb6 修复: 更正交互式菜单中卸载选项的编号从[3]到[4] 2025-11-11 17:05:51 +08:00
8755a50d80 功能: 添加修复模式到install.sh
修复模式功能说明:
- 重新加载和应用所有配置
- 保留数据库和用户数据
- 重新生成nginx配置
- 重启后端服务和nginx
- 适用于配置更新、修复nginx问题等场景

使用方法:
  bash install.sh --repair
  bash install.sh --fix
  bash install.sh repair

交互式菜单中添加第3个选项「修复/重新配置」

实现内容:
1. 模式检测: 支持 --repair, --fix, repair 参数
2. 交互式菜单: 添加修复选项到主菜单
3. 主执行流程: 添加repair模式路由到repair_main()
4. repair_main(): 主修复流程函数
   - confirm_repair(): 确认修复操作
   - repair_check_project(): 检查项目是否已安装
   - repair_load_existing_config(): 读取现有.env和nginx配置
   - repair_regenerate_nginx_config(): 重新生成nginx配置
   - repair_restart_services(): 重启PM2和nginx
   - repair_verify_services(): 验证服务状态
   - print_repair_completion(): 显示完成信息

修复: 修正了之前提交的语法错误
- 使用sed命令精确修改,避免破坏文件结构
- 通过bash -n语法检查确保无错误
- 保持代码缩进和格式一致性
2025-11-11 16:59:34 +08:00
91fa2d4fa4 功能: 添加修复模式到install.sh
修复模式功能说明:
- 重新加载和应用所有配置
- 保留数据库和用户数据
- 重新生成nginx配置
- 重启后端服务和nginx
- 适用于配置更新、修复nginx问题等场景

使用方法:
  bash install.sh --repair
  bash install.sh --fix
  bash install.sh repair

交互式菜单中添加第3个选项「修复/重新配置」

实现内容:
1. 模式检测: 支持 --repair, --fix, repair 参数
2. 交互式菜单: 添加修复选项到主菜单
3. 主执行流程: 添加repair模式路由到repair_main()
4. repair_main(): 主修复流程函数
   - confirm_repair(): 确认修复操作
   - repair_check_project(): 检查项目是否已安装
   - repair_load_existing_config(): 读取现有.env和nginx配置
   - repair_regenerate_nginx_config(): 重新生成nginx配置
   - repair_restart_services(): 重启PM2和nginx
   - repair_verify_services(): 验证服务状态
   - print_repair_completion(): 显示完成信息
2025-11-11 16:45:16 +08:00
0373e199a2 修复: 修复分享链接404错误 - install.sh中的nginx配置错误
## 问题
分享链接访问时报404错误,例如 /s/OjTHZiPg 无法访问

## 原因分析
install.sh中nginx配置有误:

问题:
1. location /s 会匹配 /s 和 /s/xxx
2. 访问 /s/OjTHZiPg 时,nginx会查找文件 frontend/OjTHZiPg/share.html
3. 实际应该代理到后端 /s/:code 路由,让后端重定向到 /share.html?code=xxx

## 修复内容
将 location /s 改为代理到后端:

修复范围:
- HTTP配置(第1196-1200行)
- HTTPS配置(第1269-1273行)

## 部署说明
已部署用户需要:
1. 拉取最新代码
2. 重新运行安装脚本,或手动更新nginx配置
3. 重载nginx: systemctl reload nginx

影响:分享功能将恢复正常
2025-11-11 16:31:42 +08:00
WanWanYun
d604d8bc78 功能: 更新脚本增加数据库迁移逻辑
- 新增 update_migrate_database() 函数
- 自动检测旧的100MB上传限制并升级到10GB
- 在更新流程中自动执行数据库迁移
- 确保使用更新脚本时数据库配置也会同步更新
- 修复v1.2.5更新后仍保留旧配置的问题

版本: v1.2.6
2025-11-11 02:09:58 +08:00
WanWanYun
27f130388a 🔥紧急修复: 更新脚本导致数据库丢失的严重Bug v1.2.3
问题描述:
- 更新时 cp -r 命令会覆盖整个 backend 目录
- 导致备份的 data、storage、.env 被新的空文件覆盖
- 用户数据、数据库、配置全部丢失

修复内容:
- 改为分别更新 frontend、upload-tool、backend
- 更新 backend 时逐个文件复制,排除 data/storage/.env/node_modules
- 添加数据完整性检测,自动从备份恢复丢失的文件
- 添加详细的恢复提示信息

安全增强:
- 不再使用 cp -r 整个目录覆盖
- 使用 for 循环逐个文件处理
- 每个重要文件都有检测和恢复机制

影响范围:
- install.sh: update_pull_latest_code() 函数

⚠️ 重要: 已使用旧版更新脚本的用户,数据可能丢失!

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 01:07:12 +08:00
WanWanYun
dae4ec9cc5 优化: 提升上传大小限制到10GB并延长超时时间 v1.2.2
修改内容:
- client_max_body_size: 500M → 10G
- proxy_read_timeout: 300s → 3600s (1小时)
- proxy_send_timeout: 300s → 3600s (1小时)
- proxy_connect_timeout: 75s → 300s (5分钟)

适用场景:
- 支持上传大型视频文件
- 支持上传ISO镜像等大文件
- 提供更长的上传时间窗口

影响范围:
- install.sh: configure_nginx_http() 函数
- install.sh: configure_nginx_https() 函数

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 01:02:40 +08:00
WanWanYun
70e0d4ef04 修复: Nginx上传大小限制导致413错误 v1.2.1
问题描述:
- 上传大于6MB的文件时出现413错误
- Nginx默认client_max_body_size为1MB

修复内容:
- 添加 client_max_body_size 500M(支持500MB文件上传)
- 添加上传超时设置(proxy_read_timeout 300s)
- 添加发送超时设置(proxy_send_timeout 300s)
- 添加连接超时设置(proxy_connect_timeout 75s)
- 同时修复HTTP和HTTPS配置

影响范围:
- install.sh: configure_nginx_http() 函数
- install.sh: configure_nginx_https() 函数

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 01:00:51 +08:00
WanWanYun
2f44b98a53 新功能: 一键更新功能 v1.2.0
新增功能:
- 添加一键更新命令(--update 参数)
- 交互式菜单新增「更新/升级」选项
- 支持三种更新方式(curl/wget/本地脚本)

更新流程:
- 智能备份数据库和用户文件到临时目录
- 停止服务并拉取最新代码
- 保留重要文件(data/storage/.env)
- 自动更新后端依赖(npm install)
- 重启服务并进行健康检查
- 显示更新后的版本信息

安全保障:
- 更新前需用户确认
- 自动备份所有用户数据
- 保留配置文件和Nginx配置
- 更新失败时提供清晰的错误提示

文档更新:
- 一键部署命令.txt: 添加更新命令和v1.2.0说明
- INSTALL_GUIDE.md: 详细的更新指南和注意事项

版本: v1.2.0

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 00:57:34 +08:00
WanWanYun
2213547e3d v1.1.5 修复: 支持管道执行时的模式选择
问题修复:
- 修复 curl | bash 执行时无法显示交互选择的问题
- 添加终端检测 (使用 -t 0 和 /dev/tty 检测)
- 管道执行时显示友好提示并自动进入安装模式
- 提示用户下载脚本后运行以使用交互选择

改进说明:
- 交互式终端: 显示选择界面 [1] 安装 [2] 卸载
- 管道执行: 显示提示信息并默认安装
- 提供卸载命令说明

技术细节:
- 使用 [[ -t 0 ]] 检测标准输入是否是终端
- 使用 [[ -c /dev/tty ]] 检测 /dev/tty 可用性
- 两个条件任一满足即可使用交互模式
2025-11-11 00:16:25 +08:00
WanWanYun
94cff001d8 v1.1.5: 添加交互式安装/卸载模式选择
主要更新:
- 在脚本启动时添加交互式选择界面
- 用户可以选择: [1] 安装/部署 或 [2] 卸载
- 保留原有命令行参数方式 (--uninstall)
- 改进用户体验,更直观易用

功能说明:
- 运行脚本后首先显示选择界面
- 选择安装模式 -> 继续安装流程
- 选择卸载模式 -> 直接跳转到卸载流程
- 通过命令行参数依然可以直接指定模式

使用方式:
1. 交互式: bash install.sh (显示选择菜单)
2. 命令行: bash install.sh --uninstall (直接卸载)
2025-11-11 00:05:19 +08:00
WanWanYun
84d2feffa2 更新版本号至 v1.1.4 2025-11-10 23:57:39 +08:00
WanWanYun
49e0f53cce v1.1.4: 添加智能端口检测和自定义配置
主要更新:
- 自动检测端口占用(80, 443, 40001)
- 支持自定义HTTP/HTTPS/后端端口
- 端口冲突时智能提示并允许自定义
- 所有配置(Nginx、.env)自动使用自定义端口
- 完成提示中显示实际使用的端口
- 健康检查使用动态端口验证

功能特性:
- HTTP端口(默认80,可自定义如8080)
- HTTPS端口(默认443,可自定义如8443)
- 后端端口(默认40001,可自定义如40002)
- 使用netstat/ss检测端口占用
- 端口范围验证(1024-65535)
- 避免与现有项目冲突

更新内容:
- 全局变量: HTTP_PORT, HTTPS_PORT, BACKEND_PORT
- 新增: check_port_available() 检测端口
- 新增: configure_ports() 配置端口
- 修改: configure_nginx_http() 使用自定义端口
- 修改: configure_nginx_https() 使用自定义端口
- 修改: create_env_file() PORT使用BACKEND_PORT
- 修改: health_check() 检查自定义后端端口
- 修改: print_completion() 显示端口信息
- 新增: 一键部署命令.txt 到仓库
2025-11-10 23:57:16 +08:00
WanWanYun
9966719afa v1.1.3: 集成卸载功能到主脚本
主要更新:
- 添加卸载模式: bash install.sh --uninstall
- 支持参数: --uninstall, -u, uninstall
- 双重确认机制防止误删
- 可选数据备份到 /root/wanwanyun-backup-*
- 完整清理: PM2进程、Nginx配置、SSL证书、项目目录
- 保留环境: Node.js、Nginx、PM2、编译工具
- 残留检查确保清理完整

使用方法:
- 安装: bash install.sh
- 卸载: bash install.sh --uninstall

功能特性:
- 智能备份询问
- 逐步状态显示
- 清理完成报告
- 环境保留列表
2025-11-10 23:48:32 +08:00
WanWanYun
8c7664a400 v1.1.2: 修复依赖安装问题
主要修复:
1. 降级 better-sqlite3: 12.4.1 → 11.8.1
   - 兼容 Node.js 18.x
   - 解决版本不匹配导致的安装失败

2. 添加编译工具依赖
   - APT: build-essential, python3
   - YUM/DNF: gcc-c++, make, python3
   - Zypper: gcc-c++, make, python3
   - 解决原生模块编译失败问题

问题分析:
- better-sqlite3@12+ 要求 Node.js 20+
- 编译原生模块需要 C++ 编译器和 Python
- 旧版本服务器可能缺少编译工具链

解决方案:
- 使用兼容 Node.js 18+ 的 better-sqlite3 版本
- 自动安装所有必需的编译工具
- 确保在所有支持的系统上都能正常编译
2025-11-10 23:35:33 +08:00
WanWanYun
1eb619a0b6 v1.1.1: 升级到 Node.js 20.x LTS
主要更新:
- 升级默认Node.js版本从18.x到20.x (LTS长期支持)
- 解决 NodeSource 弃用警告问题
- 更新所有Node.js版本检查逻辑使用变量而非硬编码
- 提高代码可维护性和未来兼容性

技术改进:
- NODE_VERSION: 18 → 20
- install_nodejs_apt/yum/dnf/zypper: 使用 $NODE_VERSION 变量检查
- 确保更长的官方支持周期(至2026年4月)

支持周期:
- Node.js 18.x: 支持到 2025-04-30
- Node.js 20.x: 支持到 2026-04-30 
2025-11-10 23:29:43 +08:00