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:
- Parse — valida sintaxe do bloco editado
- Lint — detecta deps quebradas (Schedule referenciando Pool inexistente, etc.)
- ACL check — RBAC: usuário tem permissão de editar este resource?
- Diff — gera diff humano-readable contra config live
- Stage — escreve para arquivo staging em diretório isolado
- Test parse —
bacula-dir -t -c <staged>antes de aplicar - Snapshot — copia configs vivas para snapshot directory
- Apply — atomicamente swappa staged → live via rename
- Reload —
bconsole reload - Verify — health check post-reload
- 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:
Português
English (Inglês)
Español (Espanhol)