107 lines
3.5 KiB
PowerShell
107 lines
3.5 KiB
PowerShell
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
|
|
$projectWindowsPath = $PSScriptRoot
|
|
$wslProjectPath = (wsl wslpath $projectWindowsPath).Trim()
|
|
$envFilePath = Join-Path $PSScriptRoot '.env'
|
|
|
|
function Get-EnvValue {
|
|
param(
|
|
[string]$FilePath,
|
|
[string]$Key
|
|
)
|
|
|
|
if (-not (Test-Path $FilePath)) {
|
|
return $null
|
|
}
|
|
|
|
$line = Get-Content $FilePath | Where-Object { $_ -match "^$Key=" } | Select-Object -First 1
|
|
if (-not $line) {
|
|
return $null
|
|
}
|
|
|
|
return ($line -split '=', 2)[1].Trim()
|
|
}
|
|
|
|
function Test-TcpPortFast {
|
|
param(
|
|
[string]$HostName,
|
|
[int]$Port,
|
|
[int]$TimeoutMs = 3000
|
|
)
|
|
|
|
$client = New-Object System.Net.Sockets.TcpClient
|
|
try {
|
|
$asyncResult = $client.BeginConnect($HostName, $Port, $null, $null)
|
|
if (-not $asyncResult.AsyncWaitHandle.WaitOne($TimeoutMs, $false)) {
|
|
$client.Close()
|
|
return $false
|
|
}
|
|
|
|
$client.EndConnect($asyncResult)
|
|
$client.Close()
|
|
return $true
|
|
}
|
|
catch {
|
|
$client.Close()
|
|
return $false
|
|
}
|
|
}
|
|
|
|
Write-Host "============================================" -ForegroundColor Cyan
|
|
Write-Host " HM ITAM WSL Docker Start" -ForegroundColor Cyan
|
|
Write-Host "============================================" -ForegroundColor Cyan
|
|
Write-Host ""
|
|
|
|
Write-Host "[INFO] Checking WSL..."
|
|
wsl -l -v
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Host "[ERROR] WSL is not available." -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
|
|
Write-Host "[INFO] Checking Docker in WSL..."
|
|
wsl sh -lc "docker --version"
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Host "[ERROR] Docker is not available inside WSL." -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
|
|
$dbHost = Get-EnvValue -FilePath $envFilePath -Key 'DB_HOST'
|
|
$dbPort = Get-EnvValue -FilePath $envFilePath -Key 'DB_PORT'
|
|
|
|
if (-not $dbPort) {
|
|
$dbPort = '3306'
|
|
}
|
|
|
|
if (-not $dbHost) {
|
|
Write-Host "[WARN] .env is missing DB_HOST. Containers will still start, but backend DB calls will fail until DB settings are fixed." -ForegroundColor Yellow
|
|
}
|
|
|
|
if ($dbHost) {
|
|
Write-Host "[INFO] Checking external DB reachability..."
|
|
$dbReachable = Test-TcpPortFast -HostName $dbHost -Port ([int]$dbPort)
|
|
if (-not $dbReachable) {
|
|
Write-Host "[WARN] External DB is unreachable: $dbHost`:$dbPort" -ForegroundColor Yellow
|
|
Write-Host "[HINT] Containers will still start. Check VPN/private network connection, firewall rules, DB host/port in .env, or whether the DB server is running." -ForegroundColor Yellow
|
|
}
|
|
}
|
|
|
|
Write-Host "[INFO] Starting ITAM containers in WSL..."
|
|
wsl sh -lc "cd '$wslProjectPath' && docker compose up --build -d --remove-orphans"
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Host "[WARN] Build-based startup failed. Retrying with cached images/containers..." -ForegroundColor Yellow
|
|
wsl sh -lc "cd '$wslProjectPath' && docker compose up -d --remove-orphans"
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Host "[ERROR] Failed to start containers." -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "============================================" -ForegroundColor Green
|
|
Write-Host " [OK] WSL Docker stack started." -ForegroundColor Green
|
|
Write-Host " [INFO] Frontend: http://localhost:8080"
|
|
Write-Host " [INFO] Backend : http://localhost:3000/api/assets/master"
|
|
Write-Host "============================================" -ForegroundColor Green
|
|
|
|
Start-Process "http://localhost:8080" |