106 lines
2.5 KiB
Bash
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 ""
|