You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.9 KiB
47 lines
1.9 KiB
# Bootstrap MySQL+Redis in WSL (no Docker Desktop)
|
|
# Usage: npm run dev:infra:setup
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
. (Join-Path $PSScriptRoot "lib.ps1")
|
|
. (Join-Path $PSScriptRoot "ensure-infra.ps1")
|
|
|
|
$root = $script:DevConfig.ProjectRoot
|
|
$wslPath = Get-WslInfraScriptPath -Root $root
|
|
$fixMysqlPath = (Get-WslInfraScriptPath -Root $root) -replace 'wsl-infra\.sh$', 'fix-mysql-auth.sh'
|
|
$distro = Ensure-DevWslDistro
|
|
|
|
Write-DevLog "=== wsl infra bootstrap (distro: $distro) ===" "Info"
|
|
|
|
$checkCode = Invoke-DevWsl -BashCommand "command -v mysql"
|
|
if ($checkCode -ne 0) {
|
|
Write-DevLog "first-time install mysql+redis in WSL (may prompt sudo password)..." "Warn"
|
|
$code = Invoke-DevWsl -BashCommand "export MYSQL_HOST_PORT=3307 MYSQL_ROOT_PASSWORD=changeme; bash '$wslPath' install"
|
|
} else {
|
|
$code = Invoke-DevWsl -BashCommand "export MYSQL_HOST_PORT=3307 MYSQL_ROOT_PASSWORD=changeme; bash '$wslPath' start"
|
|
}
|
|
|
|
if ($code -ne 0) {
|
|
throw "wsl infra bootstrap failed (distro: $distro)"
|
|
}
|
|
|
|
Invoke-DevWsl -BashCommand "sudo bash '$fixMysqlPath'" | Out-Null
|
|
|
|
$ports = Test-NativeInfraPorts -Root $root
|
|
if (-not $ports.Ok) {
|
|
throw "wsl infra ports not reachable from Windows (host=$($ports.Host))"
|
|
}
|
|
|
|
$envFile = Join-Path $root ".env"
|
|
if (Test-Path $envFile) {
|
|
$hostName = $ports.Host
|
|
$content = Get-Content $envFile -Raw -Encoding UTF8
|
|
$content = $content -replace '(?m)^DATABASE_URL=.*$', "DATABASE_URL=mysql://root:changeme@${hostName}:3307/chajia"
|
|
$content = $content -replace '(?m)^REDIS_URL=.*$', "REDIS_URL=redis://${hostName}:6379"
|
|
[System.IO.File]::WriteAllText($envFile, $content.TrimEnd() + "`n", [System.Text.UTF8Encoding]::new($false))
|
|
Write-DevLog "patched .env infra host -> $hostName" "Ok"
|
|
}
|
|
|
|
Apply-DevInfraEnv -Root $root
|
|
Write-DevLog "wsl mysql:3307 + redis:6379 ready (host=$($ports.Host))" "Ok"
|
|
Write-DevLog "DEV_INFRA_MODE=native in .env, then: npm run dev:start" "Ok"
|