214 lines
5.1 KiB
Markdown
214 lines
5.1 KiB
Markdown
# restoredb
|
|
|
|
Assistente CLI/TUI em Rust para listar dumps em MinIO/S3, baixar arquivos para uma pasta local e restaurar um banco PostgreSQL com `DROP DATABASE` e recriação controlados por confirmação explícita.
|
|
|
|
## Requisitos
|
|
|
|
- Ferramentas PostgreSQL no `PATH`:
|
|
- `psql`
|
|
- `pg_restore`
|
|
- Acesso ao bucket MinIO/S3 com API compatível com S3
|
|
- Rust stable, apenas para compilar a partir do código-fonte
|
|
|
|
## Instalação
|
|
|
|
### A partir do pacote do Gitea
|
|
|
|
Baixe a versão publicada no Generic Package Registry, extraia e instale no `PATH`:
|
|
|
|
```bash
|
|
VERSION=0.1.0
|
|
ARCHIVE="restoredb-x86_64-unknown-linux-gnu.tar.gz"
|
|
|
|
curl -L -o "$ARCHIVE" \
|
|
"https://gitea.solucaoti.net.br/api/packages/rogeriolima/generic/restoredb/$VERSION/$ARCHIVE"
|
|
|
|
tar -xzf "$ARCHIVE"
|
|
sudo install -m 0755 restoredb /usr/local/bin/restoredb
|
|
```
|
|
|
|
Confira:
|
|
|
|
```bash
|
|
restoredb --help
|
|
```
|
|
|
|
Se o pacote privado exigir autenticação, use um token do Gitea:
|
|
|
|
```bash
|
|
GITEA_TOKEN=seu_token
|
|
curl -L -u "rogeriolima:$GITEA_TOKEN" -o "$ARCHIVE" \
|
|
"https://gitea.solucaoti.net.br/api/packages/rogeriolima/generic/restoredb/$VERSION/$ARCHIVE"
|
|
```
|
|
|
|
### Compilando localmente
|
|
|
|
```bash
|
|
cargo build --release
|
|
```
|
|
|
|
O binário ficará em:
|
|
|
|
```bash
|
|
target/release/restoredb
|
|
```
|
|
|
|
## Publicação no Gitea
|
|
|
|
Para empacotar o executável release e publicar no Generic Package Registry do Gitea:
|
|
|
|
```bash
|
|
GITEA_TOKEN=seu_token scripts/publish-gitea-package.sh
|
|
```
|
|
|
|
Por padrão, o script publica `restoredb` na versão do `Cargo.toml` em `https://gitea.solucaoti.net.br/api/packages/rogeriolima/generic/restoredb/<versao>/`.
|
|
|
|
Opções úteis:
|
|
|
|
```bash
|
|
scripts/publish-gitea-package.sh --dry-run
|
|
scripts/publish-gitea-package.sh --version 0.1.1
|
|
scripts/publish-gitea-package.sh --no-build
|
|
```
|
|
|
|
## Configuração
|
|
|
|
Na primeira execução, se nenhuma configuração completa existir, o programa pergunta os campos um a um, no estilo do `rclone`, e salva em `config.yml` na mesma pasta do executável.
|
|
|
|
Senhas são perguntadas sem eco no terminal. O programa também continua aceitando `.env` e `config.toml` na raiz do projeto.
|
|
|
|
Também é possível distribuir esse `config.yml` junto do binário. Ele é usado como fallback para completar valores ausentes.
|
|
|
|
A ordem de precedência é:
|
|
|
|
1. Variáveis de ambiente / `.env`
|
|
2. `config.toml` local
|
|
3. `config.yml` na mesma pasta do executável
|
|
|
|
Exemplo `.env`:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
Exemplo `config.toml`:
|
|
|
|
```bash
|
|
cp config.example.toml config.toml
|
|
```
|
|
|
|
Exemplo `config.yml`:
|
|
|
|
```bash
|
|
cp config.example.yml "$(dirname "$(realpath target/release/restoredb)")/config.yml"
|
|
```
|
|
|
|
Variáveis obrigatórias:
|
|
|
|
- `MINIO_ENDPOINT`
|
|
- `MINIO_ACCESS_KEY`
|
|
- `MINIO_SECRET_KEY`
|
|
- `MINIO_BUCKET`
|
|
- `POSTGRES_HOST`
|
|
- `POSTGRES_PORT`
|
|
- `POSTGRES_USER`
|
|
- `POSTGRES_PASSWORD`
|
|
- `POSTGRES_DATABASE`
|
|
|
|
Opcionais:
|
|
|
|
- `MINIO_REGION`, padrão `us-east-1`
|
|
- `POSTGRES_SSLMODE`, padrão `prefer`
|
|
- `DUMPS_DIR`, padrão `./dumps`
|
|
|
|
Senhas nunca são exibidas. A senha do PostgreSQL é passada para `psql` e `pg_restore` por `PGPASSWORD`.
|
|
|
|
## Uso
|
|
|
|
Abrir a TUI:
|
|
|
|
```bash
|
|
restoredb
|
|
```
|
|
|
|
Listar dumps remotos e locais:
|
|
|
|
```bash
|
|
restoredb list
|
|
```
|
|
|
|
Restaurar diretamente um dump local ou remoto, ainda com confirmação:
|
|
|
|
```bash
|
|
restoredb restore backup.sql.gz
|
|
```
|
|
|
|
Simular uma restauração sem baixar, apagar ou restaurar:
|
|
|
|
```bash
|
|
restoredb restore backup.sql.gz --dry-run
|
|
```
|
|
|
|
Validar configuração, pasta local, conexão S3 e ferramentas PostgreSQL:
|
|
|
|
```bash
|
|
restoredb doctor
|
|
```
|
|
|
|
`restoredb config-check` continua disponível como comando compatível.
|
|
|
|
Mostrar a configuração carregada, com senhas mascaradas:
|
|
|
|
```bash
|
|
restoredb config show
|
|
```
|
|
|
|
Apagar dumps locais, após confirmação:
|
|
|
|
```bash
|
|
restoredb clean
|
|
```
|
|
|
|
Apagar apenas dumps locais mais antigos que 30 dias:
|
|
|
|
```bash
|
|
restoredb clean --older-than-days 30
|
|
```
|
|
|
|
## Controles da TUI
|
|
|
|
- `↑`/`↓` ou `k`/`j`: navegar
|
|
- `/`: filtrar por nome
|
|
- `Esc`: limpar filtro ou cancelar confirmação
|
|
- `r`: atualizar listas
|
|
- `d`: apagar o arquivo local do dump selecionado, após confirmação
|
|
- `Enter`: selecionar/restaurar
|
|
- `q`: sair
|
|
|
|
Antes da restauração, a TUI sugere o banco de destino a partir do nome do dump, permite editar esse valor e então mostra host, banco de destino e dump selecionado, com aviso de que o banco será apagado. A restauração só ocorre após confirmação.
|
|
|
|
Durante download e restauração, CLI e TUI exibem barra de progresso. Se a restauração falhar com `ERROR: role "<usuario>" does not exist`, o assistente cria a role PostgreSQL com `LOGIN`, recria o banco de destino e tenta restaurar o dump novamente uma vez.
|
|
|
|
## Formatos suportados
|
|
|
|
- `.sql`: restaurado com `psql`
|
|
- `.sql.gz`, `.sql.zst`: descompactados e restaurados com `psql`
|
|
- `.dump`, `.backup`, `.bin`, `.binary`, `.tar`: restaurados com `pg_restore`
|
|
- `.dump.gz`, `.dump.zst`, `.backup.gz`, `.backup.zst`, `.bin.gz`, `.bin.zst`, `.binary.gz`, `.binary.zst`, `.tar.gz`, `.tar.zst`: descompactados para arquivo temporário e restaurados com `pg_restore`
|
|
|
|
## Logs
|
|
|
|
Logs técnicos são gravados em:
|
|
|
|
```bash
|
|
restoredb.log
|
|
```
|
|
|
|
O histórico de restaurações é salvo em:
|
|
|
|
```bash
|
|
<DUMPS_DIR>/history.yml
|
|
```
|
|
|
|
Erros exibidos na TUI ou CLI são resumidos para o usuário; detalhes técnicos ficam no log.
|