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
}