WuYongJie 75db836d29 feat(3D核心功能): 完成所有必需实现任务
- 文件上传验证: ModelUploader组件增强、上传API错误处理
- GLTF解析器: 增强节点提取和元数据
- 板材编辑: PanelEditor客户端验证 + panels API服务端验证
- 装配步骤编辑: 修复未使用代码,添加预览按钮
- 装配动画播放: AssemblyPlayer步骤导航边界检查优化
- 分享链接: 完整CRUD API(创建、获取、删除),含验证和过期检查

跳过可选测试任务以加快MVP开发
2025-12-22 16:18:13 +08:00

102 lines
3.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ============================================
# 系统恢复脚本 (Linux/Mac)
# ============================================
# 功能:
# - 从指定的完整备份目录恢复数据库和文件存储
# - 恢复前先执行一次完整备份作为 "before-restore" 快照
# 使用:
# ./scripts/restore.sh <完整备份目录>
# 示例:
# ./scripts/restore.sh ./backups/full/20251218-120000
# ============================================
set -e
if [ -z "$1" ]; then
echo "用法: $0 <完整备份目录>"
exit 1
fi
BACKUP_DIR="$1"
DB_BACKUP_DIR="${BACKUP_DIR}/database"
FILES_BACKUP_DIR="${BACKUP_DIR}/files"
if [ ! -d "$DB_BACKUP_DIR" ] || [ ! -d "$FILES_BACKUP_DIR" ]; then
echo "错误:${BACKUP_DIR} 下未找到 database/ 或 files/ 子目录。"
exit 1
fi
echo "========================================"
echo " 系统恢复脚本"
echo "========================================"
echo "目标备份目录: ${BACKUP_DIR}"
echo "警告:该操作会覆盖当前数据库和文件存储,请确保在测试环境中执行。"
echo "========================================"
read -p "确认继续恢复?(yes/[no]): " CONFIRM
if [ "$CONFIRM" != "yes" ]; then
echo "已取消恢复操作。"
exit 0
fi
# 0. 恢复前先做一次完整备份
echo "\n[步骤 0] 恢复前备份当前系统..."
./scripts/backup-all.sh "./backups/before-restore" || echo "恢复前备份失败(已记录),继续尝试恢复..."
# 1. 恢复数据库
echo "\n[步骤 1] 恢复数据库..."
# 加载当前 .env 中的 DATABASE_URL
if [ -f .env ]; then
export $(cat .env | grep -v '^#' | xargs)
fi
if [ -z "$DATABASE_URL" ]; then
echo "错误:未在当前环境或 .env 中找到 DATABASE_URL,无法恢复数据库。"
exit 1
fi
LATEST_DB_BACKUP="$(ls -1 "${DB_BACKUP_DIR}"/db-backup-*.sql.gz 2>/dev/null | head -n 1)"
if [ -z "$LATEST_DB_BACKUP" ]; then
echo "错误:在 ${DB_BACKUP_DIR} 下未找到 db-backup-*.sql.gz 文件。"
exit 1
fi
echo "使用备份文件: ${LATEST_DB_BACKUP}"
gunzip -c "$LATEST_DB_BACKUP" | psql "$DATABASE_URL"
echo "数据库恢复完成。"
# 2. 恢复文件存储 (MinIO)
echo "\n[步骤 2] 恢复文件存储 (MinIO)..."
LATEST_FILES_BACKUP="$(ls -1 "${FILES_BACKUP_DIR}"/files-backup-*.tar.gz 2>/dev/null | head -n 1)"
if [ -z "$LATEST_FILES_BACKUP" ]; then
echo "错误:在 ${FILES_BACKUP_DIR} 下未找到 files-backup-*.tar.gz 文件。"
exit 1
fi
echo "使用备份文件: ${LATEST_FILES_BACKUP}"
# 目标 MinIO 数据目录(与备份脚本使用的默认值一致)
MINIO_DATA_DIR="${MINIO_DATA_DIR:-./minio-data}"
mkdir -p "$MINIO_DATA_DIR"
echo "清空当前 MinIO 数据目录: ${MINIO_DATA_DIR}"
rm -rf "${MINIO_DATA_DIR:?}"/*
tar -xzf "$LATEST_FILES_BACKUP" -C "$(dirname "$MINIO_DATA_DIR")"
echo "文件存储恢复完成。"
echo "\n========================================"
echo " 🎉 系统恢复完成 (基础版本)"
echo "========================================"
echo "来源备份: ${BACKUP_DIR}"
echo "恢复前快照目录: ./backups/before-restore"
echo "========================================"
echo ""