Whitepaper técnico — PodHeitor Web Interface para Bacula

Whitepaper técnico — PodHeitor Web Interface para Bacula

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:

  1. Parse — valida sintaxis del bloque editado
  2. Lint — detecta deps rotos (Schedule referenciando Pool inexistente, etc.)
  3. ACL check — RBAC: el usuario tiene permiso de editar este resource?
  4. Diff — genera diff humano-readable contra config live
  5. Stage — escribe a archivo staging en directorio aislado
  6. Test parse — bacula-dir -t -c <staged> antes de aplicar
  7. Snapshot — copia configs vivas a snapshot directory
  8. Apply — atómicamente swappea staged → live vía rename
  9. Reload — bconsole reload
  10. Verify — health check post-reload
  11. 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: pt-brPortuguês (Portugués, Brasil)enEnglish (Inglés)esEspañol

Deja una respuesta