3588AdminBackend/scripts/deploy/upgrade.sh
2026-02-25 11:00:55 +08:00

105 lines
2.6 KiB
Bash

#!/bin/bash
# 3588AdminBackend 升级脚本
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
INSTALL_DIR="${1:-/opt/3588admin}"
BACKUP_DIR="/root/3588admin-backup-$(date +%Y%m%d%H%M%S)"
echo "========== 3588AdminBackend 升级 =========="
echo "安装目录: $INSTALL_DIR"
echo "备份目录: $BACKUP_DIR"
echo ""
# 检查 root 权限
if [ "$EUID" -ne 0 ]; then
echo "错误: 请使用 sudo 运行升级脚本"
exit 1
fi
# 检查安装目录是否存在
if [ ! -d "$INSTALL_DIR" ]; then
echo "错误: 安装目录不存在: $INSTALL_DIR"
echo "请先运行 install.sh 进行首次安装"
exit 1
fi
# 确认
read -p "确定要升级 3588AdminBackend? (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "升级已取消"
exit 0
fi
# 1. 停止服务
echo "[1/5] 停止服务..."
if [ -f "$INSTALL_DIR/scripts/stop.sh" ]; then
"$INSTALL_DIR/scripts/stop.sh" 2>/dev/null || true
elif systemctl is-active --quiet 3588admin 2>/dev/null; then
systemctl stop 3588admin
fi
sleep 2
# 2. 备份
echo "[2/5] 备份现有数据..."
mkdir -p "$BACKUP_DIR"
# 备份配置
if [ -f "$INSTALL_DIR/config/managerd.json" ]; then
cp "$INSTALL_DIR/config/managerd.json" "$BACKUP_DIR/"
echo " 已备份配置文件"
fi
# 备份日志
if [ -d "$INSTALL_DIR/logs" ]; then
cp -r "$INSTALL_DIR/logs" "$BACKUP_DIR/"
echo " 已备份日志文件"
fi
# 备份旧版本二进制
if [ -f "$INSTALL_DIR/bin/managerd" ]; then
cp "$INSTALL_DIR/bin/managerd" "$BACKUP_DIR/managerd.old"
echo " 已备份旧版本二进制"
fi
echo " 备份完成: $BACKUP_DIR"
# 3. 更新二进制文件
echo "[3/5] 更新二进制文件..."
if [ -f "$SCRIPT_DIR/../bin/managerd" ]; then
cp "$SCRIPT_DIR/../bin/managerd" "$INSTALL_DIR/bin/managerd"
chmod +x "$INSTALL_DIR/bin/managerd"
echo " 已更新二进制文件"
else
echo "警告: 未找到新的二进制文件,跳过更新"
fi
# 4. 更新脚本
echo "[4/5] 更新脚本..."
if [ -d "$SCRIPT_DIR" ]; then
cp "$SCRIPT_DIR/"*.sh "$INSTALL_DIR/scripts/" 2>/dev/null || true
chmod +x "$INSTALL_DIR/scripts/"*.sh
echo " 已更新脚本文件"
fi
# 5. 启动服务
echo "[5/5] 启动服务..."
if [ -f "$INSTALL_DIR/scripts/start.sh" ]; then
"$INSTALL_DIR/scripts/start.sh"
else
systemctl start 3588admin
fi
echo ""
echo "========== 升级完成 =========="
echo "服务已启动"
echo ""
echo "备份位置: $BACKUP_DIR"
echo ""
echo "如升级后出现问题,可快速回滚:"
echo " sudo systemctl stop 3588admin"
echo " sudo cp $BACKUP_DIR/managerd.old $INSTALL_DIR/bin/managerd"
echo " sudo systemctl start 3588admin"