tmp deploy
This commit is contained in:
140
scripts/vps_bootstrap.ps1
Normal file
140
scripts/vps_bootstrap.ps1
Normal file
@@ -0,0 +1,140 @@
|
||||
# ============================================================
|
||||
# IAAI scraper -- one-shot installer for Windows Server 2022 (4 vCPU / 4 GB)
|
||||
#
|
||||
# RUN AS ADMINISTRATOR in PowerShell:
|
||||
# Set-ExecutionPolicy -Scope Process Bypass -Force
|
||||
# iwr -useb https://gitea.millionmiles.ru/qananasikq/iaai-parser/raw/branch/main/scripts/vps_bootstrap.ps1 -OutFile $env:TEMP\b.ps1
|
||||
# & $env:TEMP\b.ps1
|
||||
#
|
||||
# .env nado polozhit' v C:\iaai\.env DO zapuska (cherez RDP clipboard / notepad).
|
||||
# ============================================================
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
function Step($m) { Write-Host "`n=== $m ===" -ForegroundColor Cyan }
|
||||
|
||||
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
|
||||
throw "Run as Administrator (Start menu -> PowerShell -> Run as Administrator)"
|
||||
}
|
||||
|
||||
# --- .env presence -------------------------------------------
|
||||
$envSrc = "C:\iaai\.env"
|
||||
if (-not (Test-Path $envSrc)) {
|
||||
Write-Host ""
|
||||
Write-Host "ERROR: $envSrc not found." -ForegroundColor Red
|
||||
Write-Host "Create it via RDP clipboard:" -ForegroundColor Yellow
|
||||
Write-Host " mkdir C:\iaai" -ForegroundColor Yellow
|
||||
Write-Host " notepad C:\iaai\.env # paste contents, save as UTF-8 (no BOM)" -ForegroundColor Yellow
|
||||
Write-Host "Then re-run this script." -ForegroundColor Yellow
|
||||
exit 2
|
||||
}
|
||||
|
||||
# --- 1. WSL2 + Ubuntu 22.04 ----------------------------------
|
||||
Step "WSL state"
|
||||
$wslList = @()
|
||||
try {
|
||||
$raw = wsl --list --quiet 2>$null
|
||||
if ($raw) {
|
||||
$wslList = ($raw -split "`n") | ForEach-Object { ($_ -replace "`0","").Trim() } | Where-Object { $_ }
|
||||
}
|
||||
} catch {}
|
||||
$ubuntu = $wslList | Where-Object { $_ -match "Ubuntu" } | Select-Object -First 1
|
||||
|
||||
if (-not $ubuntu) {
|
||||
Step "Installing WSL2 + Ubuntu-22.04 (REBOOT REQUIRED)"
|
||||
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart | Out-Null
|
||||
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart | Out-Null
|
||||
wsl --set-default-version 2 2>$null | Out-Null
|
||||
wsl --install -d Ubuntu-22.04 --no-launch
|
||||
Write-Host ""
|
||||
Write-Host "REBOOT NOW. After reboot:" -ForegroundColor Yellow
|
||||
Write-Host " 1) Launch 'Ubuntu 22.04' from Start, set username 'iaai' and a password" -ForegroundColor Yellow
|
||||
Write-Host " 2) Re-run this script (it will continue from here)" -ForegroundColor Yellow
|
||||
Read-Host "Press Enter to reboot now (or Ctrl+C to abort)"
|
||||
Restart-Computer -Force
|
||||
exit 0
|
||||
}
|
||||
Write-Host "Ubuntu distro: $ubuntu"
|
||||
|
||||
# --- 2. .wslconfig (limit memory for 4 GB host) --------------
|
||||
$wslConfig = "$env:USERPROFILE\.wslconfig"
|
||||
$wslConfigDesired = "[wsl2]`nmemory=2500MB`nprocessors=3`nswap=1500MB`nlocalhostForwarding=true`n"
|
||||
$existing = if (Test-Path $wslConfig) { Get-Content $wslConfig -Raw } else { "" }
|
||||
if ($existing -ne $wslConfigDesired) {
|
||||
Step "Writing $wslConfig"
|
||||
Set-Content -Path $wslConfig -Value $wslConfigDesired -Encoding ASCII -NoNewline
|
||||
Step "Restarting WSL"
|
||||
wsl --shutdown
|
||||
Start-Sleep -Seconds 5
|
||||
}
|
||||
|
||||
# --- 3. Bootstrap script inside WSL --------------------------
|
||||
$bash = @'
|
||||
set -e
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
if ! sudo -n true 2>/dev/null; then
|
||||
echo "[bootstrap] need passwordless sudo. run inside WSL once:"
|
||||
echo " echo \"$USER ALL=(ALL) NOPASSWD:ALL\" | sudo tee /etc/sudoers.d/99-$USER"
|
||||
exit 5
|
||||
fi
|
||||
|
||||
if ! command -v docker >/dev/null 2>&1; then
|
||||
echo "[bootstrap] installing docker..."
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y ca-certificates curl gnupg git lsb-release
|
||||
sudo install -m 0755 -d /etc/apt/keyrings
|
||||
if [ ! -f /etc/apt/keyrings/docker.gpg ]; then
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||
sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
||||
fi
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
sudo usermod -aG docker "$USER"
|
||||
fi
|
||||
|
||||
if ! sudo service docker status >/dev/null 2>&1; then
|
||||
sudo service docker start
|
||||
sleep 3
|
||||
fi
|
||||
|
||||
if [ ! -d /opt/iaai-parser/.git ]; then
|
||||
sudo mkdir -p /opt/iaai-parser
|
||||
sudo chown -R "$USER:$USER" /opt/iaai-parser
|
||||
git clone https://gitea.millionmiles.ru/qananasikq/iaai-parser.git /opt/iaai-parser
|
||||
else
|
||||
cd /opt/iaai-parser && git fetch --all --prune && git reset --hard origin/main
|
||||
fi
|
||||
|
||||
cd /opt/iaai-parser
|
||||
git log -1 --oneline
|
||||
|
||||
# Copy .env from Windows
|
||||
cp /mnt/c/iaai/.env .env
|
||||
sed -i '1s/^\xEF\xBB\xBF//' .env || true
|
||||
sed -i 's/\r$//' .env || true
|
||||
chmod 600 .env
|
||||
echo "[bootstrap] .env size: $(wc -c < .env) bytes"
|
||||
|
||||
echo "[bootstrap] docker compose build (5-10 min)..."
|
||||
sudo docker compose -f docker-compose.yml -f docker-compose.vps.yml build
|
||||
echo "[bootstrap] docker compose up -d..."
|
||||
sudo docker compose -f docker-compose.yml -f docker-compose.vps.yml up -d
|
||||
sleep 5
|
||||
sudo docker compose -f docker-compose.yml -f docker-compose.vps.yml ps
|
||||
'@
|
||||
|
||||
$tmp = "$env:TEMP\wsl_bootstrap.sh"
|
||||
[System.IO.File]::WriteAllText($tmp, ($bash -replace "`r`n","`n"), [System.Text.UTF8Encoding]::new($false))
|
||||
|
||||
Step "Running bootstrap inside WSL (5-15 min on first run)"
|
||||
$wslPath = (wsl -d $ubuntu -- wslpath -u "$tmp").Trim()
|
||||
wsl -d $ubuntu -- bash -c "cp '$wslPath' ~/bootstrap.sh && chmod +x ~/bootstrap.sh && ~/bootstrap.sh"
|
||||
|
||||
Step "DONE"
|
||||
Write-Host ""
|
||||
Write-Host "Useful commands:" -ForegroundColor Green
|
||||
Write-Host " Status: wsl -d $ubuntu -- bash -c 'cd /opt/iaai-parser && sudo docker compose -f docker-compose.yml -f docker-compose.vps.yml ps'"
|
||||
Write-Host " Logs: wsl -d $ubuntu -- bash -c 'cd /opt/iaai-parser && sudo docker compose -f docker-compose.yml -f docker-compose.vps.yml logs -f --tail=80 worker'"
|
||||
Write-Host " Restart: wsl -d $ubuntu -- bash -c 'cd /opt/iaai-parser && sudo docker compose -f docker-compose.yml -f docker-compose.vps.yml restart'"
|
||||
Write-Host " Update: wsl -d $ubuntu -- bash -c 'cd /opt/iaai-parser && git pull && sudo docker compose -f docker-compose.yml -f docker-compose.vps.yml up -d --build'"
|
||||
Reference in New Issue
Block a user