38 lines
1.3 KiB
PowerShell
38 lines
1.3 KiB
PowerShell
param(
|
|
[switch]$Force
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
$projectRoot = Split-Path -Parent $PSScriptRoot
|
|
$templatePath = Join-Path $projectRoot ".env.example"
|
|
$targetPath = Join-Path $projectRoot ".env"
|
|
|
|
if ((Test-Path -LiteralPath $targetPath) -and -not $Force) {
|
|
Write-Host ".env already exists. Use -Force to regenerate it."
|
|
exit 0
|
|
}
|
|
|
|
function New-SecureHex([int]$byteCount) {
|
|
$bytes = New-Object byte[] $byteCount
|
|
$generator = [System.Security.Cryptography.RandomNumberGenerator]::Create()
|
|
try {
|
|
$generator.GetBytes($bytes)
|
|
}
|
|
finally {
|
|
$generator.Dispose()
|
|
}
|
|
return -join ($bytes | ForEach-Object { $_.ToString("x2") })
|
|
}
|
|
|
|
$postgresPassword = New-SecureHex 24
|
|
$redisPassword = New-SecureHex 24
|
|
$content = Get-Content -Raw -Encoding UTF8 -LiteralPath $templatePath
|
|
$content = $content.Replace("__AUTO_POSTGRES_PASSWORD__", $postgresPassword)
|
|
$content = $content.Replace("__AUTO_REDIS_PASSWORD__", $redisPassword)
|
|
|
|
$utf8WithoutBom = New-Object System.Text.UTF8Encoding($false)
|
|
[System.IO.File]::WriteAllText($targetPath, $content, $utf8WithoutBom)
|
|
|
|
Write-Host "Bootstrap complete: PostgreSQL and Redis passwords were generated securely."
|
|
Write-Host "Configure MinIO, OCR, AI models, GPU, Langfuse and Sentry in System Settings."
|