webmoney/deploy.ps1

220 lines
7.1 KiB
PowerShell

# =============================================================================
# WEBMoney - Script de Deploy Unificado
# =============================================================================
# Este script faz deploy do frontend, backend ou ambos para o servidor
#
# Uso:
# .\deploy.ps1 # Deploy de ambos (frontend + backend)
# .\deploy.ps1 -Target frontend # Apenas frontend
# .\deploy.ps1 -Target backend # Apenas backend
# .\deploy.ps1 -Target both # Ambos (padrao)
#
# Requer: Node.js, npm, PuTTY (pscp, plink) instalados no PATH
# =============================================================================
param(
[ValidateSet('frontend', 'backend', 'both')]
[string]$Target = 'both'
)
$ErrorActionPreference = "Stop"
# Configuracoes
$SERVER_USER = "root"
$SERVER_HOST = "213.165.93.60"
$SERVER_PASS = "Master9354"
$PROJECT_ROOT = $PSScriptRoot
# Paths
$FRONTEND_LOCAL = "$PROJECT_ROOT\frontend"
$FRONTEND_DIST = "$FRONTEND_LOCAL\dist"
$FRONTEND_REMOTE = "/var/www/webmoney/frontend/dist"
$BACKEND_LOCAL = "$PROJECT_ROOT\backend"
$BACKEND_REMOTE = "/var/www/webmoney/backend"
# Cores
function Write-Color {
param([string]$Text, [string]$Color = "White")
Write-Host $Text -ForegroundColor $Color
}
function Write-Header {
param([string]$Text)
Write-Host ""
Write-Color "========================================" "Cyan"
Write-Color " $Text" "Cyan"
Write-Color "========================================" "Cyan"
Write-Host ""
}
function Write-Step {
param([string]$Step, [string]$Text)
Write-Color "[$Step] $Text" "Yellow"
}
function Write-OK {
param([string]$Text)
Write-Color "[OK] $Text" "Green"
}
function Write-Fail {
param([string]$Text)
Write-Color "[ERRO] $Text" "Red"
}
# =============================================================================
# DEPLOY FRONTEND
# =============================================================================
function Deploy-Frontend {
Write-Header "DEPLOY FRONTEND"
# 1. Build
Write-Step "1/4" "Fazendo build do frontend..."
Set-Location $FRONTEND_LOCAL
if (Test-Path $FRONTEND_DIST) {
Remove-Item -Recurse -Force $FRONTEND_DIST
}
npm run build
if (-not (Test-Path $FRONTEND_DIST)) {
Write-Fail "Build falhou - pasta dist nao encontrada"
exit 1
}
Write-OK "Build concluido"
Write-Host ""
# 2. Limpar diretorio remoto
Write-Step "2/4" "Limpando diretorio remoto..."
plink -batch -pw $SERVER_PASS "$SERVER_USER@$SERVER_HOST" "rm -rf $FRONTEND_REMOTE/*"
Write-OK "Diretorio limpo"
Write-Host ""
# 3. Enviar arquivos
Write-Step "3/4" "Enviando arquivos..."
pscp -r -batch -pw $SERVER_PASS "$FRONTEND_DIST\*" "${SERVER_USER}@${SERVER_HOST}:${FRONTEND_REMOTE}/"
Write-OK "Arquivos enviados"
Write-Host ""
# 4. Verificar
Write-Step "4/4" "Verificando deploy..."
$result = plink -batch -pw $SERVER_PASS "$SERVER_USER@$SERVER_HOST" "ls $FRONTEND_REMOTE/index.html 2>/dev/null"
if (-not $result) {
Write-Fail "index.html nao encontrado"
exit 1
}
Write-OK "Frontend deployado com sucesso"
Write-Host ""
Set-Location $PROJECT_ROOT
}
# =============================================================================
# DEPLOY BACKEND
# =============================================================================
function Deploy-Backend {
Write-Header "DEPLOY BACKEND"
# 1. Enviar pastas
Write-Step "1/5" "Enviando pastas do backend..."
$folders = @("app", "bootstrap", "config", "database", "public", "resources", "routes")
foreach ($folder in $folders) {
$folderPath = "$BACKEND_LOCAL\$folder"
if (Test-Path $folderPath) {
Write-Host " -> $folder"
pscp -r -batch -pw $SERVER_PASS "$folderPath" "${SERVER_USER}@${SERVER_HOST}:${BACKEND_REMOTE}/"
}
}
Write-OK "Pastas enviadas"
Write-Host ""
# 2. Enviar arquivos
Write-Step "2/5" "Enviando arquivos..."
$files = @("artisan", "composer.json", "composer.lock")
foreach ($file in $files) {
$filePath = "$BACKEND_LOCAL\$file"
if (Test-Path $filePath) {
Write-Host " -> $file"
pscp -batch -pw $SERVER_PASS "$filePath" "${SERVER_USER}@${SERVER_HOST}:${BACKEND_REMOTE}/"
}
}
Write-OK "Arquivos enviados"
Write-Host ""
# 3. Composer install
Write-Step "3/5" "Instalando dependencias..."
plink -batch -pw $SERVER_PASS "$SERVER_USER@$SERVER_HOST" "cd $BACKEND_REMOTE && composer install --no-dev --optimize-autoloader 2>&1 | tail -3"
Write-OK "Dependencias instaladas"
Write-Host ""
# 4. Migracoes e cache
Write-Step "4/5" "Executando migracoes e otimizacoes..."
plink -batch -pw $SERVER_PASS "$SERVER_USER@$SERVER_HOST" "cd $BACKEND_REMOTE && php artisan migrate --force && php artisan optimize:clear && php artisan config:cache && php artisan route:cache && php artisan view:cache"
Write-OK "Migracoes e caches OK"
Write-Host ""
# 5. Permissoes e PHP-FPM
Write-Step "5/5" "Ajustando permissoes e reiniciando PHP-FPM..."
plink -batch -pw $SERVER_PASS "$SERVER_USER@$SERVER_HOST" "chown -R www-data:www-data $BACKEND_REMOTE/storage $BACKEND_REMOTE/bootstrap/cache && chmod -R 775 $BACKEND_REMOTE/storage $BACKEND_REMOTE/bootstrap/cache && systemctl restart php8.4-fpm"
Write-OK "Backend deployado com sucesso"
Write-Host ""
}
# =============================================================================
# REINICIAR NGINX (sempre ao final)
# =============================================================================
function Restart-Nginx {
Write-Step "FINAL" "Reiniciando Nginx para limpar cache..."
plink -batch -pw $SERVER_PASS "$SERVER_USER@$SERVER_HOST" "systemctl restart nginx"
Write-OK "Nginx reiniciado"
Write-Host ""
}
# =============================================================================
# MAIN
# =============================================================================
Write-Host ""
Write-Color "========================================" "Magenta"
Write-Color " WEBMoney - Deploy Unificado " "Magenta"
Write-Color " Target: $Target " "Magenta"
Write-Color "========================================" "Magenta"
Write-Host ""
$startTime = Get-Date
# Executar deploy conforme target
switch ($Target) {
'frontend' {
Deploy-Frontend
}
'backend' {
Deploy-Backend
}
'both' {
Deploy-Backend
Deploy-Frontend
}
}
# Sempre reiniciar Nginx ao final
Restart-Nginx
$endTime = Get-Date
$duration = $endTime - $startTime
Write-Color "========================================" "Green"
Write-Color " DEPLOY CONCLUIDO COM SUCESSO! " "Green"
Write-Color "========================================" "Green"
Write-Host ""
Write-Host " Target: $Target"
Write-Host " Duracao: $($duration.TotalSeconds.ToString('F1')) segundos"
Write-Host " URL: https://webmoney.cnxifly.com"
Write-Host ""
Write-Host " Dica: Use Ctrl+Shift+R no navegador para limpar cache local"
Write-Host ""