138 lines
3.2 KiB
Bash
138 lines
3.2 KiB
Bash
#!/bin/bash
|
|||
|
|
# Write Server 恢复脚本
|
||
|
|
# 从备份恢复数据
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
echo "==================================="
|
||
|
|
echo " Write Server 恢复脚本"
|
||
|
|
echo "==================================="
|
||
|
|
|
||
|
|
# 检查参数
|
||
|
|
if [ -z "$1" ]; then
|
||
|
|
echo "用法: $0 <备份文件>"
|
||
|
|
echo ""
|
||
|
|
echo "示例: $0 backups/write-server-20260101_120000.tar.gz"
|
||
|
|
echo ""
|
||
|
|
echo "可用的备份文件:"
|
||
|
|
ls -lh backups/write-server-*.tar.gz 2>/dev/null || echo " 无备份文件"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
BACKUP_FILE="$1"
|
||
|
|
|
||
|
|
# 检查备份文件是否存在
|
||
|
|
if [ ! -f "$BACKUP_FILE" ]; then
|
||
|
|
echo "错误: 备份文件不存在: $BACKUP_FILE"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "备份文件: $BACKUP_FILE"
|
||
|
|
echo "备份大小: $(du -h "$BACKUP_FILE" | cut -f1)"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# 确认恢复
|
||
|
|
read -p "确定要恢复此备份吗?这将覆盖当前数据 (y/N): " -n 1 -r
|
||
|
|
echo ""
|
||
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||
|
|
echo "已取消恢复"
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 停止服务
|
||
|
|
echo "1. 停止服务..."
|
||
|
|
if command -v pm2 &> /dev/null; then
|
||
|
|
pm2 stop write-server 2>/dev/null || true
|
||
|
|
fi
|
||
|
|
|
||
|
|
if command -v systemctl &> /dev/null; then
|
||
|
|
sudo systemctl stop write-server 2>/dev/null || true
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 创建临时目录
|
||
|
|
TEMP_DIR=$(mktemp -d)
|
||
|
|
trap "rm -rf $TEMP_DIR" EXIT
|
||
|
|
|
||
|
|
# 解压备份
|
||
|
|
echo "2. 解压备份..."
|
||
|
|
tar -xzf "$BACKUP_FILE" -C "$TEMP_DIR"
|
||
|
|
|
||
|
|
# 恢复配置文件
|
||
|
|
echo "3. 恢复配置文件..."
|
||
|
|
if [ -f "$TEMP_DIR/.env" ]; then
|
||
|
|
cp "$TEMP_DIR/.env" .env
|
||
|
|
echo " 已恢复 .env"
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ -f "$TEMP_DIR/package.json" ]; then
|
||
|
|
# 不覆盖 package.json,只显示差异
|
||
|
|
echo " package.json 已存在,跳过"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 恢复回收站
|
||
|
|
echo "4. 恢复回收站..."
|
||
|
|
if [ -d "$TEMP_DIR/recycle" ]; then
|
||
|
|
rm -rf recycle
|
||
|
|
cp -r "$TEMP_DIR/recycle" recycle
|
||
|
|
echo " 已恢复回收站"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 恢复博客内容
|
||
|
|
if [ -d "$TEMP_DIR/blog" ]; then
|
||
|
|
echo "5. 恢复博客内容..."
|
||
|
|
|
||
|
|
# 加载环境变量
|
||
|
|
if [ -f .env ]; then
|
||
|
|
source .env
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ -n "$BLOG_ROOT" ] && [ -d "$BLOG_ROOT" ]; then
|
||
|
|
# 恢复 content 目录
|
||
|
|
if [ -d "$TEMP_DIR/blog/content" ]; then
|
||
|
|
echo " 恢复 content 目录..."
|
||
|
|
cp -r "$TEMP_DIR/blog/content/"* "$BLOG_ROOT/content/" 2>/dev/null || true
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 恢复配置文件
|
||
|
|
if [ -f "$TEMP_DIR/blog/hugo.toml" ]; then
|
||
|
|
echo " 恢复 hugo.toml..."
|
||
|
|
cp "$TEMP_DIR/blog/hugo.toml" "$BLOG_ROOT/"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo " 博客内容已恢复到: $BLOG_ROOT"
|
||
|
|
else
|
||
|
|
echo " 警告: BLOG_ROOT 未配置或不存在,跳过博客内容恢复"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
echo "5. 跳过博客内容恢复(备份中不包含)"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 恢复 Nginx 配置
|
||
|
|
echo "6. 恢复 Nginx 配置..."
|
||
|
|
if [ -d "$TEMP_DIR/nginx" ]; then
|
||
|
|
mkdir -p nginx
|
||
|
|
cp -r "$TEMP_DIR/nginx/"* nginx/ 2>/dev/null || true
|
||
|
|
echo " 已恢复 Nginx 配置"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 重新安装依赖
|
||
|
|
echo "7. 重新安装依赖..."
|
||
|
|
npm install
|
||
|
|
|
||
|
|
# 重新构建
|
||
|
|
echo "8. 重新构建..."
|
||
|
|
npm run build
|
||
|
|
|
||
|
|
# 启动服务
|
||
|
|
echo "9. 启动服务..."
|
||
|
|
if command -v pm2 &> /dev/null; then
|
||
|
|
pm2 start npm --name "write-server" -- run start
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "==================================="
|
||
|
|
echo " 恢复完成!"
|
||
|
|
echo "==================================="
|
||
|
|
echo ""
|
||
|
|
echo "服务已启动,请检查是否正常运行"
|
||
|
|
echo ""
|