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

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

97 lines
3.1 KiB
PowerShell

# ============================================
# 完整系统备份脚本 (PowerShell)
# ============================================
# 功能:
# - 备份 PostgreSQL 数据库
# - 备份 MinIO 文件存储
# - 备份关键配置文件 (.env, docker-compose*.yml, prisma/schema.prisma)
# - 生成本次完整备份的清单 (manifest)
# 使用:
# .\scripts\backup-all.ps1 [-BackupRoot ".\backups\full"]
# ============================================
param(
[string]$BackupRoot = ".\backups\full"
)
$ErrorActionPreference = "Stop"
$Timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
$BackupDir = Join-Path $BackupRoot $Timestamp
$databaseDir = Join-Path $BackupDir "database"
$filesDir = Join-Path $BackupDir "files"
$configDir = Join-Path $BackupDir "config"
# 创建目录结构
New-Item -ItemType Directory -Path $databaseDir -Force | Out-Null
New-Item -ItemType Directory -Path $filesDir -Force | Out-Null
New-Item -ItemType Directory -Path $configDir -Force | Out-Null
Write-Host "========================================"
Write-Host " 完整系统备份脚本"
Write-Host "========================================"
Write-Host "备份根目录: $BackupRoot"
Write-Host "本次备份目录: $BackupDir"
Write-Host ""
# 1. 备份数据库
& .\scripts\backup-db.ps1 -BackupDir $databaseDir
# 2. 备份文件存储 (MinIO)
& .\scripts\backup-files.ps1 -BackupDir $filesDir
# 3. 备份关键配置文件
# .env
if (Test-Path ".env") {
Copy-Item ".env" (Join-Path $configDir ".env") -Force
}
# docker-compose*.yml
Get-ChildItem -Path . -Filter "docker-compose*.yml" -ErrorAction SilentlyContinue |
ForEach-Object {
Copy-Item $_.FullName (Join-Path $configDir $_.Name) -Force
}
# prisma/schema.prisma
if (Test-Path "prisma\schema.prisma") {
$prismaTarget = Join-Path $configDir "prisma"
New-Item -ItemType Directory -Path $prismaTarget -Force | Out-Null
Copy-Item "prisma\schema.prisma" (Join-Path $prismaTarget "schema.prisma") -Force
}
# 4. 生成清单文件
$dbBackup = Get-ChildItem -Path $databaseDir -Filter "db-backup-*.sql.gz" -ErrorAction SilentlyContinue |
Sort-Object LastWriteTime -Descending |
Select-Object -First 1
$filesBackup = Get-ChildItem -Path $filesDir -Filter "files-backup-*.tar.gz" -ErrorAction SilentlyContinue |
Sort-Object LastWriteTime -Descending |
Select-Object -First 1
$manifest = [ordered]@{
timestamp = (Get-Date -Format "o")
root = $BackupDir
components = [ordered]@{
database = $dbBackup.Name
files = $filesBackup.Name
config = @(
".env",
"docker-compose*.yml",
"prisma/schema.prisma"
)
}
}
$manifestPath = Join-Path $BackupDir "backup-manifest.json"
$manifest | ConvertTo-Json -Depth 4 | Out-File -FilePath $manifestPath -Encoding UTF8
Write-Host ""
Write-Host "========================================"
Write-Host " 🎉 完整备份完成"
Write-Host "========================================"
Write-Host "备份目录: $BackupDir"
Write-Host "清单文件: $manifestPath"
Write-Host "========================================"
Write-Host ""