You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
5.1 KiB
188 lines
5.1 KiB
#!/bin/bash
|
|
# 远程打包脚本 - 在 Windows Git Bash 中运行
|
|
# 功能: 上传代码到 Linux 服务器,在 Linux 上打包,然后下载离线包
|
|
|
|
# ===== 配置区域 - 请修改为你的 Linux 服务器信息 =====
|
|
REMOTE_USER="root"
|
|
REMOTE_HOST="10.8.30.179" # 修改为你的服务器地址或IP
|
|
REMOTE_PORT="22"
|
|
REMOTE_WORK_DIR="/tmp/wuyuanbiaoba-pack"
|
|
# ========================================================
|
|
|
|
APP_NAME="wuyuanbiaoba-web"
|
|
|
|
# 读取版本号
|
|
if [ -f package.json ]; then
|
|
VERSION=$(grep '"version"' package.json | head -1 | sed -E 's/.*"version": *"([^"]+)".*/\1/')
|
|
[ -z "$VERSION" ] && VERSION="latest"
|
|
else
|
|
VERSION="latest"
|
|
fi
|
|
|
|
DEPLOY_PACKAGE="${APP_NAME}-${VERSION}-offline.tar.gz"
|
|
|
|
echo "================================================"
|
|
echo "🌐 远程 Linux 打包"
|
|
echo "================================================"
|
|
echo "目标服务器: $REMOTE_USER@$REMOTE_HOST"
|
|
echo "工作目录: $REMOTE_WORK_DIR"
|
|
echo "应用版本: $VERSION"
|
|
echo ""
|
|
|
|
# 检查配置
|
|
if [ "$REMOTE_HOST" = "your-linux-server.com" ]; then
|
|
echo "❌ 错误: 请先配置服务器信息"
|
|
echo ""
|
|
echo "编辑文件: script/pack-remote.sh"
|
|
echo "修改以下配置:"
|
|
echo " REMOTE_USER=\"root\""
|
|
echo " REMOTE_HOST=\"192.168.1.100\" # 你的 Linux 服务器"
|
|
echo " REMOTE_PORT=\"22\""
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
|
|
# 检查 SSH 连接
|
|
echo "🔍 检查服务器连接..."
|
|
if ! ssh -p $REMOTE_PORT -o ConnectTimeout=5 $REMOTE_USER@$REMOTE_HOST "echo '连接成功'" 2>/dev/null; then
|
|
echo "❌ 无法连接到服务器"
|
|
echo ""
|
|
echo "请检查:"
|
|
echo " 1. 服务器地址是否正确: $REMOTE_HOST"
|
|
echo " 2. SSH 端口是否正确: $REMOTE_PORT"
|
|
echo " 3. SSH 密钥是否配置"
|
|
echo " 4. 网络是否通畅"
|
|
echo ""
|
|
echo "测试连接命令:"
|
|
echo " ssh -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST"
|
|
echo ""
|
|
echo "配置 SSH 免密登录:"
|
|
echo " ssh-keygen -t rsa -b 4096"
|
|
echo " ssh-copy-id -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ 服务器连接正常"
|
|
echo ""
|
|
|
|
# 创建远程工作目录
|
|
echo "📁 准备远程工作目录..."
|
|
ssh -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST "mkdir -p $REMOTE_WORK_DIR"
|
|
|
|
# 上传源代码(排除不必要的文件)
|
|
echo ""
|
|
echo "📤 打包源代码..."
|
|
|
|
# 创建临时 tar 包(排除不必要的文件)
|
|
TEMP_TAR="/tmp/${APP_NAME}-source-$$.tar.gz"
|
|
tar -czf "$TEMP_TAR" \
|
|
--exclude='node_modules' \
|
|
--exclude='build' \
|
|
--exclude='.git' \
|
|
--exclude='*.tar.gz' \
|
|
--exclude='.npm' \
|
|
--exclude='.cache' \
|
|
--exclude='.vscode' \
|
|
--exclude='*.log' \
|
|
./
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ 打包失败"
|
|
exit 1
|
|
fi
|
|
|
|
SOURCE_SIZE=$(du -h "$TEMP_TAR" | cut -f1)
|
|
echo "✅ 源代码打包完成 ($SOURCE_SIZE)"
|
|
|
|
echo ""
|
|
echo "📤 上传到服务器..."
|
|
echo " (这可能需要一些时间...)"
|
|
|
|
scp -P $REMOTE_PORT "$TEMP_TAR" $REMOTE_USER@$REMOTE_HOST:$REMOTE_WORK_DIR/source.tar.gz
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo ""
|
|
echo "❌ 上传失败"
|
|
rm -f "$TEMP_TAR"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ 上传完成"
|
|
|
|
# 删除本地临时文件
|
|
rm -f "$TEMP_TAR"
|
|
|
|
# 在服务器上解压
|
|
echo ""
|
|
echo "📦 在服务器上解压源代码..."
|
|
ssh -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST "cd $REMOTE_WORK_DIR && tar -xzf source.tar.gz && rm -f source.tar.gz"
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ 解压失败"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ 源代码准备完成"
|
|
|
|
# 在远程服务器执行打包
|
|
echo ""
|
|
echo "================================================"
|
|
echo "🔨 在 Linux 服务器上执行打包..."
|
|
echo "================================================"
|
|
echo ""
|
|
|
|
ssh -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST "cd $REMOTE_WORK_DIR && bash script/package-app-offline.sh"
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo ""
|
|
echo "❌ 远程打包失败"
|
|
echo ""
|
|
echo "你可以手动登录服务器检查:"
|
|
echo " ssh -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST"
|
|
echo " cd $REMOTE_WORK_DIR"
|
|
echo " bash script/package-app-offline.sh"
|
|
exit 1
|
|
fi
|
|
|
|
# 下载打包文件
|
|
echo ""
|
|
echo "📥 下载打包文件到本地..."
|
|
|
|
scp -P $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST:$REMOTE_WORK_DIR/$DEPLOY_PACKAGE ./
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ 下载失败"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "✅ 打包文件已下载到本地"
|
|
|
|
# 清理远程临时文件(可选)
|
|
echo ""
|
|
read -p "🗑️ 是否清理远程临时文件? (y/n) " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
echo " 清理中..."
|
|
ssh -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST "rm -rf $REMOTE_WORK_DIR"
|
|
echo " ✅ 已清理"
|
|
else
|
|
echo " 保留远程文件: $REMOTE_USER@$REMOTE_HOST:$REMOTE_WORK_DIR"
|
|
fi
|
|
|
|
LOCAL_SIZE=$(du -h $DEPLOY_PACKAGE | cut -f1)
|
|
|
|
echo ""
|
|
echo "================================================"
|
|
echo "🎉 远程打包完成!"
|
|
echo "================================================"
|
|
echo ""
|
|
echo "📦 本地文件: $DEPLOY_PACKAGE ($LOCAL_SIZE)"
|
|
echo ""
|
|
echo "📋 下一步:"
|
|
echo " 1. 将此文件上传到目标离线服务器"
|
|
echo " 2. 在服务器上解压并部署:"
|
|
echo " tar -xzf $DEPLOY_PACKAGE"
|
|
echo " sudo ./deploy.sh"
|
|
echo ""
|
|
|