Hamradio/reflector dashboard/es
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.
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
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:
- Obtener el código:
git clone https://git.sa7aux.se/bjorne/reflector-dashboard.git - Desplegar los archivos web con
rsyncen/var/www/html/svxportal(propiedad dewww-data). - Montar un Redis dedicado en un socket unix, con contraseña; añade
www-dataal gruporedis. - Añadir un segundo pool PHP-FPM (
svxadmin) usado solo por la API de admin del reflector. - Crear el archivo de lista de talkgroups
/etc/svxlink/tglist.json(vía la regla tmpfiles incluida). - nginx + TLS: instala la plantilla del sitio, ejecuta
certbotpara tu hostname, activa el sitio. - 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
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) obase_urlestá mal. - ¿Vistas en vivo vacías?
svxdrno está en ejecución — revisasystemctl status svxdrycurl 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
execadisable_functionsde 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.
