Whitepaper técnico — PodHeitor Web Interface para Bacula

Console web full-stack para Bacula Community + Bacularis, escrito em Rust (Axum + Leptos), com 42 módulos de UI cobrindo dashboard KPIs, restore studio, config studio com pipeline transacional 11-stage, integração nativa com 11 plugins PodHeitor, AI Copilot, topologia live, SLO dashboard, autenticação Argon2id + TOTP MFA, e notificações multi-canal (email/webhook/Telegram).

Documento técnico complementar à página do PodHeitor Web Interface.

1. Problema: Bweb e Bacularis envelheceram em direções opostas

Operadores Bacula têm hoje duas web UIs principais — e nenhuma das duas resolve o caso de uso completo:

  • Bweb (Bacula Web) — UI clássica em PHP, focada em monitoring e queries simples ao catálogo. Sem config-as-code real, sem AI assistance, sem topologia visual, sem RBAC granular, sem MFA. Funciona, mas mostra a idade.
  • Bacularis — UI moderna em PHP com config wizards e RBAC, mas ainda single-language config flow, sem rollback transacional, sem hooks para plugins de terceiros (cada plugin precisa de descritor PHP customizado), sem SLO dashboard.
  • Bweb na Bacula Enterprise — versão paga, fechada, suportada — mas com mesma estética e mesmas limitações arquiteturais.

O PHWEB é construído do zero como console operacional first-class para o stack PodHeitor + Bacula, com Bweb-parity em features básicas e features novas que nem Bacula Enterprise tem (AI Copilot, cost simulator, drift detection, SaaS onboarding wizard).

2. Stack tecnológico

Camada Tecnologia
Backend HTTP Rust + Axum
Frontend Rust + Leptos (CSR + SSR + hydration)
Build tooling cargo leptos (workspace unificado SSR/CSR)
Database PostgreSQL (migrations 0001–0016)
Auth Argon2id + TOTP MFA, session cookies (HttpOnly/SameSite=Lax), RBAC
Bacula integration bconsole wrappers + parsers customizados (suporta local-mode e SSH-mode)
Notificações Email, webhook, Telegram (Bot API); WhatsApp schema pronto
Observability Prometheus /metrics, healthcheck, audit log estruturado

Status v2/architecture: 279/279 tests PASS, 0 errors clippy, 0 errors WASM build. Phases 0–4 fully implementados, feature-complete para uso produção.

3. Phases implementadas

Phase Features
0 — Foundation Arquitetura Axum, auth/RBAC/audit, integração bconsole, migrations DB 0001–0016, plugin hub
1 — Bweb Parity Dashboard KPIs, gestão de jobs, restore studio, storage/media/clients, reports
2 — Config Full Config Studio (structured + text), pipeline transacional 11-stage, rollback, validação ACL
3 — PodHeitor Native Todos os 11 plugins, DR center, restore granular BVFS, ransomware, dedup, replication, SFTP, PITR
4 — Intelligence AI Copilot, topologia live, data explorer, SLO dashboard, cost simulator, SaaS onboarding

4. Pipeline transacional de configuração (Phase 2)

Editar configuração Bacula em produção é arriscado: um typo num FileSet ou Pool trava o Director em reload. PHWEB resolve isso com pipeline 11-stage:

  1. Parse — valida sintaxe do bloco editado
  2. Lint — detecta deps quebradas (Schedule referenciando Pool inexistente, etc.)
  3. ACL check — RBAC: usuário tem permissão de editar este resource?
  4. Diff — gera diff humano-readable contra config live
  5. Stage — escreve para arquivo staging em diretório isolado
  6. Test parse — bacula-dir -t -c <staged> antes de aplicar
  7. Snapshot — copia configs vivas para snapshot directory
  8. Apply — atomicamente swappa staged → live via rename
  9. Reload — bconsole reload
  10. Verify — health check post-reload
  11. Commit ou rollback — se verify falhou, swap reverso para snapshot

O operador pode reverter qualquer commit posteriormente via UI; o histórico de snapshots vive em DB e é browseable.

5. Frontend pages (42 módulos)

Cada página é um folder próprio em crates/phweb-frontend/src/pages/:

login · mfa · mfa_setup · change_password · dashboard · backup_operations · reports_analytics · scheduled_reports · restore · pitr_studio · dr_center · config_studio · job_wizard · fileset · filesets · jobdefs_wizard · schedule_wizard · pool_wizard · storage_wizard · device_wizard · client_wizard · catalog_wizard · console_wizard · counter_wizard · messages_wizard · directors · director · plugins · plugin · deployment · sftp_agentless · ai_copilot · topology · data_explorer · cost_simulator · dedup_observability · slo_dashboard · policy_as_code · marketplace · security · administration · onboarding · legacy_bweb · bconsole · drift

6. Integração nativa com 11 plugins PodHeitor (Phase 3)

Diferente de Bacularis (onde cada plugin precisa de descritor PHP customizado), PHWEB tem integração first-class com os 11 plugins PodHeitor: HPC, MongoDB, Informix, ADABAS, Notes, SFTP, AD/LDAP, dedup global, file replication, granular restore, ransomware detection. UI dedicada para PITR studio, DR center, BVFS granular restore, observability de dedup.

7. Phase 4 — Intelligence

Feature Função
AI Copilot Assistente que responde perguntas sobre o catálogo, sugere otimizações de FileSet/Schedule, e pode aplicar mudanças via Config Pipeline (com confirmação humana)
Topologia live Mapa visual de Director ↔ SDs ↔ FDs ↔ devices, com health LEDs em tempo real
Data Explorer Browser de catalog: query ad-hoc sobre Job/File/Path/Client com filtros
SLO Dashboard SLOs configuráveis por Job (RPO/RTO target), tracking de cumprimento
Cost Simulator What-if de retention policies vs custo de storage
SaaS Onboarding Wizard guiado para deploy multi-tenant
Drift Detection Compara config live vs config esperada (git, IaC) e alerta divergências

8. Autenticação e RBAC

  • Argon2id para password hashing — 1ª escolha do PHC, parâmetros tunáveis
  • TOTP MFA com setup wizard e enforcement por role
  • Session cookies HttpOnly + SameSite=Lax — sem token em localStorage (defesa XSS)
  • RBAC granular — permissões por resource type (FileSet, Pool, Job, Storage)
  • Audit log estruturado (JSON-Lines) — quem fez o quê, quando, onde, com diff

9. Notificações multi-canal

Email, webhook genérico, e Telegram via Bot API. Schema pronto para WhatsApp (decisão de API key — Twilio vs WhatsApp Business — pendente). Configuração:

Channel kind: telegram
Target format: {bot_token}/{chat_id}
Exemplo: 123456:AAEhBbCcDd-ef/987654321

Criação via Administration > Notificações > Novo Canal. O bot precisa estar adicionado ao chat target antes de enviar.

10. Deploy

Build via cargo leptos build --release num build host (recomendado VM com 8 GB RAM, ~23 min cold build). Artefatos: binário phweb-server + diretório site/ com bundle WASM + assets. Deploy típico em VM dedicada (Bacula Community + PHWEB co-locados).

# Vars de ambiente típicas em produção:
DATABASE_URL=postgres://phweb:phweb_dev@localhost/phweb
PHWEB_AUTO_MIGRATE=1
PHWEB_CONFIG_APPLY_ENABLED=1
PHWEB_DIRECTOR_HOST=localhost
LEPTOS_OUTPUT_NAME=phweb
LEPTOS_SITE_ADDR=0.0.0.0:3001

Bootstrap credentials: admin / admin — rotate no primeiro login.

11. Não iniciado / bloqueado

Item Bloqueio
Phase 5 — Billing Decisão de estratégia comercial (metering: API-first vs serial key)
Canal WhatsApp Decisão de API key (Twilio vs WhatsApp Business API)
App mobile Out of scope

12. License posture

Proprietary — Copyright (c) 2026 Heitor Faria. PHWEB consome o Bacula File Daemon e Storage Daemon apenas via APIs públicas (bconsole, plugin ABI), sem source AGPLv3 do Bacula linkado estaticamente. As dependências Rust transitivas (Axum, Leptos, sqlx, tokio, etc.) são todas MIT / Apache-2.0.

Pronto para avaliar?

Trial gratuito de 30 dias para deployments Bacula Community qualificados (Bacula 15.0.3+ ou Bacularis). Garantimos no mínimo 50% de desconto vs Bweb Enterprise, com mais funcionalidades — incluindo AI Copilot, drift detection, e config pipeline transacional que nenhum competidor entrega.

Heitor Faria — Fundador, PodHeitor International
[email protected]
☎ +1 (789) 726-1749 · +55 (61) 98268-4220 (WhatsApp)
🔗 Página do PodHeitor Web Interface

Disponível em: pt-brPortuguêsenEnglish (Inglês)esEspañol (Espanhol)

Deixe um comentário