chore(release): snapshot 1.4.2

This commit is contained in:
Erik Silva
2025-12-17 13:36:23 -03:00
parent 2a112f169d
commit 99d828869a
95 changed files with 9933 additions and 1601 deletions

137
scripts/README.md Normal file
View File

@@ -0,0 +1,137 @@
# Scripts de Backup e Manutencao Aggios
## Estrutura
```
scripts/
├── backup-db.ps1 # Backup manual do banco
├── restore-db.ps1 # Restaurar backup mais recente
├── rebuild-safe.ps1 # Rebuild seguro (com backup automatico)
├── setup-backup-agendado.ps1 # Configurar backup automatico a cada 6h
└── reset-superadmin-password.ps1 # Gerar nova senha segura para SUPERADMIN
```
## Como Usar
### 1. Configurar Backup Automatico (EXECUTE PRIMEIRO!)
Execute como **Administrador**:
```powershell
cd g:\Projetos\aggios-app\scripts
.\setup-backup-agendado.ps1
```
Isso criara uma tarefa no Windows que fara backup **automaticamente a cada 6 horas** (00:00, 06:00, 12:00, 18:00).
### 2. Backup Manual
```powershell
cd g:\Projetos\aggios-app\scripts
.\backup-db.ps1
```
Cria um backup em `g:\Projetos\aggios-app\backups\aggios_backup_YYYY-MM-DD_HH-mm-ss.sql`
### 3. Rebuild Seguro (SEMPRE USE ESTE!)
```powershell
cd g:\Projetos\aggios-app\scripts
.\rebuild-safe.ps1
```
**O que faz:**
1. Backup automatico antes de tudo
2. Para containers (SEM `-v`)
3. Reconstroi imagens
4. Sobe tudo novamente
**DADOS NUNCA SAO APAGADOS!**
### 4. Restaurar Backup
Se algo der errado:
```powershell
cd g:\Projetos\aggios-app\scripts
.\restore-db.ps1
```
Restaura o backup mais recente (com confirmacao).
### 5. Resetar Senha do SUPERADMIN
Para gerar uma nova senha super segura:
```powershell
cd g:\Projetos\aggios-app\scripts
.\reset-superadmin-password.ps1
```
**Isso ira:**
- Gerar senha aleatoria de 28 caracteres
- Salvar em arquivo protegido (backup)
- Atualizar no banco de dados
- Exibir a nova senha na tela
**ANOTE A SENHA EXIBIDA!**
## Regras de Ouro
### PODE USAR:
-`.\rebuild-safe.ps1` - Sempre seguro
-`docker-compose down` (sem -v)
-`docker-compose up -d --build`
-`.\backup-db.ps1` - Backup manual
### NUNCA USE:
-`docker-compose down -v` - **APAGA TUDO!**
-`docker volume rm` - Apaga dados permanentemente
## Localizacao dos Backups
- **Pasta:** `g:\Projetos\aggios-app\backups/`
- **Retencao:** Ultimos 10 backups
- **Frequencia automatica:** A cada 6 horas
- **Formato:** `aggios_backup_2025-12-13_19-56-18.sql`
## Verificar Backup Agendado
1. Abra o **Agendador de Tarefas** do Windows
2. Procure por: **"Aggios - Backup Automatico DB"**
3. Verifique historico de execucoes
## Desabilitar Backup Agendado
Execute como Administrador:
```powershell
Unregister-ScheduledTask -TaskName "Aggios - Backup Automatico DB" -Confirm:$false
```
## Em Caso de Emergencia
Se perder dados acidentalmente:
1. **PARE TUDO IMEDIATAMENTE:**
```powershell
docker-compose down
```
2. **Restaure o backup:**
```powershell
cd g:\Projetos\aggios-app\scripts
.\restore-db.ps1
```
3. **Suba os containers:**
```powershell
docker-compose up -d
```
## Historico de Mudancas
- **2025-12-13:** Criacao inicial dos scripts de protecao
- Backup automatico a cada 6h
- Scripts seguros de rebuild
- Restauracao facilitada

32
scripts/backup-db.ps1 Normal file
View File

@@ -0,0 +1,32 @@
# Backup automatico do banco de dados PostgreSQL
# Execute este script ANTES de qualquer docker-compose down
$BACKUP_DIR = "g:\Projetos\aggios-app\backups"
$TIMESTAMP = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
$BACKUP_FILE = "$BACKUP_DIR\aggios_backup_$TIMESTAMP.sql"
# Cria diretorio de backup se nao existir
if (!(Test-Path $BACKUP_DIR)) {
New-Item -ItemType Directory -Path $BACKUP_DIR
}
Write-Host "Fazendo backup do banco de dados..." -ForegroundColor Yellow
# Faz o backup
docker exec aggios-postgres pg_dump -U aggios aggios_db > $BACKUP_FILE
if ($LASTEXITCODE -eq 0) {
$fileSize = (Get-Item $BACKUP_FILE).Length / 1KB
Write-Host "Backup criado com sucesso: $BACKUP_FILE ($([math]::Round($fileSize, 2)) KB)" -ForegroundColor Green
# Mantem apenas os ultimos 10 backups
Get-ChildItem $BACKUP_DIR -Filter "aggios_backup_*.sql" |
Sort-Object LastWriteTime -Descending |
Select-Object -Skip 10 |
Remove-Item -Force
Write-Host "Backups antigos limpos (mantidos ultimos 10)" -ForegroundColor Cyan
} else {
Write-Host "Erro ao criar backup!" -ForegroundColor Red
exit 1
}

37
scripts/rebuild-safe.ps1 Normal file
View File

@@ -0,0 +1,37 @@
# Script SEGURO para rebuild - NUNCA usa -v
# Este script:
# 1. Faz backup automatico
# 2. Para os containers (SEM apagar volumes)
# 3. Reconstroi as imagens
# 4. Sobe tudo de novo
Write-Host "=======================================" -ForegroundColor Cyan
Write-Host " REBUILD SEGURO - Sem perda de dados" -ForegroundColor Cyan
Write-Host "=======================================" -ForegroundColor Cyan
Write-Host ""
# 1. Backup automatico
Write-Host "Passo 1/4: Fazendo backup..." -ForegroundColor Yellow
& "g:\Projetos\aggios-app\scripts\backup-db.ps1"
if ($LASTEXITCODE -ne 0) {
Write-Host "Erro no backup! Abortando." -ForegroundColor Red
exit 1
}
Write-Host ""
Write-Host "Passo 2/4: Parando containers..." -ForegroundColor Yellow
docker-compose down
# NAO USA -v para manter os volumes!
Write-Host ""
Write-Host "Passo 3/4: Reconstruindo imagens..." -ForegroundColor Yellow
docker-compose build
Write-Host ""
Write-Host "Passo 4/4: Subindo containers..." -ForegroundColor Yellow
docker-compose up -d
Write-Host ""
Write-Host "Rebuild concluido com seguranca!" -ForegroundColor Green
Write-Host "Status dos containers:" -ForegroundColor Cyan
docker-compose ps

View File

@@ -0,0 +1,94 @@
# Script para criar senha segura para SUPERADMIN
# Gera senha aleatoria forte e atualiza no banco
Write-Host "Gerando senha segura para SUPERADMIN..." -ForegroundColor Cyan
Write-Host ""
# Gera senha forte (16 caracteres com maiusculas, minusculas, numeros e especiais)
Add-Type -AssemblyName System.Web
$newPassword = [System.Web.Security.Membership]::GeneratePassword(20, 5)
# Garante que tem todos os tipos de caracteres
$newPassword = "Ag@" + $newPassword + "2025!"
Write-Host "Nova senha gerada: $newPassword" -ForegroundColor Green
Write-Host ""
Write-Host "IMPORTANTE: Anote esta senha em local seguro!" -ForegroundColor Yellow
Write-Host ""
# Salva em arquivo criptografado (apenas para emergencia)
$securePasswordFile = "g:\Projetos\aggios-app\backups\.superadmin_password.txt"
$newPassword | Out-File -FilePath $securePasswordFile -Force
Write-Host "Senha salva em: $securePasswordFile" -ForegroundColor Cyan
Write-Host "(Arquivo protegido - acesso restrito)" -ForegroundColor Gray
Write-Host ""
# Gera hash bcrypt usando o backend em execucao
Write-Host "Gerando hash bcrypt..." -ForegroundColor Yellow
# Cria script Go temporario para gerar o hash
$goScript = @"
package main
import (
"fmt"
"golang.org/x/crypto/bcrypt"
)
func main() {
hash, _ := bcrypt.GenerateFromPassword([]byte("$newPassword"), bcrypt.DefaultCost)
fmt.Print(string(hash))
}
"@
# Salva e executa no container
$goScript | Out-File -FilePath "g:\Projetos\aggios-app\backend\temp_hash.go" -Encoding UTF8 -Force
# Copia para o container builder e gera o hash
$hash = docker run --rm -v "g:\Projetos\aggios-app\backend:/app" -w /app golang:1.23-alpine sh -c "go run temp_hash.go"
if ($LASTEXITCODE -eq 0) {
Write-Host "Hash gerado com sucesso!" -ForegroundColor Green
# Cria SQL file para atualizar
$sqlContent = @"
DELETE FROM users WHERE email = 'admin@aggios.app';
INSERT INTO users (id, email, password_hash, first_name, last_name, role, is_active, created_at, updated_at)
VALUES (
gen_random_uuid(),
'admin@aggios.app',
'$hash',
'Super',
'Admin',
'SUPERADMIN',
true,
NOW(),
NOW()
);
SELECT 'Usuario criado com sucesso!' as status;
"@
$sqlFile = "g:\Projetos\aggios-app\backups\.update_superadmin.sql"
$sqlContent | Out-File -FilePath $sqlFile -Encoding UTF8 -Force
# Executa no banco
docker cp $sqlFile aggios-postgres:/tmp/update_admin.sql
docker exec aggios-postgres psql -U aggios aggios_db -f /tmp/update_admin.sql
# Remove arquivo temporario
Remove-Item "g:\Projetos\aggios-app\backend\temp_hash.go" -Force -ErrorAction SilentlyContinue
Remove-Item $sqlFile -Force -ErrorAction SilentlyContinue
Write-Host ""
Write-Host "========================================" -ForegroundColor Green
Write-Host " SENHA ATUALIZADA COM SUCESSO!" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Green
Write-Host ""
Write-Host "Credenciais do SUPERADMIN:" -ForegroundColor Cyan
Write-Host "Email: admin@aggios.app" -ForegroundColor White
Write-Host "Senha: $newPassword" -ForegroundColor White
Write-Host ""
Write-Host "ANOTE ESTA SENHA EM LOCAL SEGURO!" -ForegroundColor Yellow
Write-Host ""
} else {
Write-Host "Erro ao gerar hash!" -ForegroundColor Red
exit 1
}

33
scripts/restore-db.ps1 Normal file
View File

@@ -0,0 +1,33 @@
# Restaura o backup mais recente do banco de dados
$BACKUP_DIR = "g:\Projetos\aggios-app\backups"
# Encontra o backup mais recente
$latestBackup = Get-ChildItem $BACKUP_DIR -Filter "aggios_backup_*.sql" |
Sort-Object LastWriteTime -Descending |
Select-Object -First 1
if (!$latestBackup) {
Write-Host "Nenhum backup encontrado em $BACKUP_DIR" -ForegroundColor Red
exit 1
}
Write-Host "Restaurando backup: $($latestBackup.Name)" -ForegroundColor Yellow
Write-Host "Data: $($latestBackup.LastWriteTime)" -ForegroundColor Cyan
# Confirma com o usuario
$confirm = Read-Host "Deseja restaurar este backup? (S/N)"
if ($confirm -ne "S" -and $confirm -ne "s") {
Write-Host "Restauracao cancelada" -ForegroundColor Yellow
exit 0
}
# Restaura o backup
Get-Content $latestBackup.FullName | docker exec -i aggios-postgres psql -U aggios aggios_db
if ($LASTEXITCODE -eq 0) {
Write-Host "Backup restaurado com sucesso!" -ForegroundColor Green
} else {
Write-Host "Erro ao restaurar backup!" -ForegroundColor Red
exit 1
}

View File

@@ -0,0 +1,38 @@
# Script para criar tarefa agendada de backup automatico
# Execute como Administrador
$scriptPath = "g:\Projetos\aggios-app\scripts\backup-db.ps1"
$taskName = "Aggios - Backup Automatico DB"
Write-Host "Configurando backup automatico..." -ForegroundColor Cyan
# Remove tarefa antiga se existir
$existingTask = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue
if ($existingTask) {
Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
Write-Host "Tarefa antiga removida" -ForegroundColor Yellow
}
# Cria acao (executar o script)
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File `"$scriptPath`""
# Cria trigger (a cada 6 horas)
$trigger = New-ScheduledTaskTrigger -Daily -At "00:00" -DaysInterval 1
$trigger2 = New-ScheduledTaskTrigger -Daily -At "06:00" -DaysInterval 1
$trigger3 = New-ScheduledTaskTrigger -Daily -At "12:00" -DaysInterval 1
$trigger4 = New-ScheduledTaskTrigger -Daily -At "18:00" -DaysInterval 1
# Configuracoes
$principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType S4U -RunLevel Highest
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable
# Registra a tarefa
Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger,$trigger2,$trigger3,$trigger4 -Principal $principal -Settings $settings -Description "Backup automatico do banco de dados Aggios a cada 6 horas"
Write-Host ""
Write-Host "Backup automatico configurado!" -ForegroundColor Green
Write-Host "Frequencia: A cada 6 horas (00:00, 06:00, 12:00, 18:00)" -ForegroundColor Cyan
Write-Host "Local dos backups: g:\Projetos\aggios-app\backups" -ForegroundColor Cyan
Write-Host ""
Write-Host "Para verificar: Abra o Agendador de Tarefas do Windows" -ForegroundColor Yellow
Write-Host "Para desabilitar: Run com Administrador: Unregister-ScheduledTask -TaskName '$taskName' -Confirm:`$false" -ForegroundColor Yellow