deploy: VPS bootstrap (WSL2+Docker) + lightweight compose overlay for 4GB RAM + harden
This commit is contained in:
121
scripts/vps_bootstrap.ps1
Normal file
121
scripts/vps_bootstrap.ps1
Normal file
@@ -0,0 +1,121 @@
|
||||
# ============================================================
|
||||
# IAAI scraper — bootstrap для Windows 10 VPS (4 vCPU / 4 GB RAM)
|
||||
# Запускать в PowerShell ОТ ИМЕНИ АДМИНИСТРАТОРА.
|
||||
#
|
||||
# Использование (через RDP):
|
||||
# 1) Откройте PowerShell как администратор
|
||||
# 2) Set-ExecutionPolicy -Scope Process Bypass -Force
|
||||
# 3) iwr -useb https://gitea.millionmiles.ru/qananasikq/iaai-parser/raw/branch/main/scripts/vps_bootstrap.ps1 | iex
|
||||
# (или скопируйте файл вручную и: .\vps_bootstrap.ps1)
|
||||
#
|
||||
# Скрипт:
|
||||
# - Включает WSL2 + ставит Ubuntu 22.04 (если ещё нет)
|
||||
# - Внутри Ubuntu ставит Docker Engine + Compose plugin + git
|
||||
# - Клонирует репо в /opt/iaai-parser
|
||||
# - Поднимает стек через docker-compose.vps.yml
|
||||
# ============================================================
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
function Step($msg) { Write-Host "`n=== $msg ===" -ForegroundColor Cyan }
|
||||
|
||||
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
|
||||
throw "Run this script as Administrator (правый клик по PowerShell → 'Запуск от имени администратора')"
|
||||
}
|
||||
|
||||
# --- 1. WSL2 + Ubuntu ----------------------------------------
|
||||
Step "Checking WSL"
|
||||
$wslList = wsl --list --quiet 2>$null
|
||||
$ubuntu = $null
|
||||
if ($wslList) {
|
||||
$ubuntu = $wslList | Where-Object { $_ -match "Ubuntu" } | Select-Object -First 1
|
||||
}
|
||||
|
||||
if (-not $ubuntu) {
|
||||
Step "Installing WSL2 + Ubuntu-22.04 (this will take a few minutes; reboot may be required)"
|
||||
wsl --install -d Ubuntu-22.04 --no-launch
|
||||
Write-Host "WSL installation triggered. If a reboot is required, reboot, then re-run this script." -ForegroundColor Yellow
|
||||
Write-Host "After Ubuntu first-launches, set username 'iaai' and any password." -ForegroundColor Yellow
|
||||
Write-Host "Then re-run: .\vps_bootstrap.ps1" -ForegroundColor Yellow
|
||||
exit 0
|
||||
}
|
||||
|
||||
Write-Host "WSL distro found: $ubuntu"
|
||||
|
||||
# Чтобы WSL2 не сожрал всю RAM, ограничим до 2.5 GB
|
||||
$wslConfig = "$env:USERPROFILE\.wslconfig"
|
||||
if (-not (Test-Path $wslConfig)) {
|
||||
Step "Writing $wslConfig (memory=2500MB, processors=3, swap=1500MB)"
|
||||
@"
|
||||
[wsl2]
|
||||
memory=2500MB
|
||||
processors=3
|
||||
swap=1500MB
|
||||
localhostForwarding=true
|
||||
"@ | Out-File -FilePath $wslConfig -Encoding ASCII
|
||||
Write-Host "Restarting WSL to apply config..."
|
||||
wsl --shutdown
|
||||
Start-Sleep -Seconds 5
|
||||
}
|
||||
|
||||
# --- 2. Внутри WSL: docker + git + clone + up ----------------
|
||||
Step "Bootstrapping Ubuntu (docker engine, git, clone)"
|
||||
|
||||
$bash = @'
|
||||
set -euo pipefail
|
||||
|
||||
if ! command -v docker >/dev/null 2>&1; then
|
||||
echo "[bootstrap] installing docker engine + compose plugin"
|
||||
sudo -n apt-get update -y
|
||||
sudo -n apt-get install -y ca-certificates curl gnupg git
|
||||
sudo -n install -m 0755 -d /etc/apt/keyrings
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo -n gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||
sudo -n chmod a+r /etc/apt/keyrings/docker.gpg
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo -n tee /etc/apt/sources.list.d/docker.list >/dev/null
|
||||
sudo -n apt-get update -y
|
||||
sudo -n DEBIAN_FRONTEND=noninteractive apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
sudo -n usermod -aG docker "$USER"
|
||||
sudo -n service docker start || true
|
||||
fi
|
||||
|
||||
# WSL2 systemd workaround: убедимся что dockerd запущен
|
||||
if ! sudo -n service docker status >/dev/null 2>&1; then
|
||||
sudo -n service docker start
|
||||
fi
|
||||
|
||||
if [ ! -d /opt/iaai-parser/.git ]; then
|
||||
sudo -n mkdir -p /opt/iaai-parser
|
||||
sudo -n 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
|
||||
|
||||
if [ ! -f .env ]; then
|
||||
echo "[bootstrap] WARNING: .env missing — copy your .env to /opt/iaai-parser/.env, then re-run 'docker compose -f docker-compose.yml -f docker-compose.vps.yml up -d --build'"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "[bootstrap] docker compose build + up (vps overlay)"
|
||||
sudo -n docker compose -f docker-compose.yml -f docker-compose.vps.yml build
|
||||
sudo -n docker compose -f docker-compose.yml -f docker-compose.vps.yml up -d
|
||||
sleep 5
|
||||
sudo -n docker compose -f docker-compose.yml -f docker-compose.vps.yml ps
|
||||
'@
|
||||
|
||||
# Заворачиваем в одну строку для wsl
|
||||
$tmpScript = "$env:TEMP\wsl_bootstrap.sh"
|
||||
$bash | Set-Content -Path $tmpScript -Encoding ASCII -NoNewline
|
||||
|
||||
# Копируем в WSL и запускаем
|
||||
wsl -d $ubuntu -- bash -c "cp /mnt/c/Users/$env:USERNAME/AppData/Local/Temp/wsl_bootstrap.sh ~/bootstrap.sh && chmod +x ~/bootstrap.sh && ~/bootstrap.sh"
|
||||
|
||||
Step "Done"
|
||||
Write-Host "Дальше:"
|
||||
Write-Host " 1) Если выведено 'WARNING: .env missing' — создайте /opt/iaai-parser/.env (см. README), затем:"
|
||||
Write-Host " wsl -d Ubuntu-22.04 -- bash -c 'cd /opt/iaai-parser && sudo docker compose -f docker-compose.yml -f docker-compose.vps.yml up -d --build'"
|
||||
Write-Host " 2) Логи: wsl -d Ubuntu-22.04 -- bash -c 'cd /opt/iaai-parser && sudo docker compose -f docker-compose.yml -f docker-compose.vps.yml logs -f --tail=80'"
|
||||
Write-Host " 3) Статус: wsl -d Ubuntu-22.04 -- bash -c 'cd /opt/iaai-parser && sudo docker compose -f docker-compose.yml -f docker-compose.vps.yml ps'"
|
||||
Reference in New Issue
Block a user