Jump to content

Hamradio/reflector dashboard/es

From MediaWiki For Hamradio Analog/Digital and Debian v13 software/Raspberry PI v3/4/5 howto
This page is a translated version of the page Hamradio/reflector dashboard and the translation is 91% complete.

Una guía para configurar R.A.D.A.R. (Reflector Activity Dashboard And Reporting): un panel web que muestra, en vivo, quién está conectado a tu SvxReflector, quién habla y cómo está interconectada la red — con cuentas de usuario, listas de talkgroups y herramientas de administración.

💡 En una frase: R.A.D.A.R. se ejecuta en el mismo servidor que tu SvxReflector, consulta su estado y sirve una página web en vivo (nodos, últimos oídos, talkgroups, topología, CTCSS) con un sistema de registro/inicio de sesión.
The reflector's /status on port 8099 is polled by svxdr proxy (8090), then svxdr nodelist (8098), served through nginx over HTTPS to the browser; PHP-FPM handles accounts in Redis.
⚠ Esto es para operadores de reflector, no para principiantes. A diferencia del panel de nodo, R.A.D.A.R. es una instalación de servidor: nginx + PHP + Redis + un demonio Go + un certificado TLS real. Si solo tienes un nodo, no lo necesitas — quieres el SvxSpot Dashboard. La guía paso a paso autorizada es el INSTALL.md del repo; esta página es el resumen amable.

¿Necesito esto?

  • Operas un SvxReflector (en concreto un build GeuReflector, que añade trunking reflector-a-reflector) y quieres un panel de actividad público/de un vistazo para él.
  • Te manejas montando un servidor web con HTTPS. Es una instalación de varios servicios en una máquina Debian.
  • Si solo tienes un nodo (hotspot/repetidor), para aquí — usa el SvxSpot Dashboard.

Qué necesitas primero

Cosa Para qué
Un SvxReflector (GeuReflector) en ejecución en la misma máquina R.A.D.A.R. lee su endpoint /status (puerto de ejemplo 8099).
Un nombre de dominio + certificado TLS (Let's Encrypt) El login usa una cookie Secure — no funciona sobre HTTP simple.
nginx, PHP 8.4 + FPM (redis, mbstring, openssl, json), Redis 6+ servidor web, backend de cuentas y almacén de cuentas/sesiones.
Un MTA o relé SMTP verificación de registro y correo de restablecimiento de contraseña.
Go 1.24+ para compilar el demonio de datos en vivo svxdr.

Instala los paquetes (Debian 13 / Ubuntu 24.04):

sudo apt install nginx php8.4-fpm php8.4-redis php8.4-mbstring php8.4-cli \
                 redis-server certbot openssl rsync curl python3 sudo golang-go
💡 Debian 12 trae PHP 8.2; R.A.D.A.R. se desarrolla sobre 8.4. Usa Debian 13, o el repo PHP de sury.org, y sustituye por tu versión real donde veas 8.4.

Cómo fluyen los datos (para que los puertos tengan sentido)

El error de configuración más común con diferencia es una cadena de puertos que no coincide. Los datos fluyen:

reflector /status :8099 → svxdr proxy :8090 (cachea, enriquece) → svxdr nodelist :8098 (construye la API + stream SSE en vivo, lee Redis para eventos de nodo) → nginx (HTTPS, hace de reverse-proxy de /svxportal/api/ a :8098) → tu navegador. Las cuentas viven en Redis; el backend PHP (auth/*.php) habla con él.

Mantén esos números alineados y la mayor parte de la instalación «simplemente funciona».

Instalación (resumen)

Clona el repo y sigue sus pasos 0–11 de INSTALL.md; los pasos clave son:

  1. Obtener el código: git clone https://git.sa7aux.se/bjorne/reflector-dashboard.git
  2. Desplegar los archivos web con rsync en /var/www/html/svxportal (propiedad de www-data).
  3. Montar un Redis dedicado en un socket unix, con contraseña; añade www-data al grupo redis.
  4. Añadir un segundo pool PHP-FPM (svxadmin) usado solo por la API de admin del reflector.
  5. Crear el archivo de lista de talkgroups /etc/svxlink/tglist.json (vía la regla tmpfiles incluida).
  6. nginx + TLS: instala la plantilla del sitio, ejecuta certbot para tu hostname, activa el sitio.
  7. Compilar y ejecutar svxdr:
cd svxdr && CGO_ENABLED=0 go build -trimpath -o svxdr . && cd ..
sudo install -m0755 svxdr/svxdr /usr/local/bin/svxdr
sudo cp install/svxdr.json.example /etc/svxlink/svxdr.json   # then edit it
sudo cp install/systemd/svxdr.service /etc/systemd/system/svxdr.service
sudo systemctl daemon-reload && sudo systemctl enable --now svxdr
curl -s http://127.0.0.1:8098/healthz        # -> ok

Dos archivos de configuración guardan los ajustes: auth/config.php (backend web — contraseña de Redis, correo, base_url, MQTT) y /etc/svxlink/svxdr.json (el demonio — Redis, los tres puertos, semillas de federación). Copia cada uno de su .example y edítalo.

Crear el primer administrador

Una CLI incluida crea la primera cuenta (y marca su correo como verificado):

cd /var/www/html/svxportal
sudo -u www-data php svx-mkadmin.php

Pide indicativo, nombre, correo, ubicación, nivel de admin y una contraseña. Niveles: 1 = usuario normal, 2 = admin (cuentas, nodos, certificados, talkgroups), 3 = super-admin (también secretos de reflector/MQTT y gestión de otros admins). Los demás se registran solos en el sitio y verifican por correo.

Uso

Abre https://YOUR.HOST.NAME/. La navegación superior tiene:

Vista Muestra
Nodes Nodos conectados, con un aviso emergente cuando alguien habla.
Reflector clients Lista buscable de todos los clientes conectados.
Monitor → Nodes / Trunks / Topology Monitor en vivo; Topology dibuja toda la red — tu reflector en el centro, otros reflectores en anillo, enlaces de trunk entre ellos.
TG Monitor Quién está en cada talkgroup (lado SVX y lado DMR).
Lastheard Actividad reciente.
CTCSS Table Tonos TX/RX por nodo, 2 m vs. UHF.
Changelog Registro de cambios del proyecto.

Una página de Help integrada (/help.html) tiene pestañas para el Portal, SvxLink, SvxReflector, GeuReflector, AllStar y más.

Conviene saber / advertencias honestas

⚠ Las páginas de admin del reflector necesitan scripts auxiliares que escribes tú. Las páginas Admin → Reflector / Certificates / Node-control / MQTT llaman a ayudantes sudo propiedad de root en /usr/local/sbin/ (svxreflector-pty, svxreflector-systemctl, svxreflector-users, svx-mqtt-provision) que no se incluyen — son específicos de tu máquina. Todo lo demás funciona sin ellos.
  • ¿Pierdes la sesión tras una página? No estás en HTTPS (la cookie es Secure) o base_url está mal.
  • ¿Vistas en vivo vacías? svxdr no está en ejecución — revisa systemctl status svxdr y curl http://127.0.0.1:8098/healthz. El reflector sigue funcionando igual.
  • ¿Sin correo de verificación? PHP mail() falla en silencio sin un MTA — configura un relé SMTP.
  • ¿La API de admin dice «exec disabled»? Nunca añadas exec a disable_functions de PHP; el portal lo necesita.

Resolución de problemas

Síntoma Comprobar
500 en cualquier auth/*.php /var/log/nginx/svxportal-error.log y journalctl -u php8.4-fpm — normalmente contraseña de Redis incorrecta, falta php-redis, o www-data no está en el grupo redis.
«Not connected» / vistas vacías svxdr caído → nada en 127.0.0.1:8098.
Puertos Confirma la cadena 8099 → 8090 → 8098 → nginx en /etc/svxlink/svxdr.json y el sitio nginx.

Véase también

  • SvxSpot Dashboard — el panel para un solo nodo (mucho más simple).
  • Hamradio — SvxReflector y el resto de guías de voz digital.
  • Autor: SA7AUX <bjorne@sa7aux.se>. AGPL-3.0-or-later.