Pular para o conteúdo principal

Inicialização Automática

Esta página explica como configurar a inicialização automática do PCH-SIG ao iniciar o servidor.

Arquitetura de inicialização

Ao reiniciar o servidor Windows (serveur-production):

Boot Windows


Tarefa agendada "PCH-SIG Docker Startup"


Script start-docker.ps1


Docker Machine inicia


VM VirtualBox inicia


Contêineres Docker reiniciam (restart: always)


Aplicação disponível (~2-3 min após boot)

Configuração dos contêineres

docker-compose.yml

Todos os contêineres têm restart: always:

services:
postgres:
restart: always

redis:
restart: always

backend:
restart: always

frontend:
restart: always

Isso garante que os contêineres reiniciem automaticamente quando o Docker iniciar.


Script de inicialização

start-docker.ps1

Arquivo: C:\pch-sig\start-docker.ps1

# Script de inicialização Docker Machine para PCH-SIG
# Executado ao boot do servidor via tarefa agendada

$LogFile = "C:\pch-sig\logs\startup.log"

function Write-Log {
param([string]$Message)
$Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$Timestamp - $Message" | Out-File -Append $LogFile
}

Write-Log "=== Inicialização PCH-SIG ==="

# Aguardar que a rede esteja disponível
Write-Log "Aguardando a rede..."
Start-Sleep -Seconds 30

# Verificar se o Docker Machine está iniciado
$status = docker-machine status default 2>&1
Write-Log "Status Docker Machine: $status"

if ($status -ne "Running") {
Write-Log "Iniciando Docker Machine..."
docker-machine start default

# Aguardar a inicialização completa
Start-Sleep -Seconds 60

$status = docker-machine status default
Write-Log "Novo status: $status"
}

# Configurar o ambiente Docker
Write-Log "Configurando o ambiente Docker..."
& docker-machine env default | Invoke-Expression

# Verificar os contêineres
Write-Log "Verificando os contêineres..."
$containers = docker ps --format "{{.Names}}: {{.Status}}"
Write-Log "Contêineres: $containers"

# Configurar os proxies de porta
Write-Log "Configurando os proxies de porta..."
netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=80 connectaddress=192.168.99.100
netsh interface portproxy add v4tov4 listenport=8000 listenaddress=0.0.0.0 connectport=8000 connectaddress=192.168.99.100

Write-Log "=== Inicialização concluída ==="

Tarefa agendada Windows

Criar a tarefa

# Criar a tarefa agendada
$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-ExecutionPolicy Bypass -File C:\pch-sig\start-docker.ps1"

$Trigger = New-ScheduledTaskTrigger -AtStartup

$Principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest

$Settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable

Register-ScheduledTask -TaskName "PCH-SIG Docker Startup" -Action $Action -Trigger $Trigger -Principal $Principal -Settings $Settings -Description "Inicia Docker Machine e os contêineres PCH-SIG ao boot"

Verificar a tarefa

Get-ScheduledTask -TaskName "PCH-SIG Docker Startup"

Executar manualmente

Start-ScheduledTask -TaskName "PCH-SIG Docker Startup"

Remover a tarefa

Unregister-ScheduledTask -TaskName "PCH-SIG Docker Startup" -Confirm:$false

Verificação da inicialização

Consultar os logs

Get-Content C:\pch-sig\logs\startup.log -Tail 50

Verificar os serviços

Após reiniciar o servidor:

# Verificar Docker Machine
docker-machine status default

# Verificar os contêineres
docker-machine ssh default "docker ps"

# Verificar as portas
netsh interface portproxy show all

Testar a aplicação

# Teste frontend
Invoke-WebRequest -Uri "http://localhost:3000" -UseBasicParsing | Select-Object StatusCode

# Teste API
Invoke-WebRequest -Uri "http://localhost:8000/api" -UseBasicParsing | Select-Object StatusCode

Solução de problemas

Docker Machine não inicia

# Verificar VirtualBox
& "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" list vms

# Iniciar manualmente
docker-machine start default

Contêineres não iniciam

# Ver os logs
docker-machine ssh default "docker logs pch_backend"

# Reiniciar os contêineres
docker-machine ssh default "cd /c/pch-sig/deploy && docker compose restart"

Portas não acessíveis

# Reconfigurar as portas
netsh interface portproxy reset

# Adicionar novamente os redirecionamentos
netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=80 connectaddress=192.168.99.100
netsh interface portproxy add v4tov4 listenport=8000 listenaddress=0.0.0.0 connectport=8000 connectaddress=192.168.99.100

Monitoramento da inicialização

Script de vigilância

# check-status.ps1
while ($true) {
$date = Get-Date -Format "HH:mm:ss"

# Teste frontend
try {
$response = Invoke-WebRequest -Uri "http://localhost:3000" -UseBasicParsing -TimeoutSec 5
Write-Host "$date - Frontend: OK" -ForegroundColor Green
} catch {
Write-Host "$date - Frontend: ERRO" -ForegroundColor Red
}

# Teste API
try {
$response = Invoke-WebRequest -Uri "http://localhost:8000/api" -UseBasicParsing -TimeoutSec 5
Write-Host "$date - API: OK" -ForegroundColor Green
} catch {
Write-Host "$date - API: ERRO" -ForegroundColor Red
}

Start-Sleep -Seconds 30
}

Próximos passos