Files
blog/scripts/deploy_upyun.sh
T
2026-06-25 14:06:32 +08:00

117 lines
3.1 KiB
Bash

#!/bin/bash
# UpYun 部署脚本 - 使用 upx 官方工具
# 功能:增量同步本地文件到 UpYun,自动删除远程多余文件
#
# 用法: ./deploy_upyun.sh <本地目录> <远程目录> [线程数]
# 示例: ./deploy_upyun.sh ./public / 10
#
# 环境变量:
# UPYUN_SERVICE - 服务名 (bucket)
# UPYUN_OPERATOR - 操作员
# UPYUN_PASSWORD - 密码
set -e
START_TIME=$(date +%s)
# 参数
LOCAL_DIR="${1:-./public}"
REMOTE_DIR="${2:-/}"
THREADS="${3:-10}"
# 又拍云 upx sync 的线程数限制在 1-10 之间
if [ "$THREADS" -lt 1 ]; then
THREADS=1
elif [ "$THREADS" -gt 10 ]; then
THREADS=10
fi
# 检查环境变量
SERVICE_NAME="${UPYUN_SERVICE:-}"
OPERATOR="${UPYUN_OPERATOR:-}"
PASSWORD="${UPYUN_PASSWORD:-}"
if [ -z "$SERVICE_NAME" ] || [ -z "$OPERATOR" ] || [ -z "$PASSWORD" ]; then
echo "❌ 错误:缺少必要的环境变量"
echo "需要设置:"
echo " UPYUN_SERVICE - 服务名 (bucket)"
echo " UPYUN_OPERATOR - 操作员"
echo " UPYUN_PASSWORD - 密码"
exit 1
fi
echo "🚀 UpYun 部署开始"
echo "=========================================="
echo "📦 服务名: $SERVICE_NAME"
echo "👤 操作员: $OPERATOR"
echo "📁 本地目录: $LOCAL_DIR"
echo "☁️ 远程目录: $REMOTE_DIR"
echo "🔢 线程数: $THREADS"
echo "=========================================="
# 使用独立的 upx 路径,避免和系统的 upx (Ultimate Packer) 冲突
UPX_VERSION="0.4.9"
UPX_URL="https://collection.b0.upaiyun.com/softwares/upx/upx_${UPX_VERSION}_linux_amd64.tar.gz"
UPX_BIN="/tmp/upyun-upx"
# 检查系统中的 upx 是否是又拍云的
if command -v upx &> /dev/null; then
UPX_VERSION_OUTPUT=$(upx --version 2>/dev/null || true)
if echo "$UPX_VERSION_OUTPUT" | grep -q "upyun"; then
echo "✅ 系统已安装又拍云 upx: $UPX_VERSION_OUTPUT"
UPX_BIN="upx"
else
echo "⚠️ 系统中的 upx 不是又拍云工具(是压缩工具),将下载又拍云版"
UPX_BIN="/tmp/upyun-upx"
fi
fi
# 如果还没有又拍云 upx,下载它
if [ ! -x "$UPX_BIN" ]; then
echo ""
echo "📥 下载又拍云 upx v${UPX_VERSION}..."
curl -sL "$UPX_URL" -o /tmp/upx.tar.gz
if [ ! -f /tmp/upx.tar.gz ]; then
echo "❌ 下载失败"
exit 1
fi
tar -xzf /tmp/upx.tar.gz -C /tmp
mv /tmp/upx "$UPX_BIN"
chmod +x "$UPX_BIN"
rm -f /tmp/upx.tar.gz
echo "✅ 又拍云 upx 安装完成"
fi
echo ""
echo "🔄 开始同步..."
echo ""
# 使用 upx sync 进行增量同步
# 先登录,再同步
# -w: 并发线程数
# --delete: 删除远程端不存在的文件
# --strong: 强一致性
# 先登录
"$UPX_BIN" login "$SERVICE_NAME" "$OPERATOR" "$PASSWORD"
# 然后同步
"$UPX_BIN" sync "$LOCAL_DIR" "$REMOTE_DIR" \
-w "$THREADS" \
--delete \
--strong
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
MINUTES=$((DURATION / 60))
SECONDS=$((DURATION % 60))
echo ""
echo "=========================================="
echo "✅ UpYun 部署完成!"
echo "⏱️ 总耗时: ${MINUTES}分${SECONDS}秒"
echo "=========================================="