chore(release): snapshot 1.4.2
This commit is contained in:
137
scripts/README.md
Normal file
137
scripts/README.md
Normal 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
32
scripts/backup-db.ps1
Normal 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
37
scripts/rebuild-safe.ps1
Normal 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
|
||||
94
scripts/reset-superadmin-password.ps1
Normal file
94
scripts/reset-superadmin-password.ps1
Normal 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
33
scripts/restore-db.ps1
Normal 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
|
||||
}
|
||||
38
scripts/setup-backup-agendado.ps1
Normal file
38
scripts/setup-backup-agendado.ps1
Normal 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
|
||||
Reference in New Issue
Block a user