Dev Tools
Immich Photo Manager Gestión de fotos con IA para Immich, 94 herramientas, Immich 2.x y 3.x
Go-Docs MCP Install and Go: tu IA lee cualquier documento

Gotify Commander

Un mando a distancia para tus servidores. El primer plugin de Gotify que responde.

Gotify 3.1.1 · 2.9.1 Linux amd64 / arm64 / armv7 Licencia MIT Código Abierto Plugin Gotify v0.5.0

El Problema

Estás paseando. Tu móvil vibra: un servicio necesita reiniciarse. Con cualquier otra herramienta necesitarías un portátil, una terminal y una sesión SSH. Se acabó el paseo.

La Solución

Con gotify-commander escribes restart nginx y recibes ✓ nginx reiniciado. Es la misma app que ya usas para alertas, y ahora responde. Sin portátil, sin SSH, sin terminal. El paseo continúa.

▮▮
Comandos y gestión de servicios desde el móvil
▶
Localización GPS con geocodificación inversa

Características

💻

27 Comandos, 6 Categorías

Reinicia servicios, comprueba discos, consulta logs, analiza tráfico, recibe un resumen de salud cada día, gestiona los contenedores Docker permitidos o localiza tu móvil, todo desde la app de Gotify que ya usas.

🌐

Panel de Control Web

Una consola en el navegador, protegida con contraseña. Una línea de comandos que sugiere comandos, máquinas y servicios mientras escribes, los comandos de las categorías de tu YAML a un clic y una sesión con cada comando ejecutado y su salida.

🔄

Arquitectura de App Unificada

Comandos y respuestas fluyen por una única app Gotify. Envía un comando, recibe la respuesta como la siguiente notificación. Sin canales separados que gestionar.

🖥

Multi-Máquina

Servicios del VPS con systemctl, servicios del Mac con SSH + launchctl. Con os: darwin en un target Mac, los diagnósticos usan lo que tiene macOS. Apunta a cualquier máquina por nombre: free mac, uptime vps.

🔒

Seguridad Primero

Contraseña del panel generada por defecto, solo administradores y lista blanca de comandos sin passthrough a la shell. Cada comando tiene un tiempo límite, las claves de host SSH se comprueban y los mensajes se limitan a 20 por minuto. Reboot requiere target explícito.

📍

GPS Locate y Analíticas

Localiza tus dispositivos con locate. Analiza tráfico con rhit, analíticas web con GoAccess. Verificación de certificados TLS, consultas DNS, health probes HTTP.

⚙

Config YAML Dinámica

Añade un servicio al YAML y aparece en los comandos, la web UI y los informes de estado. Categorías, dominios, puertos, alias y favicons salen todos de la config.

⭐

Primer Plugin Bidireccional

Todos los plugins de Gotify existentes van en un solo sentido y reenvían a Telegram, Slack o email. gotify-commander va en los dos: escribes un comando y recibes el resultado.

Arquitectura

gotify-commander se carga como un plugin nativo de Gotify (.so). Intercepta mensajes en una app de comandos unificada, ejecuta el comando whitelisted correspondiente y devuelve el resultado como notificación en la misma app.

# Data flow 📱 Phone → Gotify Client → Gotify Server → gotify-commander (.so) ↓ systemctl / SSH+launchctl → Target Machine ↓ Result notification → 📱 Phone # Web UI 💻 Browser → https://gotify.example.com/plugin/<id>/custom/<token>/ → Control Panel

El plugin se ejecuta dentro del proceso del servidor Gotify: sin daemon aparte, sin puertos extra, sin dependencias externas. Los comandos van a systemctl local, a SSH/launchctl remoto o a herramientas de diagnóstico, según la configuración YAML. La web UI se sirve en la ruta webhook del plugin.

Inicio Rápido

Descarga el fichero de tu versión de Gotify, cópialo en la carpeta de plugins y reinicia Gotify. Menos de dos minutos.

Descargas

Elige el fichero de tu versión de Gotify; gotify version te dice cuál tienes. Gotify 3.x necesita la app de Android 2.10.1 o posterior. Las versiones anteriores están en la página de releases.

Instalación

  1. Descarga el fichero de tu versión de Gotify y tu arquitectura, y compruébalo con su .sha256.
  2. Cópialo en la carpeta de plugins de Gotify: normalmente /opt/gotify/data/plugins/, o la carpeta plugins del volumen de datos de Docker.
  3. Reinicia Gotify.
  4. En el WebUI de Gotify, crea un cliente (Clients → Create client) y copia su token en ese momento: Gotify 3 solo lo enseña una vez.
  5. Abre Plugins → gotify-commander, pega tu YAML en Configure y activa el plugin.
  6. La página del plugin muestra ahora el enlace al panel de control y la contraseña generada del panel.
  7. Envía help desde la app de Gotify en tu móvil.
# Ejemplo: Gotify 3.1.1 en amd64 sha256sum -c gotify-commander-linux-amd64-for-gotify-3.1.1.so.sha256 sudo cp gotify-commander-linux-amd64-for-gotify-3.1.1.so /opt/gotify/data/plugins/ sudo systemctl restart gotify

Referencia de Comandos

Help command output

27 comandos en 6 categorías. Todos aceptan alias y targets de máquina.

🔄 Gestión de Servicios (7)

Comando Argumentos Descripción
status[service]Estado de todos o un servicio específico
restart<service>Reiniciar un servicio (soporta aliases)
start<service>Iniciar un servicio
stop<service>Parar un servicio
logs<service>Últimas N líneas de logs del servicio
services—Listar todos los servicios gestionados
help—Mostrar todos los comandos y servicios

📊 Diagnósticos de Sistema (9)

Comando Argumentos Descripción
free[vps|mac]Uso de memoria
df[vps|mac]Uso de disco
uptime[vps|mac]Uptime + carga media
top[vps|mac]Procesos top por CPU/memoria
who[vps|mac]Usuarios conectados
ping[vps|mac]Health check: responde con "pong" + latencia
ip[vps|mac]Direcciones IP
ports[vps|mac]Puertos abiertos
connections[vps|mac]Estadísticas de sockets

🌐 Monitoring y Analytics (4)

Comando Argumentos Descripción
traffic[service]Análisis de tráfico Nginx vía rhit
analytics—Resumen de analíticas web vía GoAccess
certs—Expiración de certificados SSL
updates—Actualizaciones pendientes (apt)

📍 Localización (1)

Comando Argumentos Descripción
locate<lat> <lon>Geocodificación inversa GPS vía OpenStreetMap

🧰 Operaciones (4)

Comando Argumentos Descripción
failed[vps|mac]Unidades de systemd que han fallado; en un target macOS avisa de que no está disponible
health—Un solo resumen: discos al 85% o más, carga, memoria, unidades fallidas y certificados que caducan en 14 días o menos
digest—El resumen de salud en el momento; con el digest activado llega además cada día
dockerps [name] / restart <name> / logs <name>Solo los contenedores de la lista permitida; restart cuenta como peligroso

Los cuatro comandos de Operaciones son nuevos en 0.4. docker solo actúa sobre los contenedores de docker.allowed_containers, y digest puede llegar solo cada día a la hora digest.at si digest.enabled está activo.

⚠ Peligro (2)

Comando Argumentos Descripción
reboot<vps|mac>Reiniciar máquina (requiere target explícito)
shutdown<vps|mac>Apagar máquina (requiere target explícito)

Aliases universales: mem/memory → free · disk/space → df · log → logs · up → uptime. Escribir solo el nombre de un servicio equivale a status <servicio>.

¿Por qué Gotify Commander?

Todos los demás plugins de Gotify reenvían notificaciones a otro sitio. Este te permite actuar sobre ellas.

gotify-commander Telegram Bot Uptime Kuma
Self-hosted ✅ ❌ ✅
Bidireccional ✅ ✅ ❌
Dentro de Gotify ✅ ❌ ❌
Sin servicios terceros ✅ ❌ ✅
Gestión de servicios ✅ varía ❌
Multi-máquina (SSH) ✅ varía ❌
Panel de control web ✅ ❌ ✅
Tráfico y analíticas ✅ ❌ ❌
GPS locate ✅ ❌ ❌
Seguridad Tailscale ✅ ❌ ❌
App ya instalada ✅ ✅ ❌
El panel de control: la línea de comandos, los comandos y la sesión

Panel de Control Web

Una consola para tus máquinas en el navegador, servida por el plugin dentro de Gotify. El enlace está en la página del plugin, junto a la contraseña.

  • Una línea de comandos que sugiere comandos, máquinas, servicios y contenedores mientras escribes: Tab completa, Enter ejecuta, la flecha arriba recupera y / o Ctrl+K la enfoca
  • Los comandos de las categorías de tu YAML al lado de la salida en pantalla ancha y en pestañas en el móvil, con un selector de servicios agrupado por máquina (favicon, descripción y puerto)
  • Una sesión con cada comando, si funcionó, lo que tardó y su salida, con botones para copiarla, repetirlo y quitarlo. El navegador la guarda 24 horas
  • Los comandos peligrosos preguntan antes en un diálogo, con Cancelar enfocado
  • Las respuestas en Markdown salen como tablas y enlaces, y locate muestra su mapa
  • Tema claro y oscuro que sigue al sistema, tamaño de página del 50 % al 125 % y un candado que olvida la contraseña
Sugerencias de servicios mientras se escribe un comando
Sugerencias mientras escribes
El diálogo que pregunta antes de un comando peligroso
Confirmación de un comando peligroso

El panel está protegido por defecto. Si no hay contraseña, el plugin genera una y la muestra solo en la página del plugin en Gotify; pon tu propia contraseña en web_password. El navegador la guarda hasta que cierras la pestaña.

Configuración

Toda la configuración vive en un único fichero YAML, editable desde el WebUI de Gotify. Define tus servicios, categorías, máquinas, dominios y alias. Un servicio que añades aparece en todas partes.

# Ejemplo de configuración YAML gotify: server_url: "http://localhost:2006" base_url: "https://gotify.example.com" client_token: "your-client-token" command_app_id: 1 web_password: "" # vacío = generada, se ve en la página del plugin # enabled_commands: [ping, status, restart, logs, health] # require_confirm: [reboot, shutdown, stop] defaults: timeout: 30s rate_limit_per_minute: 20 replay_window: 5m categories: - label: "Machine" type: machine commands: [free, df, uptime, who, top, ports, ip, connections, updates, ping] - label: "Sites" type: service commands: [restart, stop, start, logs, traffic] - label: "Danger" type: machine danger: true commands: [reboot, shutdown] services: nginx: description: "🌐 Web Server" domain: "example.com" machine: vps port: 80 aliases: [ng, web] systemd: nginx homeserver: description: "🏠 Home Server" machine: mac port: 8080 aliases: [home] launchd: com.myapp.service ssh_targets: mac: host: "100.x.x.x" # Tailscale IP recommended port: 22 user: "admin" key_file: "/home/admin/.ssh/id_rsa" known_hosts_file: "/home/admin/.ssh/known_hosts" os: darwin # linux (por defecto) o darwin para un Mac docker: allowed_containers: [myapp] digest: enabled: true at: "07:30"

Seguridad

  • Contraseña del panel: el panel de control web está protegido por defecto. Si no hay contraseña, el plugin genera una y la muestra solo en la página del plugin en Gotify. Con web_password pones la tuya.
  • Solo administradores: solo los administradores de Gotify tienen una instancia del plugin que funciona. Al resto, la página del plugin les muestra un aviso y no se arranca nada.
  • Lista blanca de comandos: solo se ejecutan los 27 comandos registrados, nada arbitrario. Para permitir menos, pon los que quieras en enabled_commands.
  • Sin shell: los comandos se ejecutan con exec.Command sin shell, salvo dos scripts fijos que reciben lo que escribes solo como argumentos. Los nombres de servicio deben cumplir ^[a-zA-Z0-9][a-zA-Z0-9._-]*$ y estar en tu lista configurada.
  • Tiempos límite: cada comando tiene un tiempo límite (30 s por defecto) que mata todo su grupo de procesos, así que no queda nada colgado.
  • Claves de host SSH: los targets SSH se comprueban contra known_hosts, sin conexión sin verificar como alternativa. Añade la clave con el usuario que ejecuta Gotify: ssh-keyscan -p <puerto> <host> >> ~/.ssh/known_hosts.
  • Confirmación (opcional): los comandos de require_confirm piden un código de un solo uso antes de ejecutarse cuando llegan como mensaje.
  • Límite de ritmo: 20 mensajes por minuto por instancia del plugin. El que pasa del límite no se ejecuta, y la respuesta dice cuánto esperar.
  • Reboot con target explícito: reboot solo devuelve un error, así que ninguna máquina se reinicia por accidente.
  • SSH solo por clave: sin autenticación por contraseña.
  • Registro de auditoría: cada comando queda registrado con hora, comando, origen, resultado y duración.
  • VPN: pon Gotify detrás de Tailscale o WireGuard y no lo expongas a internet.

Cuando Gotify se reinicia

Los comandos enviados mientras el plugin estaba desconectado, por ejemplo durante un reinicio de Gotify, se ejecutan al reconectar si tienen menos antigüedad que la ventana de reenvío: replay_window, 5 minutos por defecto; 0s la desactiva.

Compatibilidad de plataforma

Un plugin de Go solo carga si se compiló con la misma versión de Go y de módulos que el servidor Gotify, así que cada release trae un fichero por versión de Gotify y arquitectura.

Plataforma Arquitectura Gotify
Linuxamd643.1.1 · 2.9.1
Linuxarm643.1.1 · 2.9.1
Linuxarm/v73.1.1 · 2.9.1

Construido Con

Un único plugin Go (.so) sin dependencias en runtime más allá del propio Gotify.

  • Plugin Go (.so): se carga dentro del propio servidor Gotify
  • Gotify Plugin API: integración de primera clase, sin hacks
  • SSH: gestión remota de máquinas con SSH estándar
  • Config YAML: legible, editable desde el WebUI
  • HTML, CSS y JavaScript sin framework: el panel de control es una sola página, servida con una Content Security Policy estricta
  • Gin: router HTTP ligero para el panel de control
Gimme a coffee 😋
Buy Me A Coffee

Construyo las herramientas que me faltan, y las regalo.
Si alguna te ahorró tiempo, un café mantiene la siguiente en camino.

Buy Me A Coffee QR

¿Listo para gestionar tus servidores desde el móvil?

gotify-commander es gratuito, open source, y listo para usar con tu instancia Gotify.

7 Or gimme a star 🤗