Umami alternativa a Google Analytics

Publicado por Joven Club en

Umami es un sistema de análitica y estadísticas web, sencillo, fácil de usar que respeta tu privacidad, es desarrollado en NodeJS y permite almacenar la información en MySQL o PostgreSQL. Liberado bajo la licencia MIT y su código fuente está disponible en Github

Características

Análitica simple

Umami mide solo las métricas más importantes: páginas vistas, dispositivos utilizados y de dónde provienen sus visitantes. Todo se muestra en una única página fácil de navegar.

Sitios web ilimitados

Puede llevar la estadísticas de un un número ilimitado de sitios web desde una sola instalación. Incluso puede incluir subdominios y URL individuales.

Evite los bloqueadores de anuncios

Umami está alojado por usted bajo su propio dominio lo que permite evitar de manera confiable los bloqueadores de anuncios a diferencia de Google Analytics.

Ligero

El script que le permite registrar las análiticas es pequeño (solo 2 KB) y es compatible con navegadores antiguos como IE.

Cuentas múltiples

Umami se puede utilizar para alojar datos para amigos o clientes. Simplemente cree una cuenta separada y podrán comenzar a llevar sus análiticas en su propio panel de control.

Compartir datos

Si desea compartir sus estadísticas públicamente, puede hacerlo con una URL generada de forma única.

Apto para móviles

La interfaz de Umami se ha optimizado para dispositivos móviles, por lo que puede ver sus estadísticas desde cualquier lugar.

Propiedad de los datos

Dado que Umami es autohospedado, usted es el propietario de todos los datos. No es necesario que ceda sus datos a un tercero para que sean explotados.

Centrado en la privacidad

Umami no recopila ninguna información de identificación personal y anonimiza todos los datos recopilados.

Paso 1 – Instalar NodeJS y npm

Instalaremos NodeJS y npm desde los repositorios oficiales de AlpineLinux

# apk add nodejs npm

Paso 2 – Instalar git

# apk add git

Paso 3 – Clonar el repositorio de Umami

Nos movemos al dir /srv

# cd /srv

Crear el dir apps si no existe

# mkdir apps

Moverse al DIR apps

# cd apps

Clonar

# git clone https://github.com/mikecao/umami.git

Paso 4 – Instalar dependencias

Moverse al dir umami

# cd umami

Instalar dependencias

# npm install

Buscar vulnerabilidades e instalar cualquier actualización compatible

# npm audit fix

Paso 5 – Instalar MariaDB

Consulte Cómo instalar MariaDB en Alpine Linux para más información

Instalar servidor y cliente

# apk add mariadb mariadb-client

Inicializar el servidor de BD

# /etc/init.d/mariadb setup

Iniciar el servidor de BD

# service mariadb start

Mejorar la seguridad básica del servidor de BD

# mariadb-secure-installation

Salir

MariaDB [(none)]> exit

Paso 6 – Crear BD, usuarios y tablas

Para más inforamción consulte:

Conectarnos al servidor BD

# mariadb -u root

Crear BD

MariaDB [(none)]> CREATE DATABASE umamidb;

Crear usuario

MariaDB [(none)]> CREATE USER umami@localhost IDENTIFIED BY 'mi-contraseña';

Asignar privelios

Con el siguiente comando asignamos todos los privilegios sobre la BD umamidb

MariaDB [(none)]> GRANT ALL ON umamidb.* TO umami@localhost;

Refrescar privilegios

MariaDB [(none)]> FLUSH PRIVILEGES;

Salir

MariaDB [(none)]> exit

Crear tablas

Umami incluye un script que nos facilitará el procedimiento para crear la BD y tablas correspondientes

# mariadb -u umami -p umamidb < sql/schema.mysql.sql

Paso 7 – Configurar la conexión a BD

Crear fichero .env

# touch .env

Agregar la siguientes líneas al fichero .env

DATABASE_URL=mysql://umami:mi-contraseña@localhost:3306/umamidb
HASH_SALT=

Puede generar el valor HAST_SALT ejecutando el siguiente comando:

$  python3 -c 'import crypt; print(crypt.mksalt())'

Paso 8 – Construir la app

# npm build

Paso 9 – Iniciar la App

# npm start
...
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
...

Si la app se inició correctamente entonces debe ver una línea como la anterior, una vez que haya comprabado que la app se ejecuta de manera exitosa presione un Ctrl-C para terminar la misma ya que no es recomendable que esta se ejecuta con privilegios de root por tanto el próximo paso es crear la configuración necesaria para administrala como un servicio bajo un usuario diferente.

Paso 10 – Iniciar la App como un servicio

Agregar usuario y grupo nodejs usando BusyBox

Bajo el usuario y grupo nodejs se ejecutará la applicación

addgroup -S nodejs
adduser -S -s /sbin/nologin -H -h /dev/null -G nodejs nodejs

Donde:

  • -S: Crea un usuario/grupo del sistema.
  • -s: Login shell.
  • -H: No crear directorio home.
  • -h: Directorion home.
  • -G: Grupo al que pertenece el usuario.

Crear script de inicio

AlpineLinux usa OpenRC como sistema de inicialización entonces debemos crear el fichero umami debajo del DIR /etc/init.d

Para más información consulte:

Crear fichero umami

#  touch /etc/init.d/umami

Asignar permisos de ejeución

# chmod -c 755 /etc/init.d/umami

Agregar el siguiente contenido

#!/sbin/openrc-run
depend() {
	need net
}
directory=/srv/apps/umami
command="npm start"
command_user="nodejs:nodejs"
pidfile="/run/${RC_SVCNAME}.pid"
command_background=true

Ahora podemos administrar umami como un servicio.

Iniciar

# service umami start

Detener

# service umami stop

Reiniciar

service umami restart

Obtener estado

# service umami status

Iniciar con el SO

# rc-update add umami default

Paso 11 – Instalar NGINX

Configuraremos el NGINX como proxy genérico, así que el mismo se pueda conectar con la aplicación Umami.

Consulte ¿Cómo instalar NGINX en Alpine Linux? para más información.

Otros artículos de interés:

# apk add nginx

Paso 12 – Instalar Lego

Lego: es un cliente/librería Let’s Encrypt que permite obtener y renovar certificados Let’s Encrypt.

Descargar

$ wget https://github.com/go-acme/lego/releases/download/v4.4.0/lego_v4.4.0_linux_amd64.tar.gz

Descompactar

$ tar xzvf lego_v4.4.0_linux_amd64.tar.gz

Instalar

# install lego /usr/local/bin/

Paso 13 – Configurar Let’s Encrypt

Let’s Encrypt: es una autoridad de certificación (CA) gratuita, automatizada y abierta, disponible para beneficio público. Es un servicio proporcionado por Internet Security Research Group (ISRG).

Consulte Instalar SSL Let’s Encrypt usando Lego para más detalles.

Artículo de interés:

Crear DIR /var/www/letsencrypt

En el DIR /var/www/letsencrypt/.well-known/acme-challenge lego guardará el fichero que nos servirá para validar nuestro domino o sea utilizaremos el desafío/respuesta http-01 para comprobar que el dominio es nuestro.

# mkdir -p /var/www/letsencrypt/.well-known/acme-challenge

Crear VirtualHost

Crear fichero de configuración umami.conf

# touch  /etc/nginx/http.d/umami.conf

Agregar la siguiente configuración

server {
    listen 80;
    server_name .midominio.com; 
    
    location / {
        return 301 https://$host$request_uri;
    }
    
    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt/;
    }
}

Iniciar el NGINX

# service nginx start

Obtener certificado

Antes de ejecutar el siguiente comando debe crear el DIR /etc/lego/

lego --accept-tos -m micorreo@midominio.com -d midominio.com -d www.midominio.com --http --http.webroot /var/www/letsencrypt --pem --path /etc/lego/ run

Configurar Virtual Host

En este paso configuraremos NGINX como proxy genérico y activaremos el certificado de seguridad generado anteriormente.

server {
    listen 443 ssl http2;
    
    # SSL configuration
    ssl_certificate /etc/lego/certificates/mi-dominio.com.crt;
    ssl_certificate_key /etc/lego/certificates/mi-dominio.com.key;

    # verify chain of trust of OCSP response using Root CA and Intermediate certs
    ssl_trusted_certificate /etc/lego/certificates/mi-dominio.com.pem;
    
    # Put here you domain
    #
    server_name mi-dominio.com;
    
    # Max file size useful for file uploading 
    # 
    client_max_body_size 8M;

    location / {	
        # NGINX acting as reverse proxy
        #
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        #
        # Set the backend url and port, port is optional for standard services
        # when there is a variable as a part of proxy_pass URL a resolver is needed.
        #
        proxy_pass http://localhost:3000;
    }
}

Refrescar la configuraciones del NGINX

# service nginx reload

Paso 14 – Acceder

Para que Umami puede acceder al servidor de BD debe comentar la opción #skip-networking en el fichero /etc/my.cnf.d/mariadb-server.cnf, luego ponga en su nevagador https://mi-dominio.com use el usuario: admin contraseña: umami, click en login y debe ver el Dashboard, recomiendo cambiar su contraseña lo antes posible.

Ir al contenido