Cómo instalar Gotify - Servidor de notificaciones push en Docker

Gotify | Push Notifications | Docker

Gotify: Servidor de notificaciones push autohospedado en Docker

Envía notificaciones a tu teléfono desde scripts, monitoreo y aplicaciones. Completamente autohospedado, sin dependencias externas, sin mensualidades. Alternativa open source a Pushover y Firebase.

¿Qué es Gotify?


Gotify es un servidor de notificaciones push autohospedado escrito en Go. Permite enviar mensajes en tiempo real a Android, web y aplicaciones de escritorio usando WebSocket, sin depender de servicios terceros como Firebase Cloud Messaging o Apple Push Notifications.

La filosofía de Gotify es simple pero poderosa: notificaciones sin intermediarios, sin comisiones, sin límites. Perfecto para alertas de monitoreo (Prometheus, Grafana, Zabbix), fallos de backup, errores de cron jobs, deploys de CI/CD, y cualquier situación donde necesites notificar rápidamente a tu teléfono desde cualquier script o aplicación.

Ventajas clave: Sin costo, sin límite de mensajes, toda tu infraestructura centralizada, WebSocket para entrega instantánea, prioridades configurables, incluso funciona sin Internet si los dispositivos están en la misma red local.

Características principales

API REST simple

Envía notificaciones con un simple curl. No necesita SDK ni librerías complejas.

WebSocket para tiempo real

Notificaciones llegan al teléfono en menos de 100ms. Mejor que polling.

Aplicaciones con tokens

Crea aplicaciones separadas (Backup, Monitoreo, Deploy) con tokens únicos.

Niveles de prioridad

Prioridad 1-3: silencioso, 4-7: normal, 8-10: vibración/sonido urgente.

App Android oficial

Disponible en F-Droid, Google Play y GitHub. Notificaciones con sonido/vibración.

Web app con notificaciones

Acceso desde navegador con notificaciones push en navegadores compatibles.

Base de datos SQLite

Almacenamiento local de mensajes, sin servicios externos.

Interfaz limpia

Dashboard simple para gestionar aplicaciones, clientes y historial de mensajes.

Sin dependencias

Binario único. No necesita base de datos externa, Redis, o servicios.

Multi-aplicación

Un servidor para monitoreo, backups, deploys con tokens separados.

URLs en notificaciones

Notificaciones pueden incluir URLs clicables para ir directamente a dashboards.

Markdown soportado

Mensajes pueden incluir formato Markdown para textos enriquecidos.

Requisitos del sistema

  • Docker instalado (usa menos de 50 MB de RAM)
  • 128 MB de RAM mínimo (funciona en Raspberry Pi, VPS pequeños)
  • 10-100 MB de espacio en disco según cantidad de mensajes
  • Puerto 80 o 8080 disponible (configurable)
  • Opcional: HTTPS con reverse proxy (Nginx, Caddy)

Instalación rápida

Opción 1: Docker Run (30 segundos)

docker run -d \ --name gotify \ -p 8080:80 \ -v gotify-data:/app/data \ -e GOTIFY_DEFAULTUSER_PASS="admin-password" \ gotify/server:latest

Accede a http://localhost:8080 con credenciales admin / admin-password

Opción 2: Docker Compose (recomendado)

version: '3.8' services: gotify: image: gotify/server:latest container_name: gotify restart: unless-stopped ports: - "8080:80" volumes: - gotify-data:/app/data environment: - GOTIFY_DEFAULTUSER_PASS=tu-password-segura - GOTIFY_DEFAULTUSER_NAME=admin - TZ=Europe/Madrid volumes: gotify-data:
docker compose up -d

Primeros pasos

Paso 1: Cambiar contraseña admin

  1. Accede a http://localhost:8080
  2. Inicia sesión con admin / admin-password
  3. Ve a Users en el menú derecha
  4. Haz clic en el usuario admin y cambia la contraseña

Paso 2: Crear aplicación para notificaciones

  1. Ve a Applications en el panel
  2. Haz clic en Create Application
  3. Nombre: Server Alerts
  4. Se genera automáticamente un token (ej: Axxxxxxxxxxxxxxxxxx)
  5. Guarda el token, lo usarás para enviar mensajes

Paso 3: Instalar app Android

  1. Descarga desde F-Droid o Google Play
  2. Abre la app y entra la URL: http://tu-servidor:8080
  3. Usa las credenciales admin
  4. La app se conectará y recibirá notificaciones en tiempo real

Enviar notificaciones desde scripts

Ejemplo básico con curl

# Cambiar TOKEN y URL según tu configuración curl -X POST "http://localhost:8080/message" \ -H "X-Gotify-Key: Axxxxxxxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "title": "Backup completado", "message": "Backup de base de datos finalizado exitosamente", "priority": 5 }'

Con prioridad y URL

curl -X POST "http://localhost:8080/message" \ -H "X-Gotify-Key: Axxxxxxxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "title": "Error crítico", "message": "Disco lleno en /var/log - 95% utilizado", "priority": 10, "extras": { "client::notification": { "click": { "url": "https://grafana.tudominio.com/d/disk-usage" } } } }'

Niveles de prioridad

  • 1-3: Bajo (silencioso, solo aparece en app)
  • 4-7: Normal (notificación estándar)
  • 8-10: Urgente (vibración + sonido)

Integraciones con herramientas populares

Monitoreo con Prometheus/Alertmanager

receivers: - name: 'gotify' webhook_configs: - url: 'http://gotify:8080/message?token=Axxxxxxxxxx' send_resolved: true

Script de backup

#!/bin/bash # Hacer backup mysqldump -u user -p password database > backup.sql # Enviar notificación if [ $? -eq 0 ]; then curl -X POST "http://gotify:8080/message" \ -H "X-Gotify-Key: Axxxxxxxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{"title": "Backup OK", "message": "Database backup completado", "priority": 2}' else curl -X POST "http://gotify:8080/message" \ -H "X-Gotify-Key: Axxxxxxxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{"title": "Backup FAILED", "message": "Error en backup de database", "priority": 10}' fi

GitHub Actions

- name: Send Gotify notification run: | curl -X POST "http://gotify.tudominio.com/message" \ -H "X-Gotify-Key: ${{ secrets.GOTIFY_TOKEN }}" \ -H "Content-Type: application/json" \ -d '{ "title": "Deploy completado", "message": "Version ${{ github.ref }} deployed", "priority": 5 }'

Configurar HTTPS con Caddy

gotify.tudominio.com { reverse_proxy localhost:8080 }

Con WebSocket (importante para tiempo real)

location / { proxy_pass http://localhost:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }

Gestión y mantenimiento

Ver logs

docker compose logs -f gotify

Crear usuario adicional (CLI)

docker compose exec gotify \ /app/gotify -create-user admin2 -pass "new-password"

Reiniciar Gotify

docker compose restart gotify

Detener Gotify

docker compose down

Actualizar a la última versión

docker compose pull docker compose up -d

Backup de datos

docker run --rm \ -v gotify-data:/data \ -v $(pwd):/backup \ alpine tar czf /backup/gotify-backup-$(date +%Y%m%d).tar.gz -C /data .

Casos de uso

  • Monitoreo de servidores: Alertas de Prometheus, Grafana, Zabbix
  • Backups: Notificación cuando backups completan o fallan
  • Cron jobs: Alertas de cron jobs fallidos a las 3 AM
  • CI/CD: Notificación de deploys completados o fallos en tests
  • Sistemas de alertas: Temperatura de servidores, uso de disco
  • Home automation: Alertas de IoT, intrusiones, automatizaciones
  • Desarrollo: Notificaciones de errores en logs, aplicaciones

Comentarios

Entradas populares de este blog

NAS SYNOLOGY DSM 7.1 en VMware ESXI - Guía instalación y configuración Synology DSM 7.1 en VMWARE

Solución al error: «user is not in the sudoers file» en Debian

Comando "NET USE", uso, parámetros y algunos ejemplos de uso