Commit Graph

72 Commits

Author SHA1 Message Date
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
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