Guía de despliegue

Cómo alojar Umami en un VPS

Desplegar en un VPS Cloud →

Tutorial

Cómo alojar Umami en un VPS

Autoalojamiento7 min de lectura10 pasos

Umami es una herramienta de analítica web open source, ligera y respetuosa con la privacidad: mide su audiencia sin cookies ni recogida de datos personales. Autoalojada en su VPS, le convierte en propietario de sus estadísticas de tráfico, sin confiarlas a una empresa publicitaria. Así se despliega con Docker, una base de datos PostgreSQL, un reverse proxy y un certificado TLS — y cómo resolver los tres problemas que bloquean la mayoría de despliegues en el arranque.

Contenido· Por qué autoalojar Umami en un VPS1/8
  1. 01Por qué autoalojar Umami en un VPS
  2. 02Los beneficios concretos de un Umami autoalojado
  3. 03Requisitos de hardware y software
  4. 04Desplegar Umami con Docker y HTTPS
  5. 05Problemas frecuentes en el arranque
  6. 06Actualizar Umami
  7. 07Umami Cloud vs auto-alojado
  8. 08La documentación oficial

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

  1. Preparar el VPS y Docker

    Por SSH, actualice el sistema e instale Docker con curl -fsSL https://get.docker.com | sh. Cree mkdir -p /opt/umami && cd /opt/umami.

  2. Escribir el docker-compose.yml

    Defina dos servicios: ghcr.io/umami-software/umami:postgresql-latest y una base postgres. Indique DATABASE_URL y un APP_SECRET aleatorio.

  3. 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.

  4. 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.

  5. 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/umami

Si 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_healthy

Con 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 ps

Fí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

  1. 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.

  2. 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.

  3. Reinicia la stack

    docker compose up -d. Umami aplica las migraciones automáticamente. Revisa los logs con docker compose logs -f app y espera el mensaje Listening on port 3000.

  4. 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 images muestra el digest de cada imagen en ejecución.

  5. 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.

Despliegue su instancia en un VPS Cloud ServOrbit

Un VPS Cloud ServOrbit con Docker preconfigurado y recursos escalables le permite instalar esta herramienta sin fricción, y ajustar la RAM y los vCPU a medida que crece el uso.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva