forked from wangbo/easyai
fix(deploy): 加固 Redis 持久化与旧环境启动配置
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
# 在 Compose 重建 Redis 前,确认现有 /data 已位于当前项目的数据目录。
|
||||
function Assert-RedisPersistence {
|
||||
param([Parameter(Mandatory = $true)][string]$ProjectRoot)
|
||||
|
||||
$null = & docker info 2>&1
|
||||
if ($LASTEXITCODE -ne 0) { throw "Cannot connect to Docker; Redis data location was not checked" }
|
||||
|
||||
$null = & docker container inspect redis 2>&1
|
||||
if ($LASTEXITCODE -ne 0) { return }
|
||||
|
||||
$mount = (& docker inspect --format '{{range .Mounts}}{{if eq .Destination "/data"}}{{.Type}}|{{.Source}}{{end}}{{end}}' redis).Trim()
|
||||
if ($LASTEXITCODE -ne 0 -or -not $mount) {
|
||||
throw "Existing Redis /data is not persisted; migrate AOF/RDB before updating (see README)"
|
||||
}
|
||||
$parts = $mount.Split('|', 2)
|
||||
if ($parts.Count -ne 2 -or $parts[0] -ne 'bind') {
|
||||
throw "Existing Redis /data uses a different storage type; migrate it before updating (see README)"
|
||||
}
|
||||
|
||||
$source = $parts[1]
|
||||
# Docker Desktop 可将 Windows C:\path 显示为 /run/desktop/mnt/host/c/path。
|
||||
$source = $source -replace '^/run/desktop/mnt/host/([A-Za-z])/', '$1:/'
|
||||
$source = $source -replace '^/host_mnt/([A-Za-z])/', '$1:/'
|
||||
$expected = [System.IO.Path]::GetFullPath((Join-Path $ProjectRoot 'data/redis'))
|
||||
$actual = [System.IO.Path]::GetFullPath($source)
|
||||
if (-not [string]::Equals($actual.TrimEnd('\', '/'), $expected.TrimEnd('\', '/'), [StringComparison]::OrdinalIgnoreCase)) {
|
||||
throw "Existing Redis /data uses another directory; migrate it before updating (see README)"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user