laobinghu 37742571ae feat: 完成项目初始化并重构部署流程
主要变更:
- 添加完整的项目结构和模块(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 密钥对支持
- 添加环境变量验证和数据库备份恢复功能
2026-03-28 16:53:25 +08:00

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