Umami. Analytics simples. Como todo debería ser.

Umami es una alternativa ligera a Google Analytics. Aprende a desplegarlo con nosotros en La Esquina Gris.

Umami. Analytics simples. Como todo debería ser.

Las mejores ideas me surgen cuando alguna empresa o corporación comete algún error garrafal e imperdonable para alguien de su nivel tecnológico. Por suerte, para mí, toda esa frustración causada por la incompetencia de algún simio que trabaja en M.A.A.N.G. se convierte en un artículo interesante para mis lectores.

En este artículo vamos a ver como “Mandar al quiote” a Google y sus dos productos Analytics y Search Console con una alternativa de código abierto, bastante ligera y que puedes alojar tú mismo en casa, un servidor o en Pikapods.

Sobre la psicología y patología de los llamados “Google Analytics”.

Todos los seres humanos cometemos errores. Hablando metafóricamente, un error es como un pedo. A cualquiera se le puede salir uno en el momento menos esperado.

Este no es el caso con las empresas grandes de tecnología. ¿De qué te sirven tantos millones de dólares si al final tus procesos están mal, son lentos o apestan en un todo? Uno supondría que esos millones se gastan en mejoras a los procesos de control de calidad en la cadena de suministro, infraestructura y capacitación técnica, en el caso de Google solo sirve para despedir equipos de Flutter y Python.

Luego de toparme con un error el cual considero bastante… estúpido por parte de Google y sus herramientas, llegué a mi punto favorito de la colaboración, ese momento donde dices: “hazte alv, mejor lo hago yo solo”. Y decidí buscar una alternativa para llevar las analíticas de mi blog sin tener la necesidad de rogarle a la basurota de Google que funcionen sus herramientas.

En serio Google. Buscar un registro TXT no es tan difícil. Mucho Silicon Valley y no sabes hacer algo así de sencillo 🙄

Luego de investigar por un par de horas di con Umami un motor de análisis web bastante ligero, y como era de esperarse, aprovechando que ahorita estamos en una especie de fiebre por podman en este blog, lo vi como una oportunidad perfecta para darle algo de visibilidad a esta alternativa. Con suerte, algunos dejarán la dependencia a los servicios Big Tech y pasarán a algo más casero y sencillo.

¿Qué es Umami? ¿Para quién podría ser útil? 🤔

Umami es un motor de análisis web que puede funcionar como alternativa a Google Analytics, es bastante ligero a diferencia de Matomo o Plausible, no utiliza Cookies y cumple con el GDPR y la CCPA.

Umami podría ser útil para propietarios de sitios web pequeños, desarrolladores independientes o con proyectos ya expuestos a internet o especialistas en marketing que buscan obtener la mayor cantidad de información valiosa sin comprometer la privacidad de los usuarios que visitan sus sitios web. Además, a diferencia de la consola infumable de Google Analytics, donde no puedes hacer nada productivo si no has tomado una o varias capacitaciones al respecto, Umami es bastante sencillo de usar, no requiere mucho mantenimiento y es extremadamente sencillo de desplegar.

Claro que, si buscas algo que te dé información hasta de las piedras favoritas de tus usuarios, está claro que Umami no es ideal para tu caso de uso.

Cosas que puedes ver con umami:

  • Información anonimizada de tus visitantes
    • Dispositivo
    • Navegador Web
    • Sistema Operativo
    • Localización de la visita
  • Vistas de páginas
  • Porcentaje de rebote
  • Referidos
  • Eventos personalizados

Cosas que NO puedes ver con umami:

  • La dirección IP de tus visitantes
  • Datos personales de los visitantes (ninguna sesión se guarda)
  • Cookies (Umami no requiere de cookies)

Me gustó eso de anonimizar los datos, después de todo, lo único que busco es crecer mi blog a mi manera y siendo sincero, prefiero tardarme 20 minutos desplegando Umami a añadir un registro TXT a mi dominio y rezar porque Google aprenda a detectarlo en menos de 48 horas.

Pero… por algo estoy escribiendo esto, creo que le estoy dando más crédito del que realmente se merece a la Big G.

Requisitos 🧑‍💻

Antes de comenzar, necesitarás los siguientes requisitos para desplegar Umami:

Un servidor dedicado / VPS en internet 💻

Necesitarás un servidor con Gnu/Linux (preferentemente con systemd) para instalar los requerimientos de Umami ahí.

Podman 🦭

Si no sabes como instalar Podman en tu distribución, aquí hay una guía completa.

Una base de datos PostgreSQL 🐘

Puedes usar los pasos que listaré aquí para tener tu base de datos en un contenedor o usar una ya existente.

Umami también funciona con MySQL/MariaDB, pero no daré instrucciones para ese motor en este tutorial

Un usuario rootless para desplegar tu contenedor de Umami

Recomiendo que utilices Podman con contenedores rootless para esto, necesitarás de un usuario que no sea root para seguir los pasos de este tutorial.

Conocimiento básico de Gnu/Linux y PostgreSQL 🧠🐧🐘

Asumiré que estás familiarizado con algunos comandos de Gnu/Linux y que sabes hacer consultas sencillas en PostgreSQL.

Descargando las imágenes de Podman 🦭

Primero vamos a descargar las imágenes de Docker necesarias para este despliegue. Si ya cuentas con una instalación de Podman en tu máquina, puedes bajar ambas imágenes con los siguientes comandos:

  • Si no cuentas con una base de datos PostgreSQL, ejecuta este comando:
~$ podman pull docker.io/postgres/postgres:15-alpine ghcr.io/umami-software/umami:postgresql-latest
  • Si ya cuentas con una base de datos PostgreSQL, ejecuta este otro comando en su lugar:
~$ podman pull ghcr.io/umami-software/umami:postgresql-latest

Preparando el entorno 🧹

Siguiendo los requisitos que coloqué arriba, cree un usuario sin privilegios en mi servidor, en mi caso el usuario se llama umami como el mismo motor, tú puedes usar el que más te guste. Umami no requiere de un directorio de configuración, por lo que no deberás preocuparte por eso aquí 😄

Si no sabes como crear un usuario, puedes usar el siguiente comando:

~$ adduser umami

Ya tengo una base de datos PostgreSQL 🐘

Entonces puedes saltar al siguiente paso.

No tengo una base de datos PostgreSQL 🐘

Puedes desplegar el contenedor de PostgreSQL en tu usuario umami, primero necesitarás generar un directorio donde almacenar los datos de la base de datos para montarlo como volumen. Puedes usar el siguiente comando, asegúrate de ejecutarlo con tu usuario umami:

~$ mkdir -p ~/.postgres/data

En tu shell del usuario para umami

Ahora puedes levantar tu contenedor de postgres con el siguiente comando:

Los valores que puse aquí son, como ejemplo, asegúrate de cambiar dichos valores en un entorno productivo.
~$ podman run -d \
--name posgres_umami \
-v ./postgres/:/var/lib/postgres/data \
--restart unless-stopped \
-e POSTGRES_DB=umami \
-e POSTGRES_USER=umami \
-e POSTGRES_PASSWORD=supersecurepassword \
-p 5432:5432 postgres:15-alpine

Recuerda que la salida del comando debería ser el ID del contenedor

Aquí hay un script de bash que podrías usar para ayudarte con eso de las contraseñas. Ten en cuenta que el script lo entrego as is y no doy ninguna garantía de que funcione en tu sistema, el script tampoco te permite elegir el valor de las variables POSTGRES_DB y POSTGRES_USER:

Prueba la conexión a la base de datos con tu cliente favorito, en mi caso usaré Beekeeper studio para probar que puedo conectarme:

Editor de conexiones de Beekeeper Studio

Vamos a presionar el botón “Connect” para conectarnos. En mi caso ejecutaré una consulta simple para listar las bases de datos, no es necesario que repitas este proceso si no quieres, solo es para comprobar los pasos en este artículo:

Como puedes ver, la base de datos umami se encuentra presente en la base de datos. Si quieres comprobarlo por ti mismo, aquí tienes la consulta SQL:

SELECT datname AS database_name, 
       pg_size_pretty(pg_database_size(datname)) AS size,
       datallowconn AS allow_connections,
       datconnlimit AS connection_limit,
       encoding, 
       datcollate, 
       datctype 
FROM pg_catalog.pg_database;

El código de la consulta lo saqué de aquí

Preparando la base de datos 📚

Si seguiste los pasos anteriores para levantar tu contenedor de PostgreSQL para Umami, puedes omitir este paso.

Crear un usuario y una base de datos 🤵

Si ya tienes una base de datos PostgreSQL, deberás crear un usuario y una base de datos por separado para Umami.

Para generar un usuario y una base de datos específicos para Umami, ejecuta el siguiente comando en la consola de PostgreSQL:

DO $do$
DECLARE
   _rolname text := 'umami';
   _dbname text := 'umami';
BEGIN
   IF NOT EXISTS (
      SELECT FROM pg_catalog.pg_roles
      WHERE  rolname = _rolname) THEN

      EXECUTE format('CREATE ROLE %I LOGIN PASSWORD %L', _rolname, 'PON_UNA_CONTRASEÑA_SEGURA_AQUI');
   ELSE
      RAISE NOTICE 'El usuario "%" ya existe. Omitiendo este comando.', _rolname;
   END IF;

   EXECUTE format('CREATE DATABASE IF NOT EXISTS %I', _dbname);
   EXECUTE format('GRANT ALL PRIVILEGES ON DATABASE %I TO %I', _dbname, _rolname);
END
$do$;

Consulta para PGSQL

Cambia los valores dentro de DECLARE por los que vayas a utilizar en tu instancia de PostgreSQL.

Si generaste con éxito tu base de datos para Umami, puedes continuar con el siguiente paso.

Generar el contenedor de Umami 📦

Es momento de levantar el contenedor de Umami. Como no necesitamos de un directorio de datos para montarlo como volumen, levantar el mismo no será muy complicado. Para levantar tu instancia de Umami necesitarás, antes que nada, armar la URL de conexión a la base de datos, pues es una de las variables de entorno que nos pide el contenedor de Docker.

El formato de la URL de PostgreSQL es el siguiente:

postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]

El valor por defecto de la variable en el contenedor es: postgresql://umami:umami@db:5432/umami

En mi caso, la cadena de conexión sería: postgresql://umami:supersecurepassword@ip_del_servidor_pgsql:5432/umami

Para levantar el contenedor de Umami deberás ejecutar el siguiente comando:

~$ podman run -d \
--name umami \
-p 3000:3000 \
-e DATABASE_URL=postgresql://umami:supersecurepassword@ip_del_servidor_pgsql:5432/umami \
-e DATABASE_TYPE=postgresql \
-e APP_SECRET=SECRETOMUYSECRETOENEXTREMOSECRETO \
-e TRACKER_SCRIPT_NAME=laesquinagris \
-e DISABLE_TELEMETRY=1 \
ghcr.io/umami-software/umami:postgresql-latest 

Ten cuidado a la hora de configurar las variables de entorno, aquí te dejo una lista de las variables que usé y el valor que les puedes asignar:

  • DATABASE_URL: La URL de conexión a la base de datos PostgreSQL
  • DATABASE_TYPE: El tipo de base de datos (puede ser postgresql o mysql)
  • APP_SECRET: Para generar los ID de los scripts/sitios. POR EL AMOR DE DIOS no vayas a poner lo mismo que yo aquí, genera un secreto usando openssl o incluso un generador de contraseñas como KeePassXC te ayudará a esto.
  • TRACKER_SCRIPT_NAME: El nombre que Umami le dará a tu script de tracking.
  • DISABLE_TELEMETRY: No enviar estadísticas de uso a Umami (Los valores pueden ser 1 o 0)

Configurar Umami ⚙️

Luego de levantar tu contenedor de Umami, espera unos segundos y dirígete a la dirección localhost:3000 si estás probando en tu sistema local o usando la dirección IP de tu servidor/VPS para ver la siguiente pantalla:

Las credenciales de acceso por defecto son:

  • Username: admin
  • Password: umami
CAMBIA DE INMEDIATO ESTA CONTRASEÑA. MÁS SI TU SERVIDOR ESTÁ EXPUESTO A INTERNET.

Si pudiste iniciar sesión correctamente podrás observar la siguiente pantalla:

Si quieres configurar un sitio web con tu script de analytics, da un clic en el botón “Go to Settings”, seguido de eso, da clic en el botón azul “Add Website”:

Rellena los datos que Umami solicita de tu sitio:

Si configuraste correctamente tu sitio, obtendrás una nueva vista, presiona el botón “Edit” en la parte inferior de la pantalla para obtener tu código de rastreo de sitio:

Dentro de la pantalla de edición ve a la pestaña “Tracking Code” y ahí podrás encontrar el snippet de HTML que necesitarás pegar en el sitio web que deseas rastrear:

Pega ese código en el sitio que deseas rastrear y listo. Ya tienes tus analíticas disponibles para tu sitio web.

Umami en La Esquina Gris ✍️📈

Hace poco integré este motor de analíticas en el blog. Tuve que actualizar la página de política de privacidad 😅 para eso. Debo decir que, el cambio me ha sentado bien, puedo recolectar las métricas necesarias de mi sitio sin tener nada que envidiarle a Seach Console o a Google Analytics.

Por supuesto que, la herramienta no me dirá en que resultado o en que página de los resultados de Google estoy, sin embargo, como dije antes, mi objetivo no es ser el blog más visitado de internet.

Aquí te voy a compartir algunas capturas de como se ven las analíticas en producción 😁 y no te preocupes, Umami no me da ningún dato reelevante para rastrearte por aquí.

Gráfica principal de Umami
Páginas visitadas en mi blog 😄
Es difícil de creer para mí, pero hay windowseros que leen mi blog 🤯. Aunque… me gustaría que el número de visitantes de Firefox fuera un poco más competitivo con el de Chrome 😥

Conclusión ✍️

Umami me sorprendió muchísimo con los resultados que promete. Da la información necesaria (al menos para mi) sin comprometer la privacidad de mis usuarios. Por supuesto que, se que hay personas que prefieren no ser rastreadas de ninguna manera y no colocaré penalizaciones de ningún tipo en caso de que decidan bloquear el script de analíticas.

¿Qué te pareció a ti? ¿Tienes algún proyecto donde te gustaría usar Umami en lugar de otro motor de analíticas? Yo personalmente creo que podría serte útil si provees servicios en casa, en el trabajo como parte de un equipo o en tu propio sitio web 😸

Me gustaría leer tus comentarios en las redes sociales de La Esquina Gris 😋 ¿Qué tipo de artículo te gustaría leer luego? ¿Te está gustando esta mini-saga de Podman? Aun me quedan muchas ideas para no dejar abandonado este blog. Probablemente se me ocurran un par de herramientas en el futuro. Agradezco que hayas llegado hasta aquí ❤️.

Canción triste del día 🍂

It's funny how my life just falls apart…

Contenido extra para miembros pagos 🌟

Contenido extra para este artículo

El contenido extra de este artículo incluye:

  • Un manual en formato PDF con instrucciones simplificadas de este artículo + instrucciones para desplegar con un certificado SSL y seguridad aumentada 🔒
  • Más utilidades en forma de Scripts Bash para facilitar el despliegue
  • Un archivo pod.yml pre configurado.
  • Un generador de archivos pod.yml.
  • Un archivo de configuración Reverse Proxy para NGINX
  • (opc) Una sandía fresca de los estercoleros para su incorporeidad 🍉
Descargar contenido extra ⬇️

Puedes acceder al contenido extra para miembros aquí. Recuerda leer los términos y condiciones de tu suscripción: