主要变更: - 添加完整的项目结构和模块(admin、articles、comments、users、session、oauth2、email、moderation、analytics、jobs 等) - 实现系统初始化 API(/init/status 和 /init/run) - 重写部署流程:迁移到 package.json scripts,删除 Makefile - 优化部署脚本:deploy.sh、healthcheck.sh、backup.sh、restore.sh、verify-env.sh - 更新 README.md:简化文档,整合部署指南 - 优化 AGENTS.md:精简到约 150 行,包含完整的代码规范和命令速查 - 配置 Docker Compose 自动化部署(prisma migrate deploy + seed) - 生成 OAuth2 RSA 密钥对支持 - 添加环境变量验证和数据库备份恢复功能
77 lines
1.9 KiB
Bash
77 lines
1.9 KiB
Bash
#!/bin/bash
|
|
|
|
# ============================================
|
|
# LinkShare Blog - 数据库备份脚本
|
|
# ============================================
|
|
# 用途: 自动备份 PostgreSQL 数据库
|
|
# 用法: ./scripts/backup.sh [backup_name]
|
|
# 示例: ./scripts/backup.sh daily
|
|
|
|
set -e
|
|
|
|
# 配置
|
|
BACKUP_DIR="/backups"
|
|
DB_CONTAINER="blog-postgres"
|
|
DB_NAME="linkshare"
|
|
DB_USER="blog"
|
|
RETENTION_DAYS=7
|
|
|
|
# 参数处理
|
|
BACKUP_NAME=${1:-"auto_$(date +%Y%m%d_%H%M%S)"}
|
|
BACKUP_FILE="$BACKUP_DIR/${BACKUP_NAME}.sql.gz"
|
|
|
|
# 颜色定义
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m'
|
|
|
|
log_info() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# 创建备份目录
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
# 检查数据库容器
|
|
if ! docker ps | grep -q "$DB_CONTAINER"; then
|
|
log_error "数据库容器 '$DB_CONTAINER' 未运行"
|
|
exit 1
|
|
fi
|
|
|
|
# 执行备份
|
|
log_info "开始备份数据库: $DB_NAME"
|
|
log_info "备份文件: $BACKUP_FILE"
|
|
|
|
if docker exec "$DB_CONTAINER" pg_dump -U "$DB_USER" "$DB_NAME" 2>/dev/null | gzip > "$BACKUP_FILE"; then
|
|
BACKUP_SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
|
|
log_info "备份成功: $BACKUP_SIZE"
|
|
|
|
# 记录备份信息
|
|
echo "Backup: $BACKUP_NAME" >> "$BACKUP_DIR/backup.log"
|
|
echo "Date: $(date '+%Y-%m-%d %H:%M:%S')" >> "$BACKUP_DIR/backup.log"
|
|
echo "Size: $BACKUP_SIZE" >> "$BACKUP_DIR/backup.log"
|
|
echo "File: $BACKUP_FILE" >> "$BACKUP_DIR/backup.log"
|
|
echo "---" >> "$BACKUP_DIR/backup.log"
|
|
|
|
# 清理旧备份
|
|
log_info "清理 $RETENTION_DAYS 天前的旧备份..."
|
|
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete 2>/dev/null || true
|
|
|
|
log_info "备份完成!"
|
|
|
|
# 输出备份文件列表
|
|
echo ""
|
|
echo "可用的备份:"
|
|
ls -lh "$BACKUP_DIR"/*.sql.gz 2>/dev/null || echo "无备份文件"
|
|
|
|
exit 0
|
|
else
|
|
log_error "备份失败"
|
|
rm -f "$BACKUP_FILE"
|
|
exit 1
|
|
fi
|