- 文件上传验证: ModelUploader组件增强、上传API错误处理 - GLTF解析器: 增强节点提取和元数据 - 板材编辑: PanelEditor客户端验证 + panels API服务端验证 - 装配步骤编辑: 修复未使用代码,添加预览按钮 - 装配动画播放: AssemblyPlayer步骤导航边界检查优化 - 分享链接: 完整CRUD API(创建、获取、删除),含验证和过期检查 跳过可选测试任务以加快MVP开发
97 lines
3.1 KiB
PowerShell
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 ""
|