#!/bin/bash # Write Server 备份脚本 # 备份博客数据和配置 set -e echo "===================================" echo " Write Server 备份脚本" echo "===================================" # 配置 BACKUP_DIR="./backups" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_NAME="write-server-${DATE}" BACKUP_FILE="${BACKUP_DIR}/${BACKUP_NAME}.tar.gz" # 加载环境变量 if [ -f .env ]; then source .env fi # 检查 BLOG_ROOT if [ -z "$BLOG_ROOT" ]; then echo "警告: BLOG_ROOT 未配置,将仅备份配置文件" BLOG_ROOT="" fi # 创建备份目录 mkdir -p "$BACKUP_DIR" echo "开始备份..." echo "备份时间: $(date)" echo "" # 创建临时目录 TEMP_DIR=$(mktemp -d) trap "rm -rf $TEMP_DIR" EXIT # 备份配置文件 echo "1. 备份配置文件..." cp .env "$TEMP_DIR/" 2>/dev/null || true cp package.json "$TEMP_DIR/" cp -r nginx "$TEMP_DIR/" 2>/dev/null || true # 备份回收站 echo "2. 备份回收站..." if [ -d "recycle" ]; then cp -r recycle "$TEMP_DIR/" fi # 备份日志(最近 7 天) echo "3. 备份日志..." if [ -d "logs" ]; then mkdir -p "$TEMP_DIR/logs" find logs -name "*.log" -mtime -7 -exec cp {} "$TEMP_DIR/logs/" \; 2>/dev/null || true fi # 备份博客内容(如果配置了 BLOG_ROOT) if [ -n "$BLOG_ROOT" ] && [ -d "$BLOG_ROOT" ]; then echo "4. 备份博客内容..." mkdir -p "$TEMP_DIR/blog" # 备份 content 目录 if [ -d "$BLOG_ROOT/content" ]; then cp -r "$BLOG_ROOT/content" "$TEMP_DIR/blog/" fi # 备份配置文件 if [ -f "$BLOG_ROOT/hugo.toml" ]; then cp "$BLOG_ROOT/hugo.toml" "$TEMP_DIR/blog/" fi # 备份主题配置 if [ -d "$BLOG_ROOT/themes" ]; then cp -r "$BLOG_ROOT/themes" "$TEMP_DIR/blog/" 2>/dev/null || true fi else echo "4. 跳过博客内容备份(BLOG_ROOT 未配置)" fi # 创建压缩包 echo "5. 创建压缩包..." tar -czf "$BACKUP_FILE" -C "$TEMP_DIR" . # 计算备份大小 BACKUP_SIZE=$(du -h "$BACKUP_FILE" | cut -f1) echo "" echo "===================================" echo " 备份完成!" echo "===================================" echo "" echo "备份文件: $BACKUP_FILE" echo "备份大小: $BACKUP_SIZE" echo "" # 清理旧备份(保留最近 30 天) echo "清理旧备份..." find "$BACKUP_DIR" -name "write-server-*.tar.gz" -mtime +30 -delete 2>/dev/null || true # 显示最近的备份 echo "" echo "最近的备份文件:" ls -lh "$BACKUP_DIR"/write-server-*.tar.gz 2>/dev/null | tail -5 || echo " 无" echo ""