# 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//`. 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 "" 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 /history.yml ``` Erros exibidos na TUI ou CLI são resumidos para o usuário; detalhes técnicos ficam no log.