Por qué autoalojar Umami en un VPS
Umami es una alternativa ligera a Google Analytics: open source, sin cookies de rastreo, sin transferencia de datos a terceros. En un VPS, mantienes el control total — sin cuenta SaaS, sin límite de sitios, sin datos compartidos. La stack Docker es mínima: un contenedor Node.js para la aplicación y un contenedor PostgreSQL para la base de datos. La instalación completa toma menos de diez minutos en una VM estándar con acceso root, y tus datos permanecen en tu servidor.
Comparado con Google Analytics 4, Umami no requiere consentimiento para estadísticas anonimizadas en la mayoría de jurisdicciones europeas. Comparado con Matomo, su huella de memoria es significativamente menor, y su configuración Docker se reduce a un solo docker-compose.yml. Para una agencia que gestiona diez clientes, una única instancia Umami con diez sitios reemplaza una suscripción SaaS facturada por usuario o por dominio. La versión 2.14 (julio de 2026) añadió soporte nativo para eventos personalizados y un panel exportable en CSV — dos funciones largamente esperadas por los equipos de marketing.
Los beneficios concretos de un Umami autoalojado
- Conforme con la privacidad: sin cookies, sin datos personales y, a menudo, sin necesidad de banner de consentimiento.
- Sus estadísticas de audiencia permanecen en su servidor, sin compartirlas con terceros.
- Script de seguimiento de unos pocos kilobytes, sin cookies ni recogida de datos personales.
- Panel de control claro y multisitio desde una sola instancia.
- Coste fijo sea cual sea el volumen de páginas vistas.
Requisitos de hardware y software
Umami funciona en cualquier VPS con Docker instalado. El mínimo recomendado es 1 vCPU y 512 MB de RAM para uso personal o PYME; por encima de 200 000 páginas vistas mensuales, 1 GB de RAM evita ralentizaciones en PostgreSQL. Necesitarás: Docker Engine (≥ 20.10) y Docker Compose V2 (docker compose, no docker-compose), un dominio o subdominio apuntando a tu VPS, y un reverse proxy (nginx o Caddy) para servir Umami en HTTPS. Debian 12 y Ubuntu 22 son las distribuciones de referencia; los comandos siguientes asumen acceso root o sudo.
En el servidor, abre los puertos 80 y 443 en tu firewall (ufw allow 80/tcp && ufw allow 443/tcp). Umami solo necesita HTTPS expuesto externamente; el puerto de la aplicación (3000 por defecto) permanece interno y nunca se abre directamente. Si usas un VPS de ServOrbit, el grupo de seguridad predeterminado ya permite 80 y 443.
Desplegar Umami con Docker y HTTPS
Preparar el VPS y Docker
Por SSH, actualice el sistema e instale Docker con
curl -fsSL https://get.docker.com | sh. Creemkdir -p /opt/umami && cd /opt/umami.Escribir el docker-compose.yml
Defina dos servicios:
ghcr.io/umami-software/umami:postgresql-latesty una basepostgres. IndiqueDATABASE_URLy unAPP_SECRETaleatorio.Lanzar los contenedores
Ejecute
docker compose up -d. Umami escucha en local en el puerto 3000; la base de datos se inicializa automáticamente en el primer arranque.Configurar el reverse proxy
Con Caddy:
stats.su-dominio.com { reverse_proxy localhost:3000 }. El certificado Let's Encrypt se obtiene y se renueva automáticamente.Añadir su sitio y el script
Inicie sesión (admin/umami por defecto, cámbielo de inmediato), añada su sitio y pegue el snippet de seguimiento facilitado en el
<head>de sus páginas.
Problemas frecuentes en el arranque
Tres causas concentran la gran mayoría de los fallos reportados en las guías de la comunidad en 2026. Aquí están con su diagnóstico y solución.
1. Bucle de reinicio «Can't reach database server» — DATABASE_URL no coincide con POSTGRES_PASSWORD
Este es el error de copiar-pegar más frecuente: DATABASE_URL contiene la contraseña en texto claro dentro de la cadena de conexión, y esa contraseña debe ser exactamente la misma que el valor de POSTGRES_PASSWORD en el servicio db. Si cambia uno sin el otro, Umami arranca, falla al conectar con la base de datos y se reinicia en bucle — sin ningún mensaje de error claro en los logs de Docker.
Verifique que ambas variables sean coherentes:
# en .env o en el compose
POSTGRES_PASSWORD=contraseña_fuerte
# en DATABASE_URL, la misma contraseña en posición 3
DATABASE_URL=postgresql://umami:contraseña_fuerte@db:5432/umamiSi utiliza interpolación de variables (${POSTGRES_PASSWORD}), asegúrese de que Docker Compose esté cargando realmente su fichero .env.
2. Umami se detiene 5-10 segundos después del arranque — depends_on sin healthcheck
Por defecto, depends_on: db solo espera a que el contenedor PostgreSQL esté iniciado, no a que esté listo para aceptar conexiones. Umami intenta entonces conectarse mientras PostgreSQL todavía está inicializando sus ficheros de datos, falla y se detiene.
Añada un healthcheck en el servicio db y un condition: service_healthy en el depends_on de Umami:
services:
db:
image: postgres:15-alpine
healthcheck:
test: ["CMD-SHELL", "pg_isready -U umami"]
interval: 10s
timeout: 5s
retries: 5
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
depends_on:
db:
condition: service_healthyCon esta configuración, Umami solo arranca una vez que PostgreSQL responde en su socket.
3. Error 502 tras docker compose pull — el puerto publicado ha cambiado
Tras una actualización (docker compose pull + docker compose up -d), nginx puede devolver un error 502 si la configuración cambió entre versiones de la imagen: el puerto interno puede haber sido reasignado o el binding del host modificado. Compruebe primero el estado real de los contenedores:
docker compose psFíjese en la columna PORTS para confirmar que el contenedor Umami está publicando en el puerto esperado (3000 por defecto). Si el puerto ha cambiado, actualice la directiva proxy_pass (o reverse_proxy) en nginx o Caddy para reflejar el nuevo puerto, luego recargue el servicio (nginx -s reload o systemctl reload caddy).
4. docker-compose (v1) vs docker compose (v2) — fallo silencioso
Las guías publicadas antes de 2025 suelen usar docker-compose (guión), el cliente Python que ya no se mantiene. En una instalación nueva de Docker Engine, este comando no existe: el terminal simplemente devuelve command not found, sin indicar que v2 se llama docker compose (espacio). Comprueba con docker compose version — si responde, tienes v2. Todos los ejemplos de esta guía usan docker compose (v2).
Actualizar Umami
Haz una copia de seguridad
Antes de actualizar:
docker compose exec db pg_dump -U umami umami > umami-backup-$(date +%F).sql. Guarda este archivo fuera del volumen Docker — no sobrevivirá a su eliminación.Descarga la última imagen
docker compose pull. Umami publica sus versiones en GitHub (github.com/umami-software/umami/releases) — revisa las notas de versión para migraciones de esquema y cambios en variables de entorno.Reinicia la stack
docker compose up -d. Umami aplica las migraciones automáticamente. Revisa los logs condocker compose logs -f appy espera el mensajeListening on port 3000.Verifica la versión en la interfaz
Configuración → Acerca de. Si la versión no cambió, la imagen puede no haberse descargado:
docker compose imagesmuestra el digest de cada imagen en ejecución.Comprueba que el seguimiento funciona
Abre un sitio rastreado en una pestaña privada y espera 30 segundos — la página Tiempo real debe registrar la visita. Un 0 persistente tras reiniciar suele indicar un problema con el script de seguimiento en el frontend.
Umami Cloud vs auto-alojado
Umami ofrece planes Cloud gestionados (umami.is/pricing) desde 9 $/mes para equipos que prefieren no gestionar la infraestructura. El auto-alojamiento en un VPS tiene sentido si ya tienes una VM, gestionas varios sitios, o si la política de datos de tu organización prohíbe enviar datos a un SaaS externo — incluso uno compatible con el RGPD. Ambas opciones comparten el mismo código, las mismas funcionalidades y el mismo formato de exportación.
Cambie la contraseña de administrador por defecto desde la primera conexión y haga copias de seguridad regulares de la base PostgreSQL: es ella la que contiene todo su historial de audiencia.
La documentación oficial
Para la configuración avanzada y las opciones propias de la herramienta, consulte la documentación oficial de Umami. Esta guía cubre la puesta en línea en un VPS; la documentación del editor sigue siendo la referencia para los ajustes finos, las actualizaciones mayores y los casos de uso específicos.