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
- Un servidor con Debian 12.
- Un usuario no root con privilegios sudo.
- Un nombre de dominio completo (FQDN) como
plausible.example.com
que apunte al servidor. - El cortafuegos sin complicaciones (UFW) está activado y en ejecución.
- Actualiza todo.
$ sudo apt update && sudo apt upgrade
- 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.
Haz clic en Activar APIs y Servicios en la siguiente pantalla.
Busca y haz clic en la API de Google Search Console.
Haz clic en Habilitar en la siguiente pantalla.
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.
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.
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.
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.
En la siguiente pantalla, elige Aplicación Web como tipo de proyecto. Dale un nombre y pulsa Crear.
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.
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.
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.
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.
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.
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.
Dependiendo del tráfico de tu sitio, el panel de control debería empezar a mostrar estadísticas de tu sitio web en breve.
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.