Alojar Umami en un VPS administrado: su analítica web en su propio servidor

Alojar Umami en un VPS administrado significa guardar la analítica de sus sitios web en una máquina propia, que nuestros equipos mantienen actualizada y supervisan día y noche. Umami es software libre con licencia MIT que mide la audiencia sin cookies. Esta guía sigue su documentación oficial: la instalación con Docker Compose y PostgreSQL, HTTPS, el primer inicio de sesión, el script de seguimiento, lo que dice el proyecto sobre los datos personales, los ajustes útiles, las copias de seguridad y las actualizaciones.

Simon Vasconcelos Lee Por Publicado el 15 de noviembre de 202612 minutos de lectura

Todas las guías

Lo esencial

  1. La licencia MIT permite usar, modificar y redistribuir Umami libremente, en una empresa o en cualquier otro ámbito, siempre que conserve su aviso de copyright.
  2. Instálelo con Docker Compose: el archivo del proyecto arranca Umami y su base de datos PostgreSQL, la única admitida desde la versión 3.
  3. Genere APP_SECRET y TWO_FACTOR_ENCRYPTION_KEY al azar, sirva Umami en HTTPS con su propio subdominio y cambie enseguida la contraseña de la cuenta admin.
  4. Añada su sitio web y pegue después su script de seguimiento en el <head> de sus páginas: el script de seguimiento no usa cookies.
  5. Exporte la base cada día con pg_dump, guarde el archivo .env en lugar seguro y actualice con docker compose pull.

Qué hace Umami

Umami es una plataforma de analítica web y de producto de código abierto. Su documentación describe una herramienta que reúne el tráfico, las campañas, el comportamiento de los visitantes, las conversiones, la retención y los ingresos, desde la primera visita hasta los resultados que cuentan para su actividad. Está escrita en TypeScript sobre Next.js, y su imagen Docker se ejecuta con una cuenta sin privilegios.

Una sola instancia sigue varios sitios web: cada uno recibe su propio identificador y su script de seguimiento, y sus colegas se organizan mediante cuentas y equipos.

Lo que permite la licencia MIT

Umami se publica bajo la licencia MIT, a nombre de Umami Software, Inc. Concede, de forma gratuita, el derecho a usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar y vender copias del software. Puede, por tanto, ejecutarlo para su empresa y para los sitios de sus clientes, sin ninguna licencia que comprar.

Su única condición: el aviso de copyright y el aviso de permiso acompañan a todas las copias o partes sustanciales del software. Como cualquier licencia MIT, ofrece el software «tal cual», sin garantía.

Las cookies y los datos personales: lo que dice el proyecto

La documentación presenta Umami como una analítica sin cookies, sin seguimiento entre sitios y sin recogida automática de datos personales. Autoalojado, guarda su analítica en su propio servidor: usted decide dónde se guarda y cuánto tiempo se conserva.

CuestiónLo que dice el proyectoFuente
Las cookiesEl script de seguimiento web no usa cookies; que su sitio necesite un aviso de cookies depende de los demás servicios que use y de los requisitos que le sean aplicablesFAQ
Los datos recogidosPáginas vistas, URL de procedencia, navegadores, sistemas operativos, tipos de dispositivo y ubicación aproximadaFAQ
La dirección IPLa tabla de sesiones no tiene ninguna columna para la dirección IP; un identificador de sesión es un hash del sitio, de la dirección, del navegador y de una sal que cambia cada mes por defectoEsquema y código, versión 3.4.1
La conservaciónAutoalojados, los datos se conservan hasta que usted los eliminaFAQ
El RGPDUmami está diseñado pensando en la privacidad, y la conformidad depende de cómo lo configure y lo useFAQ
Los datos que envíaUn identificador de visitante o unas propiedades de evento que decida enviar quedan bajo su responsabilidadIntroducción

Tres ajustes del script de seguimiento van más allá, si lo desea: data-exclude-search retira los parámetros de búsqueda de las URL registradas, data-exclude-hash retira el fragmento, y data-do-not-track desactiva el seguimiento en los navegadores que expresan la preferencia Do Not Track. La documentación señala que este último ajuste no constituye, por sí solo, una solución completa de gestión del consentimiento.

Si identifica a los visitantes conectados con data-distinct-id o umami.identify(), la documentación recomienda un identificador interno de usuario o un hash en lugar de una dirección de correo: el valor puede leerse en el HTML de la página.

La instalación con Docker Compose y PostgreSQL

El repositorio ofrece un docker-compose.yml que arranca Umami y su base de datos PostgreSQL. Desde la versión 3, PostgreSQL es la única base admitida, en la versión 12.14 como mínimo, y la documentación recomienda configurarla en la zona horaria UTC. En un servidor con Docker instalado, cree una carpeta y empiece por sus secretos, generados al azar con openssl, como sugiere la documentación:

Terminal
cat > .env <<EOF
POSTGRES_PASSWORD=$(openssl rand -hex 24)
APP_SECRET=$(openssl rand -hex 32)
TWO_FACTOR_ENCRYPTION_KEY=$(openssl rand -hex 32)
EOF
chmod 600 .env

Coloque después este compose.yaml a su lado. Sigue el archivo del proyecto en la versión 3.4.1, con dos cambios: los secretos proceden del archivo .env, y el puerto solo se publica en 127.0.0.1.

compose.yaml
services:
  umami:
    image: ghcr.io/umami-software/umami:latest
    ports:
      - "127.0.0.1:3000:3000"
    environment:
      DATABASE_URL: postgresql://umami:${POSTGRES_PASSWORD}@db:5432/umami
      APP_SECRET: ${APP_SECRET}
      TWO_FACTOR_ENCRYPTION_KEY: ${TWO_FACTOR_ENCRYPTION_KEY}
    depends_on:
      db:
        condition: service_healthy
    init: true
    restart: always
    healthcheck:
      test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
      interval: 5s
      timeout: 5s
      retries: 5
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - umami-db-data:/var/lib/postgresql/data
    restart: always
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 5
volumes:
  umami-db-data:
Terminal
docker compose up -d
curl -s http://127.0.0.1:3000/api/heartbeat

La documentación de instalación no da ninguna cifra de memoria ni de procesador. El tamaño depende del tráfico de los sitios seguidos y del volumen de datos que conserve. En un VPS administrado, descríbanos su uso y le recomendamos el tamaño adecuado.

HTTPS: el proxy inverso

Umami escucha en HTTP en el puerto 3000, y la documentación sugiere servirlo detrás de su servidor web, mediante un proxy inverso. Dele su propio subdominio, como stats.example.com, que apunte al servidor con registros A y AAAA. Servir Umami bajo una ruta pasa por BASE_PATH, una variable que se lee al compilar la aplicación: con la imagen publicada, el subdominio es la vía directa.

El proxy debe transmitir también la dirección del visitante. Umami la lee en las cabeceras que recibe, entre ellas X-Real-IP y X-Forwarded-For: la usa para distinguir a los visitantes y localizar su país. Si su proxy usa otra cabecera, CLIENT_IP_HEADER la indica.

Con Caddy

Caddy obtiene el certificado de Let’s Encrypt y activa HTTPS por sí mismo. Su directiva reverse_proxy establece X-Forwarded-For por defecto: estas tres líneas bastan.

Caddyfile
stats.example.com {
  reverse_proxy 127.0.0.1:3000
}

Con Nginx y Certbot

Este bloque sigue el ejemplo de Nginx de la documentación de Umami, y escucha en el puerto 80 para que Certbot pueda instalar HTTPS:

Bloque Nginx
server {
  listen 80;
  listen [::]:80;
  server_name stats.example.com;

  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

Certbot instala después el certificado y se encarga de renovarlo:

Terminal
sudo certbot --nginx

El primer inicio de sesión: la cuenta admin y la doble autenticación

Al crear su base de datos, Umami abre una cuenta de administrador: usuario admin, contraseña umami. La documentación pide cambiar esta contraseña en el primer inicio de sesión.

  1. Abra su dirección HTTPS e inicie sesión con admin y umami.
  2. Abra Settings desde el botón de perfil de la barra lateral, después Profile, y haga clic en Change password.
  3. En la pestaña Security, active la doble autenticación: escanee el código QR con su aplicación de autenticación, introduzca el código de seis cifras y guarde después en lugar seguro los diez códigos de respaldo, que solo se muestran una vez.

Guarde TWO_FACTOR_ENCRYPTION_KEY con sus copias de seguridad: la documentación advierte de que perder o cambiar esta clave hace ilegibles los secretos guardados, y cada usuario debe entonces volver a configurar la doble autenticación.

Añadir un sitio y su script de seguimiento

  1. En Websites, haga clic en Add website.
  2. Dé un nombre al sitio y después su dominio: Umami lo usa para excluir sus propias páginas de la lista de sitios de procedencia.
  3. Abra Edit en ese sitio y copie el código de la sección Tracking code.
  4. Péguelo en el <head> de sus páginas y visite después su sitio: los datos aparecen enseguida en el panel.
El código de seguimiento, en el head
<script defer src="https://stats.example.com/script.js" data-website-id="your-website-id"></script>

Un nombre de script propio

Algunos bloqueadores de anuncios bloquean todo lo que parece analítica. Autoalojado, Umami ya se sirve desde su propio dominio, y dos variables van más allá: TRACKER_SCRIPT_NAME da al script un nombre distinto de script.js, y COLLECT_API_ENDPOINT cambia el nombre del punto de recogida, en lugar de /api/send. El script llama entonces por sí mismo al nuevo punto; en sus páginas solo cambia la fuente del código de seguimiento.

compose.yaml, dentro de environment
TRACKER_SCRIPT_NAME: "stats.js"
COLLECT_API_ENDPOINT: "/api/collect"

Los ajustes útiles

Estas variables de entorno van en el servicio umami de compose.yaml, y docker compose up -d recrea después el contenedor para tenerlas en cuenta:

VariableLo que haceValor
DISABLE_TELEMETRYDesactiva la telemetría anónima que Umami envía al proyecto para mejorar la aplicación1
PRIVATE_MODEDesactiva todas las llamadas de red externas, incluidos los iconos de los sitios, servidos por defecto desde DuckDuckGo1
DISABLE_UPDATESDesactiva la comprobación de nuevas versiones1
IGNORE_IPExcluye de la recogida direcciones IP y rangos CIDR, como los de sus oficinasUna lista separada por comas
SALT_ROTATIONFija la frecuencia con la que cambia la sal de los identificadores de sesiónmonth por defecto
REDIS_URLAñade una caché Redis, que la documentación recomienda para los sitios con mucho tráfico o para varias instanciasSu dirección Redis
MCP_ENABLEDAbre el punto /mcp: su asistente de IA lee su analítica en solo lectura, con una clave de API creada en Settings, API keys1

Las copias de seguridad

Todo lo que Umami conserva vive en su base de datos PostgreSQL: cuentas, sitios, equipos y analítica. Expórtela cada día y justo antes de cada actualización: autoalojados, estos datos se conservan sin límite de tiempo. Junto a la base, el archivo .env guarda los secretos que la hacen utilizable:

ElementoLo que guardaCopia de seguridad
La base de datos PostgreSQLCuentas, sitios, equipos, informes y toda la analíticaObligatoria, con pg_dump
.envLa contraseña de la base, APP_SECRET y la clave de la doble autenticaciónObligatoria, cifrada
compose.yamlLa configuración de su instanciaRecomendada

Exportar la base en funcionamiento

pg_dump hace una exportación coherente mientras la base está en uso. El formato personalizado, -Fc, va comprimido y se restaura con pg_restore:

Terminal, en la carpeta del compose.yaml
docker compose exec -T db pg_dump -U umami -d umami -Fc > umami-$(date +%F).dump

Programe este comando en el servidor al menos una vez al día, haga limpieza entre las exportaciones, que se acumulan, y envíe una copia a otro lugar. Colocadas en el disco del servidor, estas exportaciones entran también en sus copias de seguridad nocturnas.

Restaurar

  1. Detenga Umami y deje la base en marcha: docker compose stop umami.
  2. Restaure la exportación en la base, sustituyendo los objetos existentes.
  3. Vuelva a arrancar Umami y compruebe después que sus sitios y su analítica están ahí.
Terminal
docker compose stop umami
docker compose exec -T db pg_restore -U umami -d umami --clean --if-exists < umami-YYYY-MM-DD.dump
docker compose start umami

Repita este ejercicio de vez en cuando, sobre una copia: así comprueba que una copia de seguridad funciona.

Las actualizaciones

La documentación da dos comandos, desde la carpeta del compose.yaml. La base de datos se queda en su volumen:

Terminal
docker compose pull
docker compose up --force-recreate -d

Al reiniciar, el contenedor aplica por sí mismo las migraciones del esquema. La versión 3.4.0, del 17 de septiembre de 2026, traía dos, para las anotaciones y las claves de API; la versión 3.4.1, del 23 de octubre de 2026, no trae ninguna. Tras una actualización mayor, como el paso a la versión 3, la documentación sugiere ejecutar ANALYZE en PostgreSQL para que los paneles recuperen su velocidad:

Terminal
docker compose exec db psql -U umami -d umami -c "ANALYZE;"

Quién hace qué en un VPS administrado

El autoalojamiento exige mantener el servidor además de la aplicación. En un VPS administrado, nuestros equipos se encargan del servidor y siguen su instancia de forma proactiva; Umami sigue siendo su software, con sus ajustes y sus datos.

TemaNuestros equiposUsted
El servidorActualizaciones del sistema y de seguridad, con intervenciones en el servidor incluidasEl momento que mejor convenga a su actividad
La supervisiónServidor vigilado las 24 horas del día, los 7 días de la semana, con intervención sin esperar su llamadaLa lectura de los registros de su instancia
UmamiSeguimiento proactivo: errores, lentitud y espacio en disco detectados, corrección recomendadaSu instalación, sus actualizaciones y sus ajustes, que aplica usted o su asistente de IA
Los sitios y la analíticaEl servidor que los soporta, vigilado y con copias de seguridadLas cuentas, los sitios seguidos, el script de seguimiento y la duración de conservación de los datos
Las copias de seguridadCada noche, cifradas y guardadas fuera de la máquina; restauración incluidaLas exportaciones propias de Umami, y la petición de restauración, cuando la necesite
La migraciónSu servidor actual migrado, gratisEl momento del cambio

Si prefiere que nuestros equipos intervengan en la propia aplicación, ese servicio se factura por horas o a precio cerrado, con un presupuesto comunicado antes de la intervención.

Umami, en un servidor que cuidamos por usted

Con un VPS administrado de Simafri, nuestros equipos mantienen actualizado el servidor de su instancia de Umami, lo vigilan día y noche e intervienen sin esperar su llamada; también siguen su instancia de forma proactiva y le recomiendan las correcciones útiles, que aplica usted o su asistente de IA. Las copias de seguridad se cifran cada noche y se guardan fuera de la máquina, su restauración está incluida, y la migración de su servidor actual es gratuita.

Descubrir los VPS administrados

Preguntas frecuentes

¿Umami es gratuito para una empresa?

Sí. Umami tiene licencia MIT: puede usarlo, modificarlo y redistribuirlo en su empresa sin ninguna licencia que comprar, siempre que conserve su aviso de copyright. Queda el coste del servidor que lo ejecuta.

¿Umami usa cookies?

No. La FAQ del proyecto indica que el script de seguimiento web de Umami no usa cookies. Que su sitio necesite un aviso de cookies depende de los demás servicios que use en él y de los requisitos que le sean aplicables.

¿Umami funciona con MySQL?

Ya no desde la versión 3: Umami admite PostgreSQL, en la versión 12.14 como mínimo. Una instancia de la versión 2 con MySQL traslada primero sus datos a PostgreSQL con la guía de migración del proyecto, y pasa después a la versión 3.

¿Cómo instalar Umami con Docker Compose?

Parta del docker-compose.yml del proyecto, que ejecuta Umami y PostgreSQL, con secretos aleatorios en un archivo .env y el puerto publicado en 127.0.0.1. Ejecute docker compose up -d y coloque después delante un proxy inverso en HTTPS, con un subdominio.

¿Cuáles son los accesos por defecto de Umami?

En la instalación, Umami crea una cuenta admin con la contraseña umami. Cámbiela en su primer inicio de sesión, en Settings y después Profile, y active la doble autenticación en la pestaña Security una vez definida TWO_FACTOR_ENCRYPTION_KEY.

¿Cómo cambiar el nombre del script de seguimiento de Umami?

En una instancia autoalojada, TRACKER_SCRIPT_NAME da al script un nombre distinto de script.js, y COLLECT_API_ENDPOINT cambia el nombre del punto de recogida /api/send. Cambie después la fuente del código de seguimiento en sus páginas.

¿Cómo hacer copia de seguridad de Umami?

Exporte cada día la base PostgreSQL con pg_dump, desde el contenedor de la base, y guarde aparte el archivo .env, que contiene APP_SECRET y la clave de la doble autenticación. Restaure con pg_restore y pruebe la restauración con regularidad.

¿Un VPS administrado cubre Umami?

Un VPS administrado cubre el servidor: sistema, seguridad, supervisión y copias de seguridad. Nuestros equipos siguen también su instancia de forma proactiva y le recomiendan las correcciones útiles, que aplica usted. Una intervención en la aplicación se factura por horas o a precio cerrado.

Fuentes y documentación oficial

Contáctenos