initializare
This commit is contained in:
282
deployment/windows/scripts/deploy.ps1
Normal file
282
deployment/windows/scripts/deploy.ps1
Normal file
@@ -0,0 +1,282 @@
|
||||
#Requires -RunAsAdministrator
|
||||
<#
|
||||
.SYNOPSIS
|
||||
BTGO Telegram Bot - Complete Deployment Script
|
||||
.DESCRIPTION
|
||||
Deployment complet pentru bot-ul Telegram pe Windows VM
|
||||
Verifica dependente, instaleaza requirements, configureaza serviciul
|
||||
.NOTES
|
||||
Rulare: Right-click → "Run with PowerShell" (ca Administrator)
|
||||
#>
|
||||
|
||||
# Error handling
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
# ============================================================================
|
||||
# FUNCTIONS
|
||||
# ============================================================================
|
||||
|
||||
function Write-ColorOutput {
|
||||
param(
|
||||
[string]$Message,
|
||||
[string]$Color = "White",
|
||||
[string]$Prefix = ""
|
||||
)
|
||||
|
||||
$prefixColor = switch ($Prefix) {
|
||||
"[OK]" { "Green" }
|
||||
"[INFO]" { "Cyan" }
|
||||
"[EROARE]" { "Red" }
|
||||
"[AVERTIZARE]" { "Yellow" }
|
||||
default { "White" }
|
||||
}
|
||||
|
||||
if ($Prefix) {
|
||||
Write-Host $Prefix -ForegroundColor $prefixColor -NoNewline
|
||||
Write-Host " $Message" -ForegroundColor $Color
|
||||
} else {
|
||||
Write-Host $Message -ForegroundColor $Color
|
||||
}
|
||||
}
|
||||
|
||||
function Write-Separator {
|
||||
param([string]$Title = "")
|
||||
Write-Host ""
|
||||
Write-Host "=" * 80 -ForegroundColor Cyan
|
||||
if ($Title) {
|
||||
Write-Host $Title -ForegroundColor Yellow
|
||||
Write-Host "=" * 80 -ForegroundColor Cyan
|
||||
}
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# CONFIGURATION
|
||||
# ============================================================================
|
||||
|
||||
$ScriptDir = Split-Path -Parent $PSCommandPath
|
||||
$ProjectDir = Resolve-Path (Join-Path $ScriptDir "..\..\..") | Select-Object -ExpandProperty Path
|
||||
$ServiceName = "BTGOTelegramBot"
|
||||
|
||||
Write-Separator "BTGO TELEGRAM BOT - DEPLOYMENT COMPLET"
|
||||
Write-Host ""
|
||||
Write-ColorOutput "Director proiect: $ProjectDir" -Prefix "[INFO]"
|
||||
Write-Host ""
|
||||
|
||||
# ============================================================================
|
||||
# [1/6] VERIFICARE PYTHON
|
||||
# ============================================================================
|
||||
|
||||
Write-Separator "[1/6] VERIFICARE PYTHON"
|
||||
|
||||
try {
|
||||
$pythonVersion = python --version 2>&1
|
||||
if ($LASTEXITCODE -ne 0) { throw }
|
||||
Write-ColorOutput "Python gasit: $pythonVersion" -Prefix "[OK]"
|
||||
} catch {
|
||||
Write-ColorOutput "Python nu este instalat sau nu este in PATH!" -Prefix "[EROARE]"
|
||||
Write-Host ""
|
||||
Write-Host "Instaleaza Python 3.11+ de la: https://www.python.org/downloads/"
|
||||
Write-Host "Asigura-te ca bifezi 'Add Python to PATH' la instalare"
|
||||
Read-Host "`nApasa Enter pentru a inchide"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# [2/6] VERIFICARE FISIERE PROIECT
|
||||
# ============================================================================
|
||||
|
||||
Write-Separator "[2/6] VERIFICARE FISIERE PROIECT"
|
||||
|
||||
$criticalFiles = @(
|
||||
"telegram_trigger_bot.py",
|
||||
"btgo_scraper.py",
|
||||
"requirements.txt"
|
||||
)
|
||||
|
||||
$filesOk = $true
|
||||
foreach ($file in $criticalFiles) {
|
||||
$filePath = Join-Path $ProjectDir $file
|
||||
if (Test-Path $filePath) {
|
||||
Write-ColorOutput "$file - OK" -Prefix "[OK]"
|
||||
} else {
|
||||
Write-ColorOutput "$file - LIPSESTE!" -Prefix "[EROARE]"
|
||||
$filesOk = $false
|
||||
}
|
||||
}
|
||||
|
||||
if (-not $filesOk) {
|
||||
Write-ColorOutput "Fisiere critice lipsesc din proiect!" -Prefix "[EROARE]"
|
||||
Read-Host "`nApasa Enter pentru a inchide"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# [3/6] VERIFICARE/CREARE .env
|
||||
# ============================================================================
|
||||
|
||||
Write-Separator "[3/6] VERIFICARE CONFIGURARE (.env)"
|
||||
|
||||
$envFile = Join-Path $ProjectDir ".env"
|
||||
$envExample = Join-Path $ProjectDir ".env.example"
|
||||
|
||||
if (-not (Test-Path $envFile)) {
|
||||
if (Test-Path $envExample) {
|
||||
Write-ColorOutput ".env nu exista. Copiem .env.example..." -Prefix "[INFO]"
|
||||
Copy-Item $envExample $envFile
|
||||
Write-ColorOutput ".env creat din .env.example" -Prefix "[OK]"
|
||||
Write-Host ""
|
||||
Write-ColorOutput "IMPORTANT: Editeaza .env si configureaza:" -Prefix "[AVERTIZARE]"
|
||||
Write-Host " - TELEGRAM_BOT_TOKEN"
|
||||
Write-Host " - TELEGRAM_ALLOWED_USER_IDS"
|
||||
Write-Host " - TELEGRAM_CHAT_ID (optional)"
|
||||
Write-Host " - LOGIN_ID si PAROLA pentru BTGO"
|
||||
Write-Host ""
|
||||
Read-Host "Apasa Enter dupa ce ai configurat .env"
|
||||
} else {
|
||||
Write-ColorOutput ".env si .env.example lipsesc!" -Prefix "[EROARE]"
|
||||
Write-Host "Creaza manual .env cu variabilele necesare"
|
||||
Read-Host "`nApasa Enter pentru a inchide"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# Verifică variabile critice
|
||||
$envContent = Get-Content $envFile -Raw
|
||||
if ($envContent -notmatch "TELEGRAM_BOT_TOKEN=(?!your_).+") {
|
||||
Write-ColorOutput "TELEGRAM_BOT_TOKEN nu este configurat in .env!" -Prefix "[EROARE]"
|
||||
Write-Host "Editeaza .env si adauga token-ul de la @BotFather"
|
||||
Read-Host "`nApasa Enter pentru a inchide"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if ($envContent -notmatch "LOGIN_ID=(?!your_).+") {
|
||||
Write-ColorOutput "LOGIN_ID nu este configurat in .env!" -Prefix "[AVERTIZARE]"
|
||||
Write-Host "Scraper-ul nu va functiona fara credentiale BTGO"
|
||||
}
|
||||
|
||||
Write-ColorOutput ".env exista si pare configurat" -Prefix "[OK]"
|
||||
|
||||
# ============================================================================
|
||||
# [4/6] INSTALARE DEPENDENTE PYTHON
|
||||
# ============================================================================
|
||||
|
||||
Write-Separator "[4/6] INSTALARE DEPENDENTE PYTHON"
|
||||
|
||||
try {
|
||||
Write-ColorOutput "Upgrade pip..." -Prefix "[INFO]"
|
||||
python -m pip install --upgrade pip --quiet
|
||||
|
||||
Write-ColorOutput "Instalare requirements.txt..." -Prefix "[INFO]"
|
||||
$requirementsFile = Join-Path $ProjectDir "requirements.txt"
|
||||
python -m pip install -r $requirementsFile
|
||||
|
||||
if ($LASTEXITCODE -ne 0) { throw }
|
||||
Write-ColorOutput "Dependente instalate cu succes" -Prefix "[OK]"
|
||||
} catch {
|
||||
Write-ColorOutput "Instalarea dependentelor a esuat!" -Prefix "[EROARE]"
|
||||
Read-Host "`nApasa Enter pentru a inchide"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# [5/6] INSTALARE PLAYWRIGHT BROWSERS (GLOBAL)
|
||||
# ============================================================================
|
||||
|
||||
Write-Separator "[5/6] INSTALARE PLAYWRIGHT BROWSERS (GLOBAL)"
|
||||
|
||||
# Setează locație globală pentru browsere (accesibilă pentru serviciul SYSTEM)
|
||||
$globalBrowserPath = "C:\playwright-browsers"
|
||||
|
||||
Write-ColorOutput "Configurare locatie globala browsere: $globalBrowserPath" -Prefix "[INFO]"
|
||||
|
||||
# Creează directorul dacă nu există
|
||||
if (-not (Test-Path $globalBrowserPath)) {
|
||||
New-Item -ItemType Directory -Path $globalBrowserPath -Force | Out-Null
|
||||
Write-ColorOutput "Director creat: $globalBrowserPath" -Prefix "[OK]"
|
||||
}
|
||||
|
||||
# Acordă permisiuni SYSTEM la director
|
||||
Write-ColorOutput "Acordare permisiuni SYSTEM..." -Prefix "[INFO]"
|
||||
icacls $globalBrowserPath /grant "SYSTEM:(OI)(CI)F" /T 2>&1 | Out-Null
|
||||
|
||||
# Setează environment variable la nivel de sistem
|
||||
[System.Environment]::SetEnvironmentVariable("PLAYWRIGHT_BROWSERS_PATH", $globalBrowserPath, [System.EnvironmentVariableTarget]::Machine)
|
||||
$env:PLAYWRIGHT_BROWSERS_PATH = $globalBrowserPath
|
||||
Write-ColorOutput "Environment variable setata: PLAYWRIGHT_BROWSERS_PATH" -Prefix "[OK]"
|
||||
|
||||
# Instalează browserele
|
||||
try {
|
||||
Write-ColorOutput "Instalare browsere Playwright in $globalBrowserPath..." -Prefix "[INFO]"
|
||||
Write-Host "Aceasta poate dura 1-2 minute..." -ForegroundColor Gray
|
||||
python -m playwright install chromium
|
||||
|
||||
if ($LASTEXITCODE -ne 0) { throw }
|
||||
Write-ColorOutput "Playwright browsere instalate cu succes!" -Prefix "[OK]"
|
||||
} catch {
|
||||
Write-ColorOutput "Instalarea browserelor Playwright a esuat!" -Prefix "[AVERTIZARE]"
|
||||
Write-Host "Scraper-ul poate sa nu functioneze corect"
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# CREARE DIRECTOARE NECESARE
|
||||
# ============================================================================
|
||||
|
||||
$dataDir = Join-Path $ProjectDir "data"
|
||||
$logsDir = Join-Path $ProjectDir "logs"
|
||||
|
||||
if (-not (Test-Path $dataDir)) { New-Item -ItemType Directory -Path $dataDir -Force | Out-Null }
|
||||
if (-not (Test-Path $logsDir)) { New-Item -ItemType Directory -Path $logsDir -Force | Out-Null }
|
||||
|
||||
Write-ColorOutput "Directoare create: data, logs" -Prefix "[OK]"
|
||||
|
||||
# ============================================================================
|
||||
# [6/6] INSTALARE/RESTART SERVICIU
|
||||
# ============================================================================
|
||||
|
||||
Write-Separator "[6/6] INSTALARE SERVICIU WINDOWS"
|
||||
|
||||
# Verifică dacă serviciul există
|
||||
$service = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue
|
||||
|
||||
if ($service) {
|
||||
Write-ColorOutput "Serviciul exista deja. Reinstalam..." -Prefix "[INFO]"
|
||||
& "$ScriptDir\uninstall_service.ps1"
|
||||
Start-Sleep -Seconds 3
|
||||
}
|
||||
|
||||
Write-ColorOutput "Rulare install_service.ps1..." -Prefix "[INFO]"
|
||||
& "$ScriptDir\install_service.ps1"
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-ColorOutput "Instalarea serviciului a esuat!" -Prefix "[EROARE]"
|
||||
Read-Host "`nApasa Enter pentru a inchide"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# FINALIZARE
|
||||
# ============================================================================
|
||||
|
||||
Write-Separator "[SUCCES] DEPLOYMENT FINALIZAT!"
|
||||
Write-Host ""
|
||||
Write-Host "Serviciul BTGO Telegram Bot este acum instalat si ruleaza." -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host "Comenzi utile:" -ForegroundColor Yellow
|
||||
Write-Host " - Status: Get-Service $ServiceName"
|
||||
Write-Host " - Logs: Get-Content '$logsDir\telegram_bot_stdout.log' -Tail 20"
|
||||
Write-Host " - Opreste: Stop-Service $ServiceName"
|
||||
Write-Host " - Porneste: Start-Service $ServiceName"
|
||||
Write-Host " - Restart: Restart-Service $ServiceName"
|
||||
Write-Host " - Dezinstala: .\uninstall_service.ps1"
|
||||
Write-Host ""
|
||||
Write-Host "Teste bot Telegram:" -ForegroundColor Yellow
|
||||
Write-Host " 1. Deschide Telegram si cauta bot-ul tau"
|
||||
Write-Host " 2. Trimite /start pentru a vedea comenzile"
|
||||
Write-Host " 3. Trimite /scrape pentru a testa scraper-ul"
|
||||
Write-Host ""
|
||||
Write-Host "Verificare logs in timp real:" -ForegroundColor Yellow
|
||||
Write-Host " Get-Content '$logsDir\telegram_bot_stdout.log' -Wait"
|
||||
Write-Host ""
|
||||
Write-Separator
|
||||
|
||||
Read-Host "`nApasa Enter pentru a inchide"
|
||||
Reference in New Issue
Block a user