Cómo instalar Gotify con Docker
Índice de contenidos
- Puntos clave
- ¿Qué es Gotify y para qué sirve?
- ¿Cómo es el docker-compose.yml de Gotify?
- ¿Cómo crear aplicaciones y tokens?
- ¿Cómo enviar mensajes por la API de Gotify?
- ¿Gotify o ntfy: cuál elegir?
- Preguntas frecuentes
- ¿Necesito una app de móvil para recibir las notificaciones?
- ¿Puedo usar Gotify con una base de datos externa como PostgreSQL?
- ¿Cómo hago copias de seguridad de Gotify?
- Conclusión
- Fuentes
Gotify es un servidor de notificaciones push autoalojado, escrito en Go y con licencia MIT, que reúne mensajes de tus scripts y servicios en un solo sitio. Esta guía lo levanta con Docker Compose en el puerto 80, crea una aplicación con su token y envía el primer mensaje por su API REST con curl.
Cuando gestionas tus propios servidores, quieres enterarte al instante de que una copia de seguridad falló, de que un contenedor se reinició o de que Watchtower actualizó una imagen, y prefieres no depender de servicios de terceros para ese aviso. Para eso está Gotify: un servidor de notificaciones push autoalojado, minimalista y muy fácil de montar, que recibe mensajes de tus scripts y servicios y los reenvía a tu móvil o navegador. En esta guía lo levantas con Docker Compose, creas una aplicación con su token y envías tu primer mensaje por su API REST. La misma explicación está disponible en inglés.
Puntos clave
- Gotify es un servidor de notificaciones con licencia MIT y unas 15.300 estrellas en GitHub; su última versión es la v2.9.1, publicada el 28 de febrero de 2026.
- El servidor está escrito en Go y su panel web en TypeScript; se distribuye como una única imagen,
gotify/server, que escucha por defecto en el puerto 80 dentro del contenedor. - Guarda todo en una base de datos SQLite (
data/gotify.db) dentro de/app/data, así que no necesitas una base de datos externa para empezar; admite MySQL o PostgreSQL si lo prefieres. - Funciona con dos tipos de token: los de aplicación, que usan tus scripts para enviar mensajes, y los de cliente, que usan las apps para recibirlos por WebSocket.
- Enviar un aviso es tan simple como un
POSTa/messagecon la cabeceraX-Gotify-Key; la prioridad va de 0 a 10 y decide cómo suena y vibra la notificación en Android.
¿Qué es Gotify y para qué sirve?
Gotify es un servidor de notificaciones push que instalas en tu propia máquina. Su repositorio oficial lo resume sin rodeos: "un servidor sencillo para enviar y recibir mensajes". La idea es tener un único punto al que tus scripts, tareas programadas y servicios envían avisos, y desde el que tu móvil o navegador los reciben en tiempo real, sin pasar por Firebase, sin cuentas de terceros y sin que tus mensajes salgan de tu infraestructura.
El diseño es deliberadamente minimalista. Un solo binario de Go levanta a la vez la API REST, el panel web y el flujo de mensajes en vivo. No hay recolectores, ni colas externas, ni dependencias pesadas: por defecto guarda los datos en un fichero SQLite, de modo que arranca con un único contenedor y un volumen. Esa sencillez es su gran baza frente a soluciones más completas, y la razón por la que encaja tan bien en un homelab o en un servidor modesto.
El flujo de trabajo tiene dos caras. Por un lado, defines aplicaciones: cada una representa una fuente de mensajes (por ejemplo "Backups" o "Servidor web") y tiene su propio token con el que enviar avisos. Por otro, los clientes (la app de Android, el panel web o cualquier otro consumidor) se suscriben con un token de cliente y reciben los mensajes al instante por WebSocket. Es el mismo modelo de aviso propio que persigue ntfy, con un enfoque algo distinto que compararemos al final.
¿Cómo es el docker-compose.yml de Gotify?
Gotify se despliega con un solo servicio. Crea una carpeta para el proyecto y guarda dentro este docker-compose.yml. Publica el puerto 80 del contenedor en el 8080 del anfitrión (así no necesitas privilegios de root para un puerto bajo), persiste los datos en un volumen con nombre montado en /app/data, y fija la versión 2.9.1 en lugar de :latest, porque una etiqueta flotante puede cambiar de versión en un simple reinicio y sorprenderte con cambios que no esperabas:
services:
gotify:
image: gotify/server:2.9.1
container_name: gotify
restart: unless-stopped
ports:
- "8080:80"
environment:
TZ: "Europe/Madrid"
GOTIFY_DEFAULTUSER_NAME: "admin"
GOTIFY_DEFAULTUSER_PASS: "cambia-esta-contrasena"
volumes:
- gotify_data:/app/data
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:80/health"]
interval: 60s
timeout: 5s
retries: 3
volumes:
gotify_data:
Arráncalo y comprueba que responde:
docker compose up -d
docker compose ps
Abre http://IP-DEL-SERVIDOR:8080 en el navegador. Gotify crea en el primer arranque un usuario administrador; sus credenciales por defecto son admin / admin, pero en el compose de arriba ya has cambiado la contraseña con GOTIFY_DEFAULTUSER_PASS (esa variable solo surte efecto la primera vez, cuando se crea la base de datos). Conviene gestionar esa clave y los tokens como secretos, tal y como se explica en la guía de variables de entorno y secretos en Docker, y no dejarlos escritos en claro en un compose que subes a un repositorio.
Si vas a acceder a Gotify desde fuera de tu red local, no publiques el puerto directamente: ponlo detrás de un proxy inverso con HTTPS. La forma más cómoda en esta serie es delegarlo en Traefik, añadiendo al servicio las etiquetas del router correspondiente; si empiezas de cero, repasa antes cómo instalar Docker en Ubuntu 24.04.
¿Cómo crear aplicaciones y tokens?
Con Gotify en marcha e iniciada la sesión como administrador, el primer paso es crear una aplicación. En el menú lateral, entra en "Apps" y pulsa "Create Application". Dale un nombre descriptivo (por ejemplo "Backups") y, si quieres, una descripción y un icono. Al confirmar, Gotify genera un token de aplicación: una cadena que empieza por A. Ese token es la llave para enviar mensajes a esa aplicación, y puedes verlo o regenerarlo en cualquier momento desde la misma pantalla.
Conviene crear una aplicación por cada fuente de avisos: una para las copias de seguridad, otra para el servidor web, otra para las actualizaciones de contenedores. Así, en el panel y en la app del móvil, los mensajes quedan agrupados por origen y puedes silenciar o priorizar cada uno por separado. Si quieres que Watchtower te avise cuando actualice una imagen, por ejemplo, le das el token de una aplicación llamada "Actualizaciones" y sus notificaciones aparecerán ordenadas ahí.
Los tokens de cliente son el otro lado de la moneda. Se crean en la sección "Clients" y los usan los consumidores (la app de Android o cualquier programa que quiera recibir los mensajes en vivo por el WebSocket /stream). No los confundas: el token de aplicación sirve para enviar, el de cliente para recibir. Esta separación es lo que te permite repartir permisos con cuidado, dando a cada script solo la capacidad de publicar en su aplicación.
¿Cómo enviar mensajes por la API de Gotify?
Aquí está la parte práctica y la razón por la que Gotify es tan cómodo: enviar una notificación es un simple POST a /message con el token de aplicación en la cabecera X-Gotify-Key. Solo el campo message es obligatorio; title y priority son opcionales. Con curl, un aviso completo se ve así:
curl "http://IP-DEL-SERVIDOR:8080/message" \
-H "X-Gotify-Key: TU-TOKEN-DE-APP" \
-F "title=Copia de seguridad" \
-F "message=La copia nocturna terminó sin errores" \
-F "priority=5"
Si el token es válido, Gotify responde con el mensaje en JSON y, al instante, el aviso aparece en el panel web y en cualquier cliente conectado. Desde un script en Bash, Python o el lenguaje que uses, integrarlo es cuestión de una línea; por eso encaja tan bien al final de una tarea de cron, un hook de despliegue o un healthcheck casero.
La prioridad merece atención porque cambia el comportamiento en el móvil. El valor va de 0 a 10: con 0 el mensaje aparece en el historial pero no genera una notificación push; de 1 a 3 suena; de 4 a 7 suena y vibra; y de 8 a 10 se muestra como aviso destacado, pensado para lo urgente. Reserva la prioridad alta para lo que de verdad no puede esperar (un servicio caído), y usa la baja para el ruido informativo, de modo que tu teléfono no acabe ignorando todo por igual.
¿Gotify o ntfy: cuál elegir?
Gotify y ntfy resuelven el mismo problema (notificaciones push propias) con filosofías distintas, y merece la pena conocer las diferencias antes de decidir:
- Modelo de envío. Gotify organiza los mensajes por aplicaciones, cada una con su token; tienes que crear la aplicación en el panel antes de enviar. ntfy usa temas (topics): publicas en una URL con el nombre del tema y ya está, sin registro previo.
- Clientes móviles. Gotify tiene una app oficial de Android sólida (en Google Play y F-Droid), pero no ofrece app oficial para iOS; ahí depende de UnifiedPush. ntfy publica apps oficiales tanto para Android como para iOS, lo que suele inclinar la balanza si usas iPhone.
- Cuenta y acceso. Gotify siempre requiere iniciar sesión: es un servidor cerrado con usuarios y tokens. ntfy puede funcionar sin cuenta para lo básico y controlar el acceso solo cuando lo necesitas.
- Simplicidad. Gotify es más compacto: un contenedor, SQLite y un panel donde ves el historial. ntfy ofrece más opciones (adjuntos, acciones, correo entrante) a cambio de algo más de configuración.
En la práctica, elige Gotify si quieres un buzón privado y ordenado por origen, usas Android y valoras la mínima superficie; elige ntfy si necesitas app de iOS, prefieres el modelo de temas sin registro o quieres funciones más avanzadas. Muchos homelabs incluso conviven con ambos según el caso de uso.
Preguntas frecuentes
¿Necesito una app de móvil para recibir las notificaciones?
No es imprescindible: el propio panel web de Gotify muestra los mensajes en tiempo real, así que con tener la pestaña abierta ya los ves. Ahora bien, para recibir avisos con el teléfono bloqueado lo natural es instalar la app oficial de Android, disponible en Google Play y en F-Droid, y apuntarla a la URL de tu servidor con un token de cliente. En iOS no hay app oficial de Gotify; la alternativa es usar un cliente compatible con UnifiedPush.
¿Puedo usar Gotify con una base de datos externa como PostgreSQL?
Sí. Por defecto Gotify usa SQLite, que es suficiente para un uso personal o de homelab y no requiere ningún servicio adicional. Si prefieres MySQL o PostgreSQL, se configuran con las variables GOTIFY_DATABASE_DIALECT y GOTIFY_DATABASE_CONNECTION, apuntando al contenedor de la base de datos. Para la mayoría de instalaciones, SQLite dentro del volumen es la opción más sencilla y la que menos mantenimiento pide.
¿Cómo hago copias de seguridad de Gotify?
Como todo vive en /app/data (la base de datos SQLite, las imágenes subidas y los certificados), basta con respaldar ese volumen. Puedes detener el contenedor y copiar el volumen gotify_data, o copiar el fichero gotify.db en caliente. Al restaurar, recuperas usuarios, aplicaciones y tokens tal cual estaban. Guardar ese volumen en tu rutina de copias es todo lo que necesitas para no perder la configuración.
Conclusión
Gotify es la vía más directa para tener notificaciones push propias sin ceder tus avisos a terceros. Con un único docker-compose.yml, un volumen y unos minutos, levantas el servidor, creas una aplicación con su token y ya puedes disparar mensajes desde cualquier script con un curl a /message. El siguiente paso natural es conectar tus servicios: que Watchtower te avise de cada actualización, encaminar los healthchecks de tu servidor a Gotify y, si además usas iPhone o quieres el modelo de temas, comparar la experiencia con ntfy para quedarte con el que mejor encaje.