|
|
3dbd545f6b
|
fix(install): 修复更新/修复模式自动补充TRUST_PROXY配置
- 在 update_patch_env 中添加 TRUST_PROXY 检查和自动补充
- 修复模式(repair_main)现在也会调用 update_patch_env
- 更新 .env.example 添加 TRUST_PROXY 配置说明
- 更新修复模式的提示信息
解决使用Nginx反向代理时HTTPS检测失败的问题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 20:13:37 +08:00 |
|
|
|
15ea15518c
|
fix(security): 修复信任代理和HTTPS检测的安全漏洞
## 问题修复
1. **trust proxy 配置安全加固**
- 默认改为 false(不信任任何代理)
- 支持多种安全配置:数字跳数、loopback、IP/CIDR段
- 当配置为 true 时输出安全警告
2. **HTTPS 检测基于可信代理链**
- 使用 req.secure 替代直接读取 x-forwarded-proto
- Express 会根据 trust proxy 配置判断是否采信代理头
- 防止客户端伪造协议头绕过 HTTPS 强制
3. **客户端 IP 获取安全加固**
- 使用 req.ip 替代直接读取 X-Forwarded-For
- Express 会根据 trust proxy 配置正确处理代理链
- 防止客户端伪造 IP 绕过限流
4. **健康检测增加安全警告**
- trust proxy = true 时标记为严重安全问题
- 提示管理员配置更安全的代理信任策略
5. **安装脚本优化**
- 默认配置 TRUST_PROXY=1(单层Nginx场景)
- 添加详细的配置说明和安全警告
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 19:42:25 +08:00 |
|
|
|
3e4aae60cb
|
🔒 修复命令注入漏洞并增强HTTPS配置
**安全修复:**
- 修复命令执行语法错误(wmic命令字符串拼接)
- 添加驱动器字母验证防止命令注入(仅允许A-Z)
- 修复命令执行参数构造错误
**功能增强:**
- 新增ENFORCE_HTTPS环境变量(强制HTTPS访问)
- 更新.env.example添加ENFORCE_HTTPS配置说明
- 更新install.sh支持自动配置ENFORCE_HTTPS
- 更新脚本自动为现有.env补充ENFORCE_HTTPS配置
这些改进消除了命令注入风险并提供了更灵活的HTTPS策略控制。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 01:17:32 +08:00 |
|
|
|
472b98153d
|
🔧 优化install.sh的Nginx处理逻辑
改进 restart_nginx_safe():
- systemctl 改用 reload 代替 restart,避免不必要的服务中断
- 优先使用 reload,如未运行才使用 start
- 添加端口占用检测提示
改进 ensure_nginx_installed():
- 不再强制自动安装 Nginx
- 改为友好提示:支持用户使用已有反向代理(如宝塔/1Panel等)
- 允许用户选择手动安装或跳过
增强宝塔面板支持:
- 修复模式支持读取宝塔 Nginx 配置路径
- 支持备份宝塔配置文件
- 清理宝塔配置备份文件
改进服务检测:
- Nginx 检测兼容多种运行方式(systemctl/进程/宝塔)
- 更准确的进程检测逻辑
这些优化使脚本更灵活,兼容更多部署场景,减少端口冲突问题。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 15:39:28 +08:00 |
|
|
|
61866761bb
|
✨ 增强install.sh对宝塔面板的支持
新增功能:
- 添加 ensure_nginx_installed() 函数,自动检测并安装 Nginx
- 在所有 Nginx 配置函数中调用确保 Nginx 已安装
- restart_nginx_safe() 新增宝塔面板路径支持(/www/server/nginx/sbin/nginx)
改进点:
- 优先尝试宝塔面板的 Nginx 路径
- 支持在更新/修复模式下自动安装缺失的 Nginx
- 根据不同包管理器自动选择安装方式(apt/yum/dnf/zypper)
- 增强错误提示和安装验证
兼容性:
- 完全兼容宝塔面板环境
- 兼容标准 Linux 系统环境
- 支持多种发行版的包管理器
这些改进使脚本能在更多环境下自动化部署,提升用户体验。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 15:09:48 +08:00 |
|
|
|
4cf77f00a0
|
🔧 改进install.sh的Nginx重启机制
新增功能:
- 添加 restart_nginx_safe() 函数,提供安全的Nginx重启/重载机制
- 支持多种重启方式的自动回退(systemctl → nginx -s reload → nginx直接启动)
- 添加配置测试验证(nginx -t)确保配置正确后再重启
- 改进进程检测,兼容无systemd环境
改进点:
- 替换所有直接的 systemctl restart/reload 为安全重启函数
- 增强错误处理和用户提示
- 提升脚本在不同系统环境下的兼容性
- 防止错误配置导致Nginx服务中断
这些改进使安装脚本更加健壮,减少部署失败的风险。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 14:46:22 +08:00 |
|
|
|
836c895e37
|
🔧 修复install.sh中的shell变量转义问题
- 修复3处Nginx配置中的Cookie变量转义($http_cookie → \$http_cookie)
- 移除多余的文档文件(交接文档、更新说明)
- 清理文件末尾空行
这个修复确保install.sh脚本能正确生成Nginx配置,而不会将$http_cookie误解释为shell变量。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 09:52:31 +08:00 |
|
|
|
225c3a5ded
|
🔧 更新install.sh - 添加Nginx Cookie传递配置
## 修改说明
install.sh生成的Nginx配置中缺少Cookie传递设置,
导致验证码session无法正常工作。
## 修改内容
### install.sh
在3处 `location /api` 配置中添加Cookie传递:
```nginx
# Cookie传递配置(验证码session需要)
proxy_set_header Cookie $http_cookie;
proxy_pass_header Set-Cookie;
```
修改位置:
- 行2383: HTTP配置(configure_nginx_http_first)
- 行2665: HTTPS配置(configure_nginx_final)
- 行2802: 虚拟主机配置
### 新增文件
1. **fix_install_sh.sh**
- 自动化修改脚本
- 备份原文件后自动添加Cookie配置
- 可重复运行(检测已修改则跳过)
2. **INSTALL_SH_UPDATE.md**
- 详细的修改说明文档
- 手动修改方法
- 验证和应用指南
## 使用方法
### 新部署
直接运行修改后的install.sh即可
### 自动修改
```bash
./fix_install_sh.sh
```
### 已部署服务
需要手动更新Nginx配置:
```bash
vim /etc/nginx/conf.d/玩玩云.conf
# 在 location /api 块中添加Cookie配置
nginx -t
nginx -s reload
```
## 配套修复
此修改配合以下提交才能完整工作:
- 后端session配置 (7ce9d95)
- 前端axios配置 (83773ef)
- nginx/nginx.conf (5f3fd38)
- install.sh (本提交)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-21 16:54:26 +00:00 |
|
|
|
e026c13fd3
|
🔒 修复CORS严重安全漏洞 & 增强Nginx安全配置
## 关键修复
### 1. 修复backend/server.js的CORS漏洞 ⚠️ CRITICAL
**问题**: 原代码 `if (!origin || allowedOrigins.includes(origin))`
会允许所有没有Origin头的请求通过,导致恶意请求绕过CORS保护
**修复**: 严格白名单模式
```javascript
// 只允许白名单中的域名
if (origin && allowedOrigins.includes(origin)) {
callback(null, true);
} else {
// 拒绝所有其他请求
callback(new Error('CORS策略不允许来自该来源的访问'));
}
```
**影响**:
- ✅ 阻止所有恶意域名的跨域访问
- ✅ 保护JWT token不被窃取
- ✅ 从63.6%预计提升到90%+安全评分
### 2. 增强install.sh中的Nginx安全配置
在所有三个nginx配置函数中添加了完整的安全规则:
- `configure_nginx_http_first()` - 初始HTTP配置
- `configure_nginx_http()` - 纯HTTP模式
- `configure_nginx_https()` - HTTPS模式
**新增安全配置**:
```nginx
# 安全响应头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # HTTPS专用
# 隐藏Nginx版本
server_tokens off;
# 禁止访问隐藏文件 (.git, .env等)
location ~ /\. {
deny all;
return 404;
}
# 禁止访问敏感文件
location ~ \.(env|git|config|key|pem|crt|sql|bak|backup|old|log)$ {
deny all;
return 404;
}
```
**防护效果**:
- ✅ 阻止访问 /.env, /.git/config
- ✅ 阻止访问备份文件 .bak, .sql
- ✅ 防止点击劫持、XSS、MIME嗅探攻击
- ✅ 强制HTTPS(HTTPS环境下)
- ✅ 隐藏服务器信息
## 部署方法
在服务器上执行:
```bash
cd /var/www/wanwanyun
git pull origin master
bash install.sh --repair # 重新生成Nginx配置
# 或者手动
pm2 restart wanwanyun-backend
nginx -t && systemctl reload nginx
```
然后运行安全测试验证:
```bash
node security-test.js
```
预期改进:
- CORS测试: 只有cs.workyai.cn被允许 ✅
- 敏感文件: 全部返回404 ✅
- 安全响应头: 全部检测到 ✅
- 安全评分: 63.6% → 90%+ 🎯
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-18 16:58:19 +08:00 |
|
|
|
ada9afa396
|
🛡️ 添加更新时的安全配置自动检查和修复
解决了使用install.sh更新时,旧的不安全CORS配置仍然保留的问题。
## 新增功能
### 自动安全配置检查
更新时会自动检查 backend/.env 中的安全配置:
1. **CORS配置检查**
- 检测 ALLOWED_ORIGINS=* (不安全)
- 自动从Nginx配置读取域名
- 自动检测HTTP/HTTPS协议
- 提示用户确认并自动修复
2. **环境变量检查**
- 检查NODE_ENV是否设置为production
- 给出安全建议
### 工作流程
当执行 `bash install.sh --update` 时:
```bash
检查安全配置...
⚠️ 检测到不安全的CORS配置: ALLOWED_ORIGINS=*
这是一个严重的安全风险!攻击者可以从任何域名访问你的API。
检测到域名: cs.workyai.cn
建议将CORS设置为: https://cs.workyai.cn
是否自动修复CORS配置?[y/n]:
```
### 修复机制
- ✅ 自动备份原配置到 .env.backup.YYYYMMDD_HHMMSS
- ✅ 智能检测HTTP/HTTPS
- ✅ 从Nginx配置读取域名
- ✅ 用户确认后自动修改
- ✅ 如果无法自动修复,给出手动修复指引
### 兼容性
- ✅ 不影响安全的现有配置
- ✅ 只修复明确不安全的配置(ALLOWED_ORIGINS=*)
- ✅ 提供备份,可随时回滚
## 使用方法
```bash
# 更新项目(会自动检查安全配置)
bash install.sh --update
# 或者使用交互式菜单
bash install.sh
# 选择 [2] 更新/升级
```
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-18 16:37:39 +08:00 |
|
WanWanYun
|
a9b269af12
|
fix: 修复更新时无法选择是否保留上传工具的问题
问题描述:
- 显示了选择菜单,但read命令直接跳过
- 无法输入选择,直接使用默认值1
- 用户想选择2也无法输入
原因分析:
- update流程中标准输入可能被重定向或被其他命令消耗
- read命令从stdin读取时可能读到空输入
- 导致直接使用默认值
解决方案:
使用 `< /dev/tty` 强制从终端读取:
```bash
read -p "▶ 请选择 [1/2, 默认:1]: " KEEP_UPLOAD_TOOL < /dev/tty
```
工作原理:
- /dev/tty: 当前终端设备
- < /dev/tty: 强制从终端读取输入
- 即使stdin被重定向,仍能从终端获取用户输入
测试建议:
运行 bash install.sh update 时:
1. 显示选择菜单
2. 等待用户输入
3. 输入1: 保留工具
4. 输入2: 重新下载
5. 直接回车: 使用默认值1
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-16 00:21:22 +08:00 |
|
WanWanYun
|
2e0376e7e5
|
fix: 修复更新脚本选择"不保留上传工具"无法触发重新下载的问题
问题描述:
- 更新时选择"2) 删除并重新下载"
- 但实际上只是删除并复制了新的upload-tool目录
- 没有触发后续的build_upload_tool()重新下载
- 导致用户无法获取最新的上传工具
原因分析:
- else分支(选择2)只做了 rm + cp 操作
- 复制的新目录中没有dist/玩玩云上传工具.exe
- 但后续检查逻辑看的是文件是否存在和大小
- 如果目录结构存在,即使文件不存在也不会重新下载
修复方案:
在else分支最后添加:
```bash
# 删除dist目录以触发后续重新下载
rm -rf "${PROJECT_DIR}/upload-tool/dist"
```
修复后逻辑:
1. 选择"1"保留:
- 备份dist目录
- 更新upload-tool脚本文件
- 恢复dist目录
- 跳过后续下载
2. 选择"2"重新下载:
- 删除整个upload-tool
- 复制新的upload-tool
- **删除dist目录** ✅ NEW
- 触发后续build_upload_tool()重新下载
验证:
后续update_install_dependencies后面的检查:
```bash
if [[ ! -f "${PROJECT_DIR}/upload-tool/dist/玩玩云上传工具.exe" ]]; then
build_upload_tool # ✅ 会被触发
fi
```
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-16 00:19:13 +08:00 |
|
WanWanYun
|
e10ff04166
|
feat: 优化更新流程 - 添加保留上传工具选项
问题背景:
- 之前每次更新都会删除并重新下载上传工具(43MB)
- 重新下载耗时长(1-2分钟),且可能因网络问题失败
- 但如果不删除,万一上传工具有更新也无法获取
优化方案:
在更新流程中添加用户选择:
更新上传工具逻辑:
1. 检测是否已存在上传工具可执行文件
2. 验证文件大小(>30MB为有效)
3. 如果存在有效工具,显示选择菜单:
╔════════════════════════════════════════════════════════════╗
║ 上传工具更新选项 ║
╠════════════════════════════════════════════════════════════╣
║ 1) 保留现有上传工具(推荐,节省下载时间) ║
║ 2) 删除并重新下载(如果工具有更新) ║
╚════════════════════════════════════════════════════════════╝
选项1 - 保留现有工具:
- 创建临时目录备份dist/玩玩云上传工具.exe
- 更新upload-tool目录的脚本文件
- 恢复备份的可执行文件
- 优点: 节省1-2分钟下载时间,避免网络问题
选项2 - 重新下载:
- 删除整个upload-tool目录
- 在后续步骤重新下载最新工具
- 适用: 官方发布了新版本上传工具
默认行为:
- 默认选项1(保留),直接回车即可
- 如果现有文件大小异常(<30MB),自动重新下载
- 如果不存在上传工具,直接复制新目录
技术改动:
- install.sh update_pull_latest_code() 函数
- 添加用户交互选择逻辑
- 添加文件大小验证
- 添加备份和恢复逻辑
使用建议:
- 日常更新: 选择"1"保留,节省时间
- 重大版本更新: 选择"2"重新下载,确保最新
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-16 00:11:17 +08:00 |
|
WanWanYun
|
eed2533f29
|
fix: 修复宝塔面板环境下install.sh安装脚本Nginx重载失败导致脚本闪退的问题
问题描述:
- 在宝塔面板环境下运行install.sh时,Nginx重载步骤会因为命令失败导致整个脚本闪退
- 由于脚本使用了 set -e,任何命令返回非0退出码都会导致脚本终止
修复内容:
1. configure_nginx_http_first 函数 (2408-2446行):
- 移除可能失败的 /etc/init.d/bt restart 命令
- 在所有Nginx命令前添加配置测试
- 使用 || true 防止命令失败导致脚本退出
- 优化错误提示,失败时不退出脚本
2. configure_nginx_final 函数 (2504-2538行):
- 同样的修复逻辑应用到Nginx重载环节
- 确保即使Nginx操作失败,脚本也能继续执行后续步骤
技术改进:
- 先测试Nginx配置再reload,避免配置错误导致服务中断
- reload失败时自动尝试重启Nginx
- 所有可能失败的命令都添加了错误处理
- 保留systemctl作为备用方案
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-15 19:31:52 +08:00 |
|
|
|
72063c56eb
|
fix: 修复更新脚本导致上传工具丢失的问题
- 在更新流程中添加上传工具完整性检查
- 如果上传工具丢失或文件大小异常,自动重新下载
- 使用已有的build_upload_tool函数从直链下载
- 验证文件大小确保下载完整(>30MB)
|
2025-11-13 22:49:49 +08:00 |
|
|
|
c8f3ab5881
|
feat: 修复CORS安全漏洞 + 升级主页设计
🔒 安全修复:
- 修复分享链接HTTP/HTTPS协议识别问题
- 自动配置CORS安全策略(根据部署模式)
- 自动配置Cookie安全设置(HTTPS环境)
- 移除不安全的默认CORS配置
✨ 功能改进:
- install.sh: 升级create_env_file()函数,智能配置CORS
* 域名+HTTPS模式: ALLOWED_ORIGINS=https://domain
* 域名+HTTP模式: ALLOWED_ORIGINS=http://domain
* IP模式: 留空并显示安全警告
- backend/server.js: 添加getProtocol()函数,正确识别HTTPS
- backend/.env.example: 完全重写,添加详细的CORS配置说明
🎨 主页升级:
- frontend/index.html: 全新现代化设计
* 渐变背景+动画效果
* 9大功能特性展示
* 8项技术栈展示
* 完美响应式支持
📝 修改文件:
- backend/server.js (第63-83行, 1255行, 1282行)
- install.sh (第2108-2195行)
- backend/.env.example (完全重写)
- frontend/index.html (完全重写)
🔗 相关问题:
- 修复CORS允许任意域名访问的安全漏洞
- 修复分享链接使用HTTP的问题
- 解决Cookie在HTTP环境下的安全隐患
💡 向后兼容:
- 已部署项目可选择性升级
- 手动添加ALLOWED_ORIGINS配置即可生效
🎉 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-13 21:36:49 +08:00 |
|
WanWanYun
|
d5fada3a26
|
feat: 移除Certbot方案,统一使用acme.sh + 添加自动续期配置
核心改进:
1. 移除Certbot (方案1)
- 原因:Python依赖冲突(urllib3)难以解决
- 用户已用acme.sh成功申请证书
- acme.sh更轻量、更可靠
2. 优化SSL方案选择菜单
- 新方案1:acme.sh + Let's Encrypt (推荐)
- 新方案2:acme.sh + ZeroSSL
- 新方案3:acme.sh + Buypass
- 新方案4-5:阿里云/腾讯云
- 新方案6-7:手动上传/暂不配置
3. 添加自动续期配置功能
- 新增setup_acme_auto_renew()函数
- 自动检查并启动cron服务
- 验证acme.sh自动续期任务
- 显示续期时间和配置信息
- 提供续期检查命令
4. 自动续期特性:
- ✅ 每天自动检查证书
- ✅ 证书到期前30天自动续期
- ✅ 续期后自动重载Nginx
- ✅ 无需手动干预
5. 用户体验改进:
- 显示详细的续期配置信息
- 提供手动续期命令
- 统一的续期管理方式
- 完成提示中显示续期检查命令
技术细节:
- acme.sh安装时自动创建cron任务
- 兼容cron/crond两种服务名
- 支持systemctl和传统service管理
- 显示预计续期时间(从证书配置文件读取)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-13 15:24:08 +08:00 |
|
WanWanYun
|
691d4ad075
|
fix: 处理SSL证书已存在的情况,避免重复申请失败
核心问题:
- 当证书已存在时,acme.sh会报错"Domains not changed"并拒绝申请
- Certbot同样会拒绝重复申请已有的证书
- 导致用户重新运行脚本时SSL部署总是失败
解决方案:
1. acme.sh方案:
- 申请失败后检查证书是否已在证书列表中
- 如果已存在,直接使用现有证书进行安装
- 避免不必要的重复申请
2. Certbot方案:
- 申请失败后检查 /etc/letsencrypt/live/${DOMAIN} 目录
- 如果证书文件存在,直接创建软链接到nginx目录
- 保证证书可以正常使用
3. 应用范围:
- deploy_certbot() - Certbot方案
- deploy_acme_letsencrypt() - acme.sh + Let's Encrypt
- deploy_acme_zerossl() - acme.sh + ZeroSSL
- deploy_acme_buypass() - acme.sh + Buypass
优点:
- ✅ 支持重复运行脚本而不报错
- ✅ 充分利用已有的有效证书
- ✅ 减少对CA服务器的请求压力
- ✅ 避免触发速率限制
用户体验改进:
- 显示友好的"检测到证书已存在"提示
- 自动继续安装流程,无需用户干预
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-13 15:16:22 +08:00 |
|
WanWanYun
|
8b9af536c7
|
fix: 修复SSL证书部署的两个关键问题
问题1:acme.sh证书安装时nginx reload失败
- 错误:nginx.service is not active, cannot reload
- 原因:证书安装时nginx服务未运行
- 解决:
1. 在安装证书前检查并启动nginx服务
2. 移除--reloadcmd参数,改为手动reload
3. 兼容systemctl和直接nginx命令两种方式
4. 兼容宝塔面板的nginx路径
问题2:Certbot安装/运行时urllib3依赖冲突
- 错误:ImportError: cannot import name 'appengine' from 'urllib3.contrib'
- 原因:系统的python3-urllib3版本与certbot不兼容
- 解决:
1. 安装certbot前移除冲突的python3-urllib3包
2. 添加已安装certbot的依赖修复逻辑
3. 应用到apt/yum/dnf等所有包管理器
4. 提供详细的错误提示和修复建议
技术改进:
- acme.sh安装证书更可靠(分离安装和reload步骤)
- Certbot依赖检测更完善(检测并修复依赖冲突)
- 错误处理更友好(提示用户尝试其他方案)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-13 15:09:25 +08:00 |
|
WanWanYun
|
ab577931c3
|
fix: 修改acme.sh证书申请方式为webroot模式
问题:
- 使用--nginx参数时,acme.sh报错"Cannot find config file for domain"
- nginx模式需要acme.sh能够识别nginx配置文件格式
解决方案:
- 改用--webroot模式,直接使用前端目录作为验证根目录
- webroot模式更可靠,不依赖nginx配置文件解析
- 应用到所有acme.sh方案:Let's Encrypt、ZeroSSL、Buypass
参数变化:
- 旧:--nginx
- 新:--webroot "${PROJECT_DIR}/frontend"
优点:
1. 不需要解析nginx配置文件
2. 直接利用已经配置好的HTTP服务器
3. 兼容性更好,成功率更高
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-13 15:00:04 +08:00 |
|
WanWanYun
|
410b85f9e1
|
fix: 彻底修复acme.sh安装失败问题
问题描述:
- acme.sh安装后,~/.acme.sh目录被创建但主脚本文件不存在
- 导致后续证书申请和安装失败,提示"主脚本文件不存在"
修复内容:
1. 改用官方推荐的curl管道安装方式(curl https://get.acme.sh | sh)
2. 增加不完整安装的检测和清理逻辑
3. 检查条件从仅检查目录改为同时检查目录和文件
4. 增强错误诊断信息,显示目录内容帮助排查
5. 应用到所有acme.sh方案:Let's Encrypt、ZeroSSL、Buypass
技术改进:
- 从下载到临时文件改为直接curl管道执行(更可靠)
- 添加email参数避免交互式输入
- 完善失败提示,引导用户选择其他方案
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-13 14:45:14 +08:00 |
|
WanWanYun
|
4bf0cd4edf
|
fix: 修复SSL证书部署时的文件检查问题
修复内容:
1. 修复HTTPS重定向配置 - 根据端口生成正确的重定向URL
2. 增强acme.sh文件存在性检查 - 在申请和安装证书前都检查文件
3. 应用到所有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:36:57 +08:00 |
|
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 |
|