156 lines
5.6 KiB
HTML
156 lines
5.6 KiB
HTML
<!doctype html>
|
|
<html lang="es">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Documentacion Monitor RPi</title>
|
|
<style>
|
|
body {
|
|
margin: 0;
|
|
font-family: "Segoe UI", system-ui, sans-serif;
|
|
background: #f4f6f7;
|
|
color: #172127;
|
|
line-height: 1.55;
|
|
}
|
|
|
|
header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 16px;
|
|
padding: 22px 28px;
|
|
border-bottom: 1px solid #d4dce1;
|
|
background: #ffffff;
|
|
}
|
|
|
|
main {
|
|
max-width: 980px;
|
|
margin: 0 auto;
|
|
padding: 28px;
|
|
}
|
|
|
|
h1 { margin: 0; font-size: 24px; }
|
|
h2 { margin-top: 30px; border-bottom: 1px solid #d4dce1; padding-bottom: 8px; }
|
|
h3 { margin-top: 20px; }
|
|
code, pre { background: #eef2f4; border-radius: 8px; }
|
|
code { padding: 2px 5px; }
|
|
pre { padding: 14px; overflow: auto; }
|
|
a {
|
|
color: #2f7fb8;
|
|
text-decoration: none;
|
|
font-weight: 650;
|
|
}
|
|
.nav {
|
|
display: flex;
|
|
gap: 10px;
|
|
flex-wrap: wrap;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<h1>Documentacion Monitor RPi</h1>
|
|
<nav class="nav">
|
|
<a href="/dashboard.html">Dashboard</a>
|
|
<a href="/config.html">Configuracion</a>
|
|
</nav>
|
|
</header>
|
|
<main>
|
|
<h2>Resumen</h2>
|
|
<p>Aplicacion web para monitorizar Raspberry Pi mediante SSH desde un contenedor dedicado. El dashboard muestra el ultimo estado calculado por el backend; el navegador no abre conexiones SSH.</p>
|
|
|
|
<h2>Rutas</h2>
|
|
<ul>
|
|
<li><code>/dashboard.html</code>: vista principal.</li>
|
|
<li><code>/config.html</code>: configuracion.</li>
|
|
<li><code>/api/status</code>: estado actual.</li>
|
|
</ul>
|
|
|
|
<h2>Configuracion</h2>
|
|
<p>La configuracion persistente esta en <code>/home/yamaray/docker/monitorRPi/data/config.json</code>, montada dentro del contenedor como <code>/data/config.json</code>.</p>
|
|
|
|
<h3>Generales</h3>
|
|
<ul>
|
|
<li><code>mockMode</code>: usa datos simulados si es true.</li>
|
|
<li><code>refreshIntervalSeconds</code>: scan activo con clientes visibles.</li>
|
|
<li><code>idleScanIntervalSeconds</code>: scan lento sin clientes visibles.</li>
|
|
<li><code>sshTimeoutSeconds</code>: timeout por consulta SSH.</li>
|
|
<li><code>temperatureThresholdsC</code>: umbrales de temperatura.</li>
|
|
<li><code>metricThresholdsPercent</code>: umbrales de CPU, RAM y disco.</li>
|
|
</ul>
|
|
|
|
<h3>Dispositivos</h3>
|
|
<ul>
|
|
<li><code>active</code>: incluye o excluye el dispositivo del scan.</li>
|
|
<li><code>id</code>: identificador interno unico.</li>
|
|
<li><code>name</code>: nombre visible.</li>
|
|
<li><code>host</code>: IP o DNS.</li>
|
|
<li><code>port</code>: puerto SSH.</li>
|
|
<li><code>username/password</code> o <code>privateKeyPath</code>: credenciales SSH. Si hay clave privada configurada, tiene prioridad sobre el password.</li>
|
|
<li><code>model</code>: modelo visible.</li>
|
|
<li><code>role</code>: funcion del equipo.</li>
|
|
<li><code>location</code>: ubicacion.</li>
|
|
</ul>
|
|
|
|
<h2>Autenticacion SSH por clave privada</h2>
|
|
<p>Por dispositivo se puede usar password o clave privada. Si <code>privateKeyPath</code> tiene valor, el backend usa la clave privada y no usa el password.</p>
|
|
|
|
<h3>Clave en el contenedor</h3>
|
|
<p>Guarda la clave privada en la RPi donde corre el monitor:</p>
|
|
<pre><code>/home/yamaray/docker/monitorRPi/ssh/carabanes_monitor_ed25519</code></pre>
|
|
<p>Protege permisos:</p>
|
|
<pre><code>chmod 700 /home/yamaray/docker/monitorRPi/ssh
|
|
chmod 600 /home/yamaray/docker/monitorRPi/ssh/carabanes_monitor_ed25519</code></pre>
|
|
<p>El compose debe montar la carpeta como solo lectura:</p>
|
|
<pre><code>- /home/yamaray/docker/monitorRPi/ssh:/ssh:ro</code></pre>
|
|
<p>En el configurador usa la ruta vista desde el contenedor:</p>
|
|
<pre><code>password: ""
|
|
privateKeyPath: /ssh/carabanes_monitor_ed25519</code></pre>
|
|
|
|
<h3>Clave publica en la Raspberry destino</h3>
|
|
<p>En el usuario SSH remoto, pega la clave publica en:</p>
|
|
<pre><code>~/.ssh/authorized_keys</code></pre>
|
|
<p>Comandos tipicos en la Raspberry destino:</p>
|
|
<pre><code>mkdir -p ~/.ssh
|
|
chmod 700 ~/.ssh
|
|
nano ~/.ssh/authorized_keys
|
|
chmod 600 ~/.ssh/authorized_keys</code></pre>
|
|
<p>El nombre correcto del archivo es <code>authorized_keys</code>, no <code>authorised_keys</code>.</p>
|
|
|
|
<h3>Prueba manual</h3>
|
|
<pre><code>docker exec -it monitor-rpi ssh -i /ssh/carabanes_monitor_ed25519 -o IdentitiesOnly=yes -p 34000 pi@192.168.0.1</code></pre>
|
|
<p>Si entra sin pedir password, el monitor podra usar esa clave para el scan.</p>
|
|
|
|
<h2>API</h2>
|
|
<h3>GET /api/status</h3>
|
|
<p>Devuelve el ultimo estado: resumen, dispositivos, umbrales, clientes activos e intervalo actual.</p>
|
|
|
|
<h3>GET /api/config</h3>
|
|
<p>Devuelve la configuracion completa.</p>
|
|
|
|
<h3>POST /api/config</h3>
|
|
<p>Guarda la configuracion completa y reinicia el ciclo de scan.</p>
|
|
|
|
<h3>POST /api/reload</h3>
|
|
<p>Recarga la configuracion desde disco.</p>
|
|
|
|
<h3>POST /api/scan-now</h3>
|
|
<p>Fuerza un scan SSH inmediato.</p>
|
|
|
|
<h3>POST /api/client-heartbeat</h3>
|
|
<p>Usado por el dashboard visible para activar el intervalo rapido.</p>
|
|
|
|
<h3>POST /api/clients/clear</h3>
|
|
<p>Limpia los clientes activos en memoria.</p>
|
|
|
|
<h2>Escaneo Adaptativo</h2>
|
|
<pre><code>0 clientes visibles -> idleScanIntervalSeconds
|
|
1+ clientes visibles -> refreshIntervalSeconds</code></pre>
|
|
|
|
<h2>Docker</h2>
|
|
<pre><code>cd /home/yamaray/docker/monitorRPi
|
|
docker compose up -d --build</code></pre>
|
|
</main>
|
|
</body>
|
|
</html>
|