Consola web full-stack para Bacula Community + Bacularis, escrita en Rust (Axum + Leptos), con 42 módulos de UI cubriendo dashboard KPIs, restore studio, config studio con pipeline transaccional 11-stage, integración nativa con 11 plugins PodHeitor, AI Copilot, topología live, SLO dashboard, autenticación Argon2id + TOTP MFA, y notificaciones multi-canal (email/webhook/Telegram).
Documento técnico complementario a la página del PodHeitor Web Interface.
1. El problema: Bweb y Bacularis envejecieron en direcciones opuestas
Los operadores Bacula tienen hoy dos web UIs principales — y ninguna resuelve el caso de uso completo:
- Bweb (Bacula Web) — UI clásica en PHP, enfocada en monitoring y queries simples al catálogo. Sin config-as-code real, sin AI assistance, sin topología visual, sin RBAC granular, sin MFA. Funciona, pero muestra la edad.
- Bacularis — UI moderna en PHP con config wizards y RBAC, pero todavía single-language config flow, sin rollback transaccional, sin hooks para plugins de terceros (cada plugin necesita descriptor PHP customizado), sin SLO dashboard.
- Bweb en Bacula Enterprise — versión paga, cerrada, soportada — pero con misma estética y mismas limitaciones arquitectónicas.
PHWEB se construye desde cero como consola operacional first-class para el stack PodHeitor + Bacula, con Bweb-parity en features básicas y features nuevas que ni Bacula Enterprise tiene (AI Copilot, cost simulator, drift detection, SaaS onboarding wizard).
2. Stack tecnológico
| Capa | Tecnología |
|---|---|
| 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 (soporta local-mode y SSH-mode) |
| Notificaciones | Email, webhook, Telegram (Bot API); WhatsApp schema listo |
| Observability | Prometheus /metrics, healthcheck, audit log estructurado |
Estado v2/architecture: 279/279 tests PASS, 0 errors clippy, 0 errors WASM build. Phases 0–4 totalmente implementadas, feature-complete para uso producción.
3. Phases implementadas
| Phase | Features |
|---|---|
| 0 — Foundation | Arquitectura Axum, auth/RBAC/audit, integración bconsole, migrations DB 0001–0016, plugin hub |
| 1 — Bweb Parity | Dashboard KPIs, gestión de jobs, restore studio, storage/media/clients, reports |
| 2 — Config Full | Config Studio (structured + text), pipeline transaccional 11-stage, rollback, validación ACL |
| 3 — PodHeitor Native | Todos los 11 plugins, DR center, restore granular BVFS, ransomware, dedup, replication, SFTP, PITR |
| 4 — Intelligence | AI Copilot, topología live, data explorer, SLO dashboard, cost simulator, SaaS onboarding |
4. Pipeline transaccional de configuración (Phase 2)
Editar configuración Bacula en producción es arriesgado: un typo en un FileSet o Pool traba el Director en reload. PHWEB lo resuelve con pipeline 11-stage:
- Parse — valida sintaxis del bloque editado
- Lint — detecta deps rotos (Schedule referenciando Pool inexistente, etc.)
- ACL check — RBAC: el usuario tiene permiso de editar este resource?
- Diff — genera diff humano-readable contra config live
- Stage — escribe a archivo staging en directorio aislado
- Test parse —
bacula-dir -t -c <staged>antes de aplicar - Snapshot — copia configs vivas a snapshot directory
- Apply — atómicamente swappea staged → live vía rename
- Reload —
bconsole reload - Verify — health check post-reload
- Commit o rollback — si verify falló, swap reverso al snapshot
El operador puede revertir cualquier commit posteriormente vía UI; el historial de snapshots vive en DB y es browseable.
5. Frontend pages (42 módulos)
Cada página es su propio folder en 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. Integración nativa con 11 plugins PodHeitor (Phase 3)
A diferencia de Bacularis (donde cada plugin necesita descriptor PHP customizado), PHWEB tiene integración first-class con los 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 | Función |
|---|---|
| AI Copilot | Asistente que responde preguntas sobre el catálogo, sugiere optimizaciones de FileSet/Schedule, y puede aplicar cambios vía Config Pipeline (con confirmación humana) |
| Topología live | Mapa visual de Director ↔ SDs ↔ FDs ↔ devices, con health LEDs en tiempo real |
| Data Explorer | Browser de catalog: query ad-hoc sobre Job/File/Path/Client con filtros |
| SLO Dashboard | SLOs configurables por Job (RPO/RTO target), tracking de cumplimiento |
| Cost Simulator | What-if de retention policies vs costo de storage |
| SaaS Onboarding | Wizard guiado para deploy multi-tenant |
| Drift Detection | Compara config live vs config esperada (git, IaC) y alerta divergencias |
8. Autenticación y RBAC
- Argon2id para password hashing — primera elección del PHC, parámetros tunables
- TOTP MFA con setup wizard y enforcement por role
- Session cookies HttpOnly + SameSite=Lax — sin token en localStorage (defensa XSS)
- RBAC granular — permisos por resource type (FileSet, Pool, Job, Storage)
- Audit log estructurado (JSON-Lines) — quién hizo qué, cuándo, dónde, con diff
9. Notificaciones multi-canal
Email, webhook genérico, y Telegram vía Bot API. Schema listo para WhatsApp (decisión de API key — Twilio vs WhatsApp Business — pendiente). Configuración:
Channel kind: telegram
Target format: {bot_token}/{chat_id}
Ejemplo: 123456:AAEhBbCcDd-ef/987654321
Creación vía Administration > Notificaciones > Nuevo Canal. El bot debe estar agregado al chat target antes de enviar.
10. Deploy
Build vía cargo leptos build --release en un build host (recomendado VM con 8 GB RAM, ~23 min cold build). Artefactos: binario phweb-server + directorio site/ con bundle WASM + assets. Deploy típico en VM dedicada (Bacula Community + PHWEB co-locados).
# Vars de ambiente típicas en producción:
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
Credenciales bootstrap: admin / admin — rotar en el primer login.
11. No iniciado / bloqueado
| Item | Bloqueo |
|---|---|
| Phase 5 — Billing | Decisión de estrategia comercial (metering: API-first vs serial key) |
| Canal WhatsApp | Decisión de API key (Twilio vs WhatsApp Business API) |
| App mobile | Out of scope |
12. Postura de licencia
Propietaria — Copyright (c) 2026 Heitor Faria. PHWEB consume el Bacula File Daemon y Storage Daemon solo vía APIs públicas (bconsole, plugin ABI), sin source AGPLv3 de Bacula linkeado estáticamente. Las dependencias Rust transitivas (Axum, Leptos, sqlx, tokio, etc.) son todas MIT / Apache-2.0.
¿Listo para evaluar?
Trial gratuito de 30 días para deployments Bacula Community calificados (Bacula 15.0.3+ o Bacularis). Garantizamos al menos 50% de descuento vs Bweb Enterprise, con más funcionalidades — incluyendo AI Copilot, drift detection, y config pipeline transaccional que ningún competidor entrega.
Heitor Faria — Fundador, PodHeitor International
✉ [email protected]
☎ +1 (789) 726-1749 · +55 (61) 98268-4220 (WhatsApp)
🔗 Página del PodHeitor Web Interface
Disponível em:
Português (Portugués, Brasil)
English (Inglés)
Español