Cómo instalar Plausible Analytics en Debian 12

Plausible es un software analítico de código abierto centrado en la privacidad para rastrear el tráfico de tu sitio web. Es una alternativa ligera a Google Analytics, que te permite hacer un seguimiento de los visitantes sin comprometer la privacidad. Es compatible con GDPR y no utiliza cookies. Puedes ver las estadísticas en un panel de control de aspecto moderno, y el script de seguimiento que ofrece es mínimo y no ralentiza tu sitio. Puedes autoalojar Plausible o comprar su suscripción.

En esta guía, instalaremos Plausible Analytics utilizando Docker en un servidor Debian 12.

Requisitos previos

  1. Un servidor con Debian 12.
  2. Un usuario no root con privilegios sudo.
  3. Un nombre de dominio completo (FQDN) como plausible.example.com que apunte al servidor.
  4. El cortafuegos sin complicaciones (UFW) está activado y en ejecución.
  5. Actualiza todo.
    $ sudo apt update && sudo apt upgrade
    
  6. Instala los paquetes esenciales que necesita tu sistema. Puede que algunos de estos paquetes ya estén instalados en tu sistema.
    $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y
    

Paso 1 – Configurar el Cortafuegos

El primer paso es configurar el cortafuegos. Ubuntu viene con ufw (Uncomplicated Firewall) por defecto.

Comprueba si el cortafuegos se está ejecutando.

$ sudo ufw status

Deberías obtener la siguiente salida.

Status: inactive

Permite el puerto SSH para que el cortafuegos no rompa la conexión actual al activarlo.

$ sudo ufw allow OpenSSH

Permite también los puertos HTTP y HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Habilita el cortafuegos

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Comprueba de nuevo el estado del cortafuegos.

$ sudo ufw status

Deberías ver un resultado similar.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Paso 2 – Instala Git

Se necesita Git para clonar el repositorio oficial de Plausible. Instala Git.

$ sudo apt install git

Verifica la instalación.

$ git --version
git version 2.39.2

Establece las variables de configuración iniciales.

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

Paso 3 – Instalar Docker y Docker Compose

Necesitaremos instalar Docker utilizando su repositorio oficial. Añade la clave GPG oficial de Docker.

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg

Añade el repositorio de Docker al sistema.

$ echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Actualiza la lista de repositorios de APT e instala Docker.

$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Comprueba si el motor Docker está instalado correctamente.

$ docker --version
Docker version 24.0.6, build ed223bc

Ejecuta los siguientes comandos para no tener que utilizar sudo para ejecutar los comandos de Docker.

$ sudo usermod -aG docker ${USER}
$ su - ${USER}

Esto completa la sección de instalación de Docker y Docker compose del tutorial.

Paso 4 – Instalar Nginx

Debian 12 incluye una versión antigua de Nginx. Para instalar la última versión, tienes que descargar el repositorio oficial de Nginx.

Importa la clave de firma de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Añade el repositorio de la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación. En sistemas Debian, el siguiente comando sólo funcionará con sudo.

$ sudo nginx -v
nginx version: nginx/1.24.0

Inicia Nginx.

$ sudo systemctl start nginx

Comprueba el estado del servicio.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Wed 2023-10-11 01:35:15 UTC; 3s ago
       Docs: https://nginx.org/en/docs/
    Process: 3598 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 3599 (nginx)
      Tasks: 3 (limit: 4652)
     Memory: 2.4M
        CPU: 8ms
     CGroup: /system.slice/nginx.service
             ??3599 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??3600 "nginx: worker process"
             ??3601 "nginx: worker process"

Oct 11 01:35:15 plausible systemd[1]: Starting nginx.service - nginx - high performance web server...
Oct 11 01:35:15 plausible systemd[1]: Started nginx.service - nginx - high performance web server.

Paso 5 – Descarga Plausible

Clona el repositorio Plausible Self-Hosting de GitHub.

$ git clone https://github.com/plausible/hosting

Cambia al directorio descargado.

$ cd hosting

Paso 6 – Configura Plausible

En el directorio descargado, verás los siguientes archivos.

  • docker-compose.yml – Contienen la configuración para que la herramienta Docker compose instale el servidor Plausible y todo lo que necesita. Plausible necesita el servidor PostgreSQL para la base de datos y la base de datos Clickhouse para las estadísticas. También viene con una opción para instalar un servidor SMTP para enviar notificaciones, restablecimiento de contraseña y correos electrónicos semanales de estadísticas.
  • plausible-conf.env – Este archivo contiene las variables de entorno para personalizar tu instalación.

El primer paso es generar una clave secreta necesaria para proteger la aplicación Plausible. Ejecuta el siguiente comando para generar la clave.

$ openssl rand -base64 64 | tr -d '\n' ; echo
vPkrzp59qQIYtMcyTCKGuyvpkbQ8PYf+Go2ju+DPV/fZUk2eTGNiwV3CoKEueXzypMVLbSkJNGS7xfq96/wepg==

Copia la clave que aparece en el terminal. Abre el archivo plausible-conf.env para editarlo.

$ nano plausible-conf.env

Pega la siguiente clave delante de la variable BASE_URL.

Añade el valor de BASE_URL como https://plausible.example.com o el dominio en el que quieras instalar Plausible. Como más adelante configuraremos SSL, asegúrate de introducir la URL base con HTTPS. También puedes cambiar el número de puerto en el que escucha Plausible. Por defecto, utiliza el puerto 8000.

BASE_URL=https://plausible.example.com
SECRET_KEY_BASE=yQVWmKfhvr/etwTSN/pSUmhAwExBX7eCKXKAMKV4mrtqzFCA5dgrAnTMx2dS2OIZ9KulVwa+vl7iGRbJpycYaA==
PORT=8000

Si quieres desactivar el registro de usuarios tras la instalación, añade la siguiente línea.

DISABLE_REGISTRATION=true

Si vas a abrir el registro para otros usuarios y quieres que verifiquen sus direcciones de correo electrónico, añade la siguiente línea. Para que esto funcione, tendrás que configurar los detalles del SMTP, de los que hablaremos a continuación.

ENABLE_EMAIL_VERIFICATION=true

También puedes configurar tus detalles SMTP con los siguientes datos. En nuestro ejemplo, estamos utilizando el servicio Amazon SES.

[email protected]
MAILER_NAME=Howtforge
SMTP_HOST_ADDR=email-smtp.us-west-2.amazonaws.com
SMTP_HOST_PORT=587
SMTP_USER_NAME=<username>
SMTP_USER_PWD=<password>
SMTP_HOST_SSL_ENABLED=1
SMTP_RETRIES=2

Configurar Google Search Console

También puedes configurar Plausible para que se conecte con Google Search Console, lo que le permite listar los términos de búsqueda que utiliza la gente para llegar a tu sitio. Configurar esta parte puede ser un poco complicado.

Visita la consola API de Google e inicia sesión. Una vez en la consola API, crea un nuevo proyecto. Dale un nombre a tu proyecto. Es posible que veas el campo Organización si utilizas una cuenta de Google Apps. En la captura de pantalla, hemos utilizado una cuenta personal de Google. Haz clic en Crear para continuar.

Proyecto Google Create

Haz clic en Activar APIs y Servicios en la siguiente pantalla.

Habilitar APIs y Servicios

Busca y haz clic en la API de Google Search Console.

API de la Consola de Búsqueda de Google

Haz clic en Habilitar en la siguiente pantalla.

Habilitar la API de Google Search Console

A continuación, necesitarás credenciales para acceder a la API. Pero antes, tendrás que configurar la pantalla de consentimiento. Para ello, visita la opción Credenciales de la izquierda y haz clic en el botón Configurar pantalla de consentimiento.

Botón Configurar Pantalla de Consentimiento

Elige Tipo de Usuario como Interno, ya que sólo accederemos a través del código, y haz clic en Crear para continuar. Si utilizas una cuenta de Google Apps, puedes elegir cualquiera de las dos opciones como Tipo de usuario.

Tipo de usuario OAuth

Establece el nombre de tu producto y añade el correo electrónico de soporte y el correo electrónico de contacto del desarrollador asociados a tu cuenta de Google Search Console. Añade tu nombre de dominio como Dominios autorizados. Si estás instalando Plausible en el dominio https://plausible.example.com entonces, añade https://example.com como dominio Autorizado. Si vas a alojar Plausible como dominio de nivel superior, utilízalo. Pulsa el botón Guardar y Continuar para pasar a la siguiente pantalla.

Pantalla de consentimiento OAuth

Salta las dos pantallas siguientes y vuelve al panel de control. Una vez en el panel de control, visita la pestaña Credenciales de la izquierda y haz clic en Crear credencial. Selecciona OAuth Client ID.

Crear credenciales de ID de cliente OAuth

En la siguiente pantalla, elige Aplicación Web como tipo de proyecto. Dale un nombre y pulsa Crear.

Crear ID de cliente OAuth

Tienes que guardar las claves Client ID y Client Secret. Copia esos valores y pégalos en el archivo plausible-conf.env. También puedes descargar el archivo JSON para guardar las credenciales y utilizarlas en el futuro.

Pantalla de credenciales OAuth

GOOGLE_CLIENT_ID=<ID>.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=<secret>

Cuando hayas terminado, guarda el archivo plausible-conf.env pulsando Ctrl + X e introduciendo Y cuando se te solicite.

La app que has creado con el estado Testing. La primera opción es verificar tu aplicación con Google, lo que puede tardar entre 3 y 5 días. Para evitar tener que verificar con Google, puedes entrar en tu cuenta de Google como usuario de Prueba. Ve a la pantalla de consentimiento de OAuth, desplázate hasta la sección Usuarios de prueba y haz clic en el botón Añadir usuarios para añadir tu cuenta de Google.

Usuarios de Google App Test

Configurar Google Analytics

Plausible también permite importar tus datos de Google Analytics. Para ello, necesitamos habilitar las siguientes API.

Vuelve a la página de APIs y Servicios y haz clic en el botón Habilitar APIS y Servicios para encontrar y habilitar las dos APIs anteriores.

API de Google Analytics para Plausible

Paso 7 – Instalar Plausible

Para instalar Plausible, ejecuta el siguiente comando docker.

$ docker compose up -d

Al ejecutar este comando se crea una base de datos PostgreSQL para los datos, una base de datos Clickhouse para las estadísticas, migraciones en ambas bases de datos para preparar el esquema, se crea una cuenta de administrador con los detalles del archivo env y se inicia el servidor en el puerto 8000.

Comprueba el estado de los contenedores. También puedes utilizar para ello el comando docker compose ps.

$ docker ps
CONTAINER ID   IMAGE                                          COMMAND                  CREATED          STATUS          PORTS                                       NAMES
d9d2806a978e   plausible/analytics:v2.0                       "/entrypoint.sh sh -…"   56 seconds ago   Up 54 seconds   0.0.0.0:8000->8000/tcp, :::8000->8000/tcp   hosting-plausible-1
99c9a1afff34   clickhouse/clickhouse-server:23.3.7.5-alpine   "/entrypoint.sh"         56 seconds ago   Up 55 seconds   8123/tcp, 9000/tcp, 9009/tcp                hosting-plausible_events_db-1
cf408ae32fc3   postgres:14-alpine                             "docker-entrypoint.s…"   56 seconds ago   Up 55 seconds   5432/tcp                                    hosting-plausible_db-1
a5bae1a9f163   bytemark/smtp                                  "docker-entrypoint.s…"   56 seconds ago   Up 55 seconds   25/tcp                                      hosting-mail-1

Deberías poder acceder a Plausible en http://<yourserverip>:8000 (para ello tendrás que abrir el puerto 8000 utilizando el cortafuegos).

Paso 8 – Instalar SSL

Antes de configurar Nginx como nuestro proxy inverso para alojar el dominio plausible, necesitamos configurar primero el certificado SSL.

Necesitamos instalar Certbot para generar certificados SSL gratuitos ofrecidos por Let’s Encrypt. Puedes instalar Certbot utilizando el repositorio de Debian u obtener la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.

Debian 12 no viene con Snapd instalado. Instala el paquete Snapd.

$ sudo apt install snapd

Asegúrate de que tu versión de Snapd está actualizada.

$ sudo snap install core
$ sudo snap refresh core

Instala Certbot.

$ sudo snap install --classic certbot

Asegúrate de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Verifica la instalación.

$ certbot --version
certbot 2.7.1

Genera un certificado SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d plausible.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/plausible.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Comprueba el servicio programador de renovaciones de Certbot.

$ sudo systemctl list-timers

Encontrarás snap.certbot.renew.service como uno de los servicios programados para ejecutarse.

NEXT                        LEFT        LAST                        PASSED       UNIT                         ACTIVATES
.....
Wed 2023-10-11 06:43:59 UTC 2h 57min left Wed 2023-10-11 00:51:05 UTC 2h 55min ago apt-daily.timer            apt-daily.service
Wed 2023-10-11 06:56:46 UTC 3h 10min left Wed 2023-10-11 00:51:05 UTC 2h 55min ago apt-daily-upgrade.timer    apt-daily-upgrade.service
Wed 2023-10-11 07:32:00 UTC 3h 45min left -                           -            snap.certbot.renew.timer   snap.certbot.renew.servic

Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.

Paso 9 – Configurar Nginx como proxy inverso

Hasta ahora, Plausible se ejecuta en el sistema local a través del puerto 8000. Para ejecutarse en su dominio, utilizaremos Nginx para que actúe como proxy inverso.

Crea un archivo de configuración para Plausible en el directorio /etc/nginx/conf.d/.

$ sudo nano /etc/nginx/conf.d/plausible.conf

Pega en él el siguiente código.

server {
    listen 80; listen [::]:80;
	server_name plausible.example.com;
    return 301 https://$host$request_uri;
}

server {
    server_name plausible.example.com;

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    access_log /var/log/nginx/plausible.access.log;
    error_log /var/log/nginx/plausible.error.log;

    ssl_certificate /etc/letsencrypt/live/plausible.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/plausible.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/plausible.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
    ssl_prefer_server_ciphers off;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida una vez hayas terminado.

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Verifica la sintaxis del archivo de configuración de Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reinicia el servicio Nginx para habilitar la nueva configuración.

$ sudo systemctl restart nginx

Paso 10 – Añadir seguimiento del sitio y de la estrella

Inicia el dominio https://plausible.example.com en tu navegador, y deberías ser recibido con la siguiente pantalla de registro Plausible.

Pantalla de registro de usuario plausible

Haz clic en el botón Crear mi cuenta para continuar.

Si has configurado la variable ENABLE_EMAIL_VERIFICATION=true, se te pedirá que introduzcas un código de verificación enviado a tu ID de correo electrónico. Si has configurado el servidor SMTP, deberías recibir un correo electrónico con el código. Si no lo has hecho, o si por alguna razón no recibes el código, ejecuta el siguiente comando para verificar todos los usuarios de la base de datos.

$ docker compose exec plausible_db psql -U postgres -d plausible_db -c "UPDATE users SET email_verified = true;"

A continuación, se te pedirá que añadas un sitio. Introduce el dominio que deseas rastrear y selecciona la zona horaria para los informes de estadísticas.

Añadir sitio web a Plausible

En la página siguiente, se te proporcionará el código JavaScript para realizar el seguimiento de tu sitio web. Copia el código y pégalo entre los <head>....</head> de tu sitio y haz clic en el botón Empezar a recopilar datos para continuar.

Código JavaScript plausible

Dependiendo del tráfico de tu sitio, el panel de control debería empezar a mostrar estadísticas de tu sitio web en breve.

Panel de análisis plausible

Puedes importar tus datos de Google Analytics o conectarte a Google Search Console visitando la configuración de tu sitio.

Conclusión

Con esto concluye nuestro tutorial sobre la instalación y configuración de Plausible Analytics en un servidor Debian 12. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...