#!/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 ""