update-client.sh 是一个用于从版本服务器下载和更新 H5 应用的自动化脚本。它提供了以下功能:
✅ 安全认证 - 用户名密码验证,密码隐藏输入
✅ 版本管理 - 自动获取和选择可用版本
✅ 自动备份 - 更新前自动备份当前版本
✅ 完整性验证 - 支持 MD5/SHA256 校验
✅ 详细日志 - 记录完整操作日志
✅ 锁机制 - 防止重复执行
✅ 交互式和自动化模式 - 灵活适应不同场景
脚本依赖以下工具,请确保已安装:
bash - Bash shell 解释器curl - 用于 HTTP 请求wget - 用于文件下载tar - 文件归档工具(可选)推荐方式:Git Bash
其他方式:
# 确保脚本在项目根目录
ls -l update-client.sh
# 使用 bash 执行脚本
bash update-client.sh
请输入用户名 [默认: deploy]: deploy
请输入密码: ********
请输入下载目录 [默认: ./h5]:
可用版本列表(最新10个):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
0. latest (最新版本)
1. v1.1.5-20251129-143005
2. v1.1.5-20251129-120530
3. v1.1.4-20251128-163015
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
请选择版本 [0-3,默认: 0]: 0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
更新摘要
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
服务器: dros.overs.games
用户名: deploy
目标目录: ./h5
版本: latest
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
确认执行更新? [y/N]: y
交互模式适合手动操作,提供友好的提示和选择界面。
bash update-client.sh
输入用户名
deploy输入密码
指定下载目录
./h5选择版本
latest(最新版本)确认更新
y 确认,n 或其他取消自动执行
非交互模式适合自动化脚本和 CI/CD 流程。
bash update-client.sh [选项]
bash update-client.sh \
--user deploy \
--password your_password \
--dir ./h5 \
--version latest \
--yes
bash update-client.sh \
-u deploy \
-p your_password \
-d ./h5 \
-v v1.1.5-20251129-143005 \
-y \
-s
| 参数 | 简写 | 说明 | 默认值 | 必需 |
|---|---|---|---|---|
--user |
-u |
用户名 | deploy |
否 |
--password |
-p |
密码 | - | 否* |
--dir |
-d |
下载目录 | ./h5 |
否 |
--version |
-v |
版本号 | latest |
否 |
--include-static |
-i |
包含 static 文件夹 | false |
否 |
--yes |
-y |
跳过确认 | false |
否 |
--silent |
-s |
静默模式 | false |
否 |
--help |
-h |
显示帮助 | - | 否 |
* 如果不通过参数提供密码,会在交互时提示输入
关于 static 文件夹:
static 文件夹通常包含大量静态资源(图片、视频等)-i 参数bash update-client.sh --help
# 最简单的方式 - 交互模式
bash update-client.sh
#!/bin/bash
# deploy.sh - 生产部署脚本
# 从环境变量读取密码
DEPLOY_PASSWORD="${DEPLOY_PASSWORD}"
bash update-client.sh \
-u deploy \
-p "$DEPLOY_PASSWORD" \
-d /var/www/html/h5 \
-v latest \
-y \
-s
# 检查更新是否成功
if [ $? -eq 0 ]; then
echo "部署成功!"
# 可以在这里重启服务等
# systemctl restart nginx
else
echo "部署失败!"
exit 1
fi
# 添加到 crontab
# 每天凌晨 2 点自动更新
0 2 * * * cd /path/to/project && bash update-client.sh -u deploy -p password -y -s >> /var/log/update.log 2>&1
# 回滚到之前的版本
bash update-client.sh \
-u deploy \
-p your_password \
-v v1.1.4-20251128-163015 \
-y
GitHub Actions 示例:
name: Deploy to Production
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Deploy to server
env:
DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }}
run: |
bash update-client.sh \
-u deploy \
-p "$DEPLOY_PASSWORD" \
-d ./h5 \
-v latest \
-y \
-s
A: 脚本顶部有版本信息,或查看帮助:
bash update-client.sh --help
A: 不推荐!但如果需要,可以:
# 从文件读取密码
PASSWORD=$(cat ~/.deploy_password)
bash update-client.sh -u deploy -p "$PASSWORD" -y
更安全的方式:
# 使用环境变量
export DEPLOY_PASSWORD="your_password"
bash update-client.sh -u deploy -p "$DEPLOY_PASSWORD" -y
A: 日志保存在 ./logs/ 目录:
# 查看最新日志
ls -lt ./logs/update_*.log | head -1
# 查看日志内容
tail -f ./logs/update_20251129_143005.log
A: 备份保存在原目录旁边:
# 如果更新目录是 ./h5
# 备份会命名为 ./h5_backup_20251129_143005
ls -d ./h5_backup_*
A:
# 删除当前版本
rm -rf ./h5
# 恢复备份(替换为实际的备份目录名)
mv ./h5_backup_20251129_143005 ./h5
A: 删除锁文件后重试:
# 删除锁文件
rm -f /tmp/update-client-${USER}.lock
# 重新运行
bash update-client.sh
A: 脚本会自动检测,如果目录为空或不存在则跳过备份。如果需要强制不备份,可以先清空目录:
# 谨慎操作!
rm -rf ./h5/*
A: 需要更新 static 的情况:
可以跳过 static 的情况:
示例:
# 首次部署 - 包含 static
bash update-client.sh -u deploy -p password -y -i
# 日常更新 - 跳过 static(默认)
bash update-client.sh -u deploy -p password -y
# 静态资源有更新 - 包含 static
bash update-client.sh -u deploy -p password -y --include-static
A: 查看更新摘要和日志:
更新摘要中会显示:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
更新摘要
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
服务器: dros.overs.games
用户名: deploy
目标目录: ./h5
版本: latest
static 文件夹: 跳过 ← 这里显示状态
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
日志中会记录:
# 查看日志
cat ./logs/update_*.log | grep "static"
# 会看到类似输出
[INFO] static 文件夹: 跳过更新
# 或
[INFO] static 文件夹: 包含在更新中
错误信息:
[ERROR] 无法连接到服务器
[ERROR] 请检查网络连接、用户名和密码
解决方法:
检查网络连接:
ping dros.overs.games
bash
curl -k -I --user "deploy:your_password" https://dros.overs.games/releases/
检查用户名和密码是否正确
检查服务器地址是否正确
错误信息:
[ERROR] 缺少必需工具: wget curl
解决方法:
Linux (Ubuntu/Debian):
sudo apt-get update
sudo apt-get install curl wget
Linux (CentOS/RHEL):
sudo yum install curl wget
macOS:
brew install wget
# curl 通常已预装
Windows (Git Bash):
错误信息:
bash: ./update-client.sh: Permission denied
解决方法:
# 不要用 ./update-client.sh
# 改用 bash 命令
bash update-client.sh
错误信息:
[ERROR] 无法获取版本列表
解决方法:
手动检查:
curl -k --user "deploy:password" https://dros.overs.games/releases/
错误信息: ```
[ERROR] 下载失败
**解决方法:**
1. 检查磁盘空间:
```bash
df -h
检查目录写入权限:
ls -ld ./h5
bash
wget --user=deploy --password=your_password \
--no-check-certificate \
https://dros.overs.games/releases/latest/
错误信息:
[ERROR] 文件完整性验证失败
解决方法:
✅ DO(推荐):
chmod 700 update-client.sh❌ DON'T(不推荐):
# 创建包装脚本
cat > auto-update.sh << 'EOF'
#!/bin/bash
set -e
# 从安全位置读取密码
DEPLOY_PASSWORD=$(cat ~/.secrets/deploy_password)
# 执行更新
bash update-client.sh \
-u deploy \
-p "$DEPLOY_PASSWORD" \
-d /var/www/html/h5 \
-v latest \
-y \
-s
# 更新成功后的操作
if [ $? -eq 0 ]; then
# 重启服务
sudo systemctl reload nginx
# 发送通知
echo "H5 应用已更新到最新版本" | mail -s "部署成功" admin@example.com
fi
EOF
chmod 700 auto-update.sh
# 保留最近 30 天的日志
find ./logs -name "update_*.log" -mtime +30 -delete
# 监控更新状态
tail -f ./logs/update_*.log | grep -E "\[ERROR\]|\[✓\]"
# 记录当前版本
echo "latest" > ./h5/.version
# 更新后验证
cat ./h5/.version
# 更新前记录当前版本信息
CURRENT_VERSION=$(cat ./h5/.version 2>/dev/null || echo "unknown")
echo "更新前版本: $CURRENT_VERSION" >> ./logs/update_history.log
# 执行更新
bash update-client.sh -u deploy -p "$PASSWORD" -v latest -y
# 如果更新失败,自动回滚
if [ $? -ne 0 ]; then
echo "更新失败,正在回滚..."
if [ -d "./h5_backup_*" ]; then
rm -rf ./h5
mv $(ls -dt ./h5_backup_* | head -1) ./h5
echo "已回滚到: $CURRENT_VERSION"
fi
fi
如有问题或建议,请:
./logs/update_*.log本脚本为内部使用工具,请勿外传。
最后更新: 2025-11-29
维护者: 开发团队