Files
blog/write-server/scripts/backup.sh
T
2026-06-21 20:42:44 +08:00

106 lines
2.5 KiB
Bash

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