mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-01 10:22:08 +00:00
152 lines
12 KiB
JSON
152 lines
12 KiB
JSON
{
|
|
"meta": {
|
|
"title": "ProxMenux Monitor — Panel web autoalojado para Proxmox VE | ProxMenux",
|
|
"description": "ProxMenux Monitor es un panel web autoalojado para Proxmox VE: métricas del host en tiempo real, almacenamiento y datos SMART, red, VMs y contenedores, hardware, logs, terminal web integrado, un Health Monitor proactivo, notificaciones a Telegram / Discord / Email, asistente IA opcional, una API REST e integraciones con herramientas como Homepage y Home Assistant.",
|
|
"ogTitle": "ProxMenux Monitor — Panel web autoalojado para Proxmox VE",
|
|
"ogDescription": "Panel de Proxmox VE en tiempo real: métricas del host, SMART de almacenamiento, red, VMs y contenedores, hardware, logs, terminal web, Health Monitor, notificaciones, asistente IA, API REST.",
|
|
"twitterTitle": "ProxMenux Monitor | ProxMenux",
|
|
"twitterDescription": "Panel autoalojado de Proxmox VE con Health Monitor, notificaciones, asistente IA y API REST."
|
|
},
|
|
"header": {
|
|
"title": "ProxMenux Monitor",
|
|
"description": "Un panel web autoalojado para Proxmox VE distribuido como AppImage. Se ejecuta en el host como un único servicio systemd, escucha en el puerto TCP 8008 y sirve tanto la API como la interfaz desde un único proceso.",
|
|
"section": "ProxMenux Monitor"
|
|
},
|
|
"atGlance": {
|
|
"title": "De un vistazo",
|
|
"body": "Un único AppImage en el host de Proxmox → backend Flask (puerto 8008) que recoge datos en vivo mediante <code>psutil</code>, <code>pvesh</code>, <code>smartctl</code>, <code>journalctl</code> → panel Next.js servido desde el mismo proceso. Autenticación opcional (contraseña + 2FA), asistente IA opcional, notificaciones opcionales, API REST para integraciones."
|
|
},
|
|
"hero": {
|
|
"alt": "Panel de ProxMenux Monitor — pantalla principal con widgets de CPU, memoria, temperatura y uptime",
|
|
"caption": "Pantalla principal por defecto — métricas del host y estado de salud de un vistazo."
|
|
},
|
|
"coverage": {
|
|
"heading": "Lo que cubre el panel",
|
|
"intro": "Ocho secciones principales, cada una respaldada por sus propios endpoints de API:",
|
|
"tableSection": "Sección",
|
|
"tableWhat": "Qué muestra",
|
|
"sections": [
|
|
{
|
|
"name": "Monitor de salud",
|
|
"description": "Alertas activas y descartadas para CPU, memoria, almacenamiento, discos, red, servicios, logs, VMs, actualizaciones y seguridad. Alimenta el motor de notificaciones."
|
|
},
|
|
{
|
|
"name": "Almacenamiento",
|
|
"description": "Pools de almacenamiento de Proxmox, discos físicos (SATA / NVMe / USB), atributos SMART, estado de pools ZFS, desgaste y vida útil, actividad de I/O."
|
|
},
|
|
{
|
|
"name": "Red",
|
|
"description": "Todas las interfaces (físicas, bonds, bridges, OVS), IP/MAC/estado, gráficos RX/TX en tiempo real, datos RRD históricos por interfaz."
|
|
},
|
|
{
|
|
"name": "VMs y contenedores",
|
|
"description": "Inventario de VM y LXC con estado, recursos y tiempo de actividad. El detalle muestra configuración, métricas históricas, descarga de registros de Proxmox y acciones de iniciar/parar/reiniciar/apagar. Los registros dependen del endpoint de Proxmox; no es un archivo completo del sistema invitado."
|
|
},
|
|
{
|
|
"name": "Hardware",
|
|
"description": "Modelo y topología de CPU, esquema de memoria, dispositivos PCIe, lista de GPUs con driver y monitorización en tiempo real por slot (NVIDIA / iGPU Intel)."
|
|
},
|
|
{
|
|
"name": "Logs y eventos",
|
|
"description": "<code>journalctl</code> en vivo con filtros de severidad / rango temporal / palabra clave, historial de tareas de Proxmox, log de notificaciones, paquetes de logs descargables."
|
|
},
|
|
{
|
|
"name": "Terminal",
|
|
"description": "Shell del host y acceso a consolas VM/CT compatibles en el navegador mediante <code>xterm.js</code> y WebSockets. Las sesiones no se auditan comando a comando."
|
|
},
|
|
{
|
|
"name": "Seguridad",
|
|
"description": "Fallos de autenticación, estado de las jails de Fail2Ban, bloqueos recientes e integración con la jail <code>[proxmenux]</code> del host."
|
|
}
|
|
],
|
|
"footer": "Cada sección tiene documentación propia bajo <link>Panel</link> en la barra lateral."
|
|
},
|
|
"howItRuns": {
|
|
"heading": "Cómo se ejecuta",
|
|
"intro": "ProxMenux Monitor se distribuye como una AppImage autónoma. Una única unidad de systemd (<code>proxmenux-monitor.service</code>) inicia un proceso de Flask que:",
|
|
"bullets": [
|
|
"Escucha en <strong>TCP 8008</strong> en el host (HTTP).",
|
|
"Sirve el panel Next.js como activos estáticos bajo <code>/</code> y la API bajo <code>/api/*</code> desde el mismo proceso.",
|
|
"Obtiene datos en vivo con herramientas estándar del host: <code>psutil</code>, <code>pvesh</code>, <code>smartctl</code>, <code>journalctl</code>, <code>zpool</code>, <code>ip</code>, <code>nvidia-smi</code>, etc.",
|
|
"Persiste su propio estado en una base de datos SQLite local (<code>/usr/local/share/proxmenux/health_monitor.db</code>): alertas descartadas, observaciones de discos, configuración de notificaciones, configuración de IA. El estado de autenticación vive aparte en <code>/root/.config/proxmenux-monitor/auth.json</code>."
|
|
],
|
|
"footer": "El flujo de peticiones, la estructura de archivos y la integración systemd se describen en <link>Arquitectura</link>."
|
|
},
|
|
"noAgent": {
|
|
"title": "Sin agente en los guests",
|
|
"body": "El Monitor obtiene los datos desde el host. No hace falta instalar un agente en las VM ni en los CT: los datos proceden de la API de Proxmox y de la información que el kernel del host ofrece sobre los invitados en ejecución."
|
|
},
|
|
"access": {
|
|
"heading": "Acceder al panel",
|
|
"intro": "Se soportan dos patrones de acceso y la aplicación detecta cuál está en uso:",
|
|
"codeComment1": "# 1) Acceso directo al host",
|
|
"codeComment2": "# 2) Mediante proxy inverso (Nginx / Caddy / Traefik)",
|
|
"afterCode": "El proxy inverso debe configurar <code>X-Forwarded-For</code>, <code>X-Forwarded-Proto</code> y <code>X-Forwarded-Host</code> correctamente y permitir WebSockets. En puertos estándar el navegador usa su origen actual. El backend solo confía en direcciones reenviadas con PROXMENUX_TRUST_PROXY=1 explícito; restringe su acceso directo si activas esa confianza.",
|
|
"footer": "La configuración inicial, contraseña + TOTP 2FA y ejemplos de proxy inverso se explican en <link>Acceso y autenticación</link>."
|
|
},
|
|
"mobile": {
|
|
"heading": "Uso móvil e instalación en la pantalla de inicio",
|
|
"intro": "El panel es responsive y se distribuye como Progressive Web App. El <code>public/manifest.json</code> empaquetado declara <code>display: standalone</code> con nombre, icono y color de tema de la app, por lo que añadir la URL a la pantalla de inicio produce un lanzador autónomo real — sin barra de direcciones, splash personalizada, tema oscuro acorde al panel.",
|
|
"phoneAlt": "ProxMenux Monitor en un móvil — vista principal del panel",
|
|
"phoneCaption": "Panel principal en un móvil — el layout se adapta a pantallas pequeñas.",
|
|
"addHeading": "Añadir a la pantalla de inicio",
|
|
"iosLabel": "iOS Safari:",
|
|
"iosBody": "botón de compartir → <em>Añadir a pantalla de inicio</em>. El icono viene de <code>/apple-touch-icon.png</code> incluido en el AppImage.",
|
|
"androidLabel": "Android Chrome / Edge:",
|
|
"androidBody": "menú de tres puntos → <em>Instalar app</em> (o <em>Añadir a pantalla de inicio</em> en versiones antiguas).",
|
|
"afterInstall": "Una vez instalado, abrir el icono lanza el panel en modo standalone con su propia entrada en el conmutador de tareas.",
|
|
"onlineOnlyTitle": "Requiere conexión",
|
|
"onlineOnlyBody": "La PWA se puede instalar, pero <strong>no</strong> funciona sin conexión: no incluye un service worker. El acceso directo se comporta como una aplicación nativa, pero el dispositivo debe poder conectar con el host por TCP 8008 (mediante LAN, VPN o HTTPS a través de un proxy inverso) para cargar el panel."
|
|
},
|
|
"health": {
|
|
"heading": "El Health Monitor y las notificaciones",
|
|
"alt": "Pantalla del Health Monitor mostrando las 10 categorías rastreadas (CPU, memoria, almacenamiento, discos, red, servicios, logs, VMs, actualizaciones, seguridad) con su estado actual",
|
|
"caption": "Vista del Health Monitor — las 10 categorías rastreadas, con su estado actual. Las alertas activas y descartadas aparecen aquí cuando el sistema genera alguna.",
|
|
"body1": "Dentro del panel, el <strong>Health Monitor</strong> se ejecuta continuamente en segundo plano y produce un flujo estructurado de eventos: alta temperatura de CPU, avisos SMART de discos, degradación de pools ZFS, OOM kills, fallos de VM/CT, incidentes de seguridad, etc. Cada evento tiene una categoría, una severidad (INFO / WARNING / CRITICAL) y un <code>error_key</code> estable para que los duplicados se colapsen en vez de inundar la pantalla.",
|
|
"feedsIntro": "Los eventos alimentan tres cosas al mismo tiempo:",
|
|
"feedsHealth": "La <strong>vista del Health Monitor</strong> en el panel (listas de activas + descartadas).",
|
|
"feedsChannels": "El <strong>motor de notificaciones</strong>: Telegram, Discord, Email, Gotify, Pushover y Apprise (multicanal). Cada canal se configura de forma independiente y permite silenciar categorías por evento.",
|
|
"feedsAI": "El <strong>asistente IA</strong> opcional — cuando está activado, el proveedor configurado (OpenAI, Anthropic, Gemini, Groq, Ollama u OpenRouter) explica los eventos entrantes en lenguaje claro y propone próximos pasos si está activado en los ajustes de la IA.",
|
|
"suppressionTitle": "Supresión en vez de silenciar todo",
|
|
"suppressionBody": "Cada categoría tiene su propia <em>duración de supresión</em>: una vez que descartas una alerta, la misma alerta se silencia durante esa ventana (24 horas por defecto, configurable por categoría hasta permanente). Las escalaciones reales — p. ej. la temperatura de CPU cruzando el umbral crítico — siempre se vuelven a disparar independientemente de la supresión."
|
|
},
|
|
"api": {
|
|
"heading": "API REST e integraciones",
|
|
"intro": "Los endpoints REST ofrecen datos de monitorización JSON por HTTP/HTTPS para widgets Homepage, sensores Home Assistant, pruebas Uptime Kuma y scripts. Grafana puede usar el exportador de texto Prometheus en <code>/api/prometheus</code>. Las peticiones se pueden hacer con <code>curl</code>.",
|
|
"tokens": "Los tokens API de larga duración (365 días) se generan en <strong>Configuración → Tokens de acceso API</strong> o mediante <code>POST /api/auth/generate-api-token</code>.",
|
|
"bearer": "Envía tokens con <code>Authorization: Bearer …</code>. <code>/api/health</code> también espera la cabecera Bearer, así que las pruebas de disponibilidad necesitan un token read_only. Bajo <code>/api/auth/*</code> hay rutas públicas de configuración/inicio/estado y rutas protegidas de cuentas y tokens; no todas son anónimas.",
|
|
"catalog": "El catálogo de endpoints, rotación de tokens y prácticas de seguridad están en <linkApi>Referencia de la API</linkApi>. Los ejemplos para Homepage, Home Assistant, Grafana, Uptime Kuma y cURL están en <linkIntegrations>Integraciones</linkIntegrations>."
|
|
},
|
|
"serviceControl": {
|
|
"heading": "Control del servicio",
|
|
"intro": "Monitor se gestiona como cualquier servicio systemd. También tiene dos entradas en la interfaz de texto ProxMenux bajo <em>Configuración</em>:",
|
|
"codeComment": "# Control manual",
|
|
"footer": "Consulta <link>Configuración → ProxMenux Monitor</link> para activar/desactivar el servicio y verificar su estado."
|
|
},
|
|
"nextSteps": {
|
|
"heading": "A dónde ir ahora",
|
|
"items": [
|
|
{
|
|
"label": "Arquitectura",
|
|
"description": "— backend Flask, unidad systemd, esquema SQLite, proveedores IA, canales de notificación."
|
|
},
|
|
{
|
|
"label": "Acceso y autenticación",
|
|
"description": "— primer arranque, configuración de contraseña, TOTP 2FA, configuración de proxy inverso, integración con Fail2Ban."
|
|
},
|
|
{
|
|
"label": "Panel",
|
|
"description": "— cada sección de la interfaz, una página por cada una."
|
|
},
|
|
{
|
|
"label": "Referencia de la API",
|
|
"description": "— cada endpoint, forma de petición / respuesta y gestión de tokens."
|
|
},
|
|
{
|
|
"label": "Integraciones",
|
|
"description": "— Homepage, Home Assistant, Grafana / Prometheus, Uptime Kuma, patrón genérico de cURL."
|
|
}
|
|
]
|
|
}
|
|
}
|