Files
Neo-ZQYY/scripts/server/init-server-env.ps1

231 lines
7.6 KiB
PowerShell
Raw Permalink 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.
<#
.SYNOPSIS
服务器环境初始化脚本:删除 skip-worktree 排除的文件/目录 + 创建 export 目录树。
.DESCRIPTION
在服务器上 git clone + setup-server-git.py 之后运行。
1. 删除已被 skip-worktree 标记的目录和散文件(释放磁盘空间)
2. 创建完整的 export/ 目录树ETL/SYSTEM/BACKEND 三大类)
三个环境都需要 export 目录LOG、JSON、REPORTS 等运行时输出在每个环境都会产生)。
.PARAMETER Envs
要初始化的环境列表,默认 test,prod。
可选值test, prod逗号分隔
.EXAMPLE
# 初始化 test + prod默认
.\init-server-env.ps1
# 只初始化 test
.\init-server-env.ps1 -Envs test
# 只初始化 prod
.\init-server-env.ps1 -Envs prod
#>
param(
[string[]]$Envs = @("test", "prod")
)
$ErrorActionPreference = "Stop"
# ============================================================================
# 配置
# ============================================================================
# 服务器根目录
$ServerRoot = "D:\NeoZQYY"
# 环境 → repo 路径映射
$EnvPaths = @{
"test" = "$ServerRoot\test\repo"
"prod" = "$ServerRoot\prod\repo"
}
# skip-worktree 后可安全删除的目录(与 setup-server-git.py DELETABLE_DIRS 一致)
$DeletableDirs = @(
"export"
"docs"
"tests"
"samples"
"infra"
".kiro"
".hypothesis"
".pytest_cache"
"apps\miniprogram"
"scripts\ops"
"scripts\audit"
"scripts\migrate"
)
# 可安全删除的根目录散文件(与 setup-server-git.py SKIP_PREFIXES 中的散文件一致)
$DeletableFiles = @(
"coach-detail-full.png"
"customer-detail-full.png"
"perf-records-current.png"
"white-screen-debug.png"
"NeoZQYY.code-workspace"
"start-admin.bat"
".kiroignore"
)
# export 目录树(所有环境通用,运行时输出在每个环境都会产生)
$ExportDirs = @(
"export\ETL-Connectors\feiqiu\JSON"
"export\ETL-Connectors\feiqiu\LOGS"
"export\ETL-Connectors\feiqiu\REPORTS"
"export\SYSTEM\LOGS"
"export\SYSTEM\REPORTS\dataflow_analysis"
"export\SYSTEM\REPORTS\field_audit"
"export\SYSTEM\REPORTS\full_dataflow_doc"
"export\SYSTEM\CACHE\api_samples"
"export\BACKEND\LOGS"
)
# ============================================================================
# 函数
# ============================================================================
function Remove-SkipWorktreeItems {
<#
.SYNOPSIS
删除指定 repo 下已被 skip-worktree 标记的目录和散文件。
#>
param([string]$RepoPath)
Write-Host "`n [删除] 清理 skip-worktree 排除的目录和文件..." -ForegroundColor Yellow
$freedMB = 0
# 删除目录
foreach ($dir in $DeletableDirs) {
$fullPath = Join-Path $RepoPath $dir
if (Test-Path $fullPath) {
$size = (Get-ChildItem $fullPath -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
$sizeMB = [math]::Round($size / 1MB, 1)
Remove-Item $fullPath -Recurse -Force
Write-Host " 已删除: $dir/ ($sizeMB MB)" -ForegroundColor Red
$freedMB += $sizeMB
} else {
Write-Host " 跳过: $dir/ (不存在)" -ForegroundColor DarkGray
}
}
# 删除散文件
foreach ($file in $DeletableFiles) {
$fullPath = Join-Path $RepoPath $file
if (Test-Path $fullPath) {
$size = (Get-Item $fullPath).Length
$sizeMB = [math]::Round($size / 1MB, 2)
Remove-Item $fullPath -Force
Write-Host " 已删除: $file ($sizeMB MB)" -ForegroundColor Red
$freedMB += $sizeMB
}
}
# 删除根目录下所有 .png 文件server-exclude.txt 中 *.png 规则)
Get-ChildItem $RepoPath -Filter "*.png" -File -ErrorAction SilentlyContinue | ForEach-Object {
$sizeMB = [math]::Round($_.Length / 1MB, 2)
Remove-Item $_.FullName -Force
Write-Host " 已删除: $($_.Name) ($sizeMB MB)" -ForegroundColor Red
$freedMB += $sizeMB
}
Write-Host " 共释放: $freedMB MB" -ForegroundColor Green
}
function New-ExportTree {
<#
.SYNOPSIS
在指定 repo 下创建完整的 export 目录树。
#>
param([string]$RepoPath)
Write-Host "`n [创建] 初始化 export 目录树..." -ForegroundColor Yellow
foreach ($dir in $ExportDirs) {
$fullPath = Join-Path $RepoPath $dir
if (-not (Test-Path $fullPath)) {
New-Item -ItemType Directory -Path $fullPath -Force | Out-Null
Write-Host " 已创建: $dir/" -ForegroundColor Cyan
} else {
Write-Host " 已存在: $dir/" -ForegroundColor DarkGray
}
}
}
function Test-GitSetup {
<#
.SYNOPSIS
检查 setup-server-git.py 是否已运行(通过检查 .git/info/exclude 内容)。
#>
param([string]$RepoPath)
$excludeFile = Join-Path $RepoPath ".git\info\exclude"
if (-not (Test-Path $excludeFile)) {
return $false
}
$content = Get-Content $excludeFile -Raw -ErrorAction SilentlyContinue
return ($content -match "server-exclude")
}
# ============================================================================
# 主流程
# ============================================================================
Write-Host "============================================" -ForegroundColor White
Write-Host " NeoZQYY 服务器环境初始化" -ForegroundColor White
Write-Host " 目标环境: $($Envs -join ', ')" -ForegroundColor White
Write-Host "============================================" -ForegroundColor White
foreach ($env in $Envs) {
$repoPath = $EnvPaths[$env]
if (-not $repoPath) {
Write-Host "`n[错误] 未知环境: $env(可选: test, prod" -ForegroundColor Red
continue
}
Write-Host "`n========== 环境: $env ==========" -ForegroundColor Magenta
Write-Host " 路径: $repoPath"
# 检查 repo 是否存在
if (-not (Test-Path $repoPath)) {
Write-Host " [警告] 目录不存在,跳过。请先 git clone。" -ForegroundColor Yellow
continue
}
# 检查 setup-server-git.py 是否已运行
if (-not (Test-GitSetup $repoPath)) {
Write-Host " [警告] 未检测到 setup-server-git.py 的配置。" -ForegroundColor Yellow
Write-Host " 建议先运行: python scripts/server/setup-server-git.py" -ForegroundColor Yellow
$answer = Read-Host " 是否继续删除操作?(y/N)"
if ($answer -ne "y" -and $answer -ne "Y") {
Write-Host " 已跳过 $env 环境的删除操作。" -ForegroundColor DarkGray
# 仍然创建 export 目录
New-ExportTree -RepoPath $repoPath
continue
}
}
# 步骤 1删除排除的文件/目录
Remove-SkipWorktreeItems -RepoPath $repoPath
# 步骤 2创建 export 目录树
New-ExportTree -RepoPath $repoPath
Write-Host "`n [完成] $env 环境初始化完毕。" -ForegroundColor Green
}
Write-Host "`n============================================" -ForegroundColor White
Write-Host " 全部完成。" -ForegroundColor Green
Write-Host ""
Write-Host " 后续步骤:" -ForegroundColor White
Write-Host " 1. 手动创建各环境的 .env 文件(参考 .env.template" -ForegroundColor White
Write-Host " 2. 确认 .env 中的 export 路径指向 repo/export/ 下对应子目录" -ForegroundColor White
Write-Host " 3. 运行 uv sync --all-packages 安装依赖" -ForegroundColor White
Write-Host "============================================" -ForegroundColor White