Plausible Analytics es una herramienta de analítica web ligera y de código abierto que no usa cookies ni recopila datos personales, lo que simplifica cumplir el RGPD. En este tutorial instalarás Plausible Community Edition (CE) en Ubuntu 24.04 con Docker Compose, usando el certificado HTTPS automático que incluye, añadirás tu primer sitio web y programarás copias de seguridad.

Requisitos previos

Para seguir esta guía necesitas:

  • Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 2 GB de RAM (ClickHouse, la base de datos de eventos, no funciona bien con menos) y 20 GB libres en disco. En x86_64 la CPU debe soportar SSE 4.2, algo que cumplen todos los procesadores actuales.
  • Un usuario no root con privilegios sudo que pertenezca al grupo docker.
  • Docker Engine y el plugin Docker Compose instalados desde el repositorio oficial de Docker.
  • Un subdominio para el panel, por ejemplo plausible.example.com, con un registro DNS A apuntando a la IP del servidor. En esta guía se usa your_domain.
  • Los puertos 80 y 443 libres: Plausible CE los usará directamente, así que no debe haber otro servidor web escuchando en ellos.

Paso 1: Descargar Plausible Community Edition

El proyecto publica la configuración de Docker Compose en el repositorio plausible/community-edition, con una etiqueta por versión. Consulta la última versión estable en la página de releases de GitHub (https://github.com/plausible/community-edition/releases) y clónala. En este ejemplo se usa v3.0.1:

sudo git clone -b v3.0.1 --single-branch https://github.com/plausible/community-edition /opt/plausible-ce
sudo chown -R "$USER":"$USER" /opt/plausible-ce
cd /opt/plausible-ce

El archivo compose.yml define tres servicios: plausible (la aplicación), plausible_db (PostgreSQL, con usuarios y sitios) y plausible_events_db (ClickHouse, con los eventos de visitas).

No edites compose.yml; así las actualizaciones serán un simple cambio de etiqueta. Toda la personalización irá en .env y en compose.override.yml.

Paso 2: Configurar la URL y la clave secreta

Crea el archivo .env con la URL pública del panel y una clave secreta aleatoria de 64 bytes. Cambia your_domain antes de ejecutarlo:

cat > .env <<EOF
BASE_URL=https://your_domain
SECRET_KEY_BASE=$(openssl rand -base64 48)
HTTP_PORT=80
HTTPS_PORT=443
EOF
chmod 600 .env

Cuando HTTP_PORT y HTTPS_PORT valen 80 y 443, Plausible solicita y renueva por sí mismo un certificado de Let's Encrypt para el dominio de BASE_URL. Por eso el registro DNS debe apuntar ya al servidor antes de arrancarlo.

Publica esos puertos en el host con un archivo compose.override.yml, que Compose combina automáticamente con compose.yml:

nano compose.override.yml
services:
  plausible:
    ports:
      - 80:80
      - 443:443

Valida la configuración combinada:

docker compose config --quiet && echo "configuración correcta"
configuración correcta

Paso 3: Abrir el cortafuegos y arrancar Plausible

Si usas UFW, permite SSH, HTTP y HTTPS:

sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Arranca los servicios en segundo plano:

docker compose up -d

Comprueba que los tres contenedores están en marcha y que las bases de datos aparecen como healthy:

docker compose ps
NAME                                 SERVICE               STATUS
plausible-ce-plausible-1             plausible             Up About a minute
plausible-ce-plausible_db-1          plausible_db          Up About a minute (healthy)
plausible-ce-plausible_events_db-1   plausible_events_db   Up About a minute (healthy)

En el primer arranque Plausible crea las bases de datos y obtiene el certificado. Sigue los logs hasta que dejen de aparecer migraciones:

docker compose logs -f plausible

Pulsa Ctrl+C para salir. Después verifica que el panel responde por HTTPS con un certificado válido:

curl -sI https://your_domain | head -1

La respuesta debe ser un código 200 o 302, sin errores de certificado. Si curl informa de un problema TLS, espera un minuto y revisa los logs: la causa suele ser que el DNS todavía no apunta al servidor.

Paso 4: Crear la cuenta de administrador y cerrar el registro

Abre https://your_domain/register en el navegador y crea tu cuenta con tu correo y una contraseña robusta. Este primer usuario será el propietario de la instancia.

Una vez creada la cuenta, impide que otras personas se registren. Con invite_only solo podrán crear cuenta quienes reciban una invitación a un sitio:

echo "DISABLE_REGISTRATION=invite_only" >> .env
docker compose up -d --force-recreate plausible

Comprueba que el registro ya no está disponible visitando de nuevo https://your_domain/register en una ventana privada.

Paso 5: Añadir tu sitio web y el script de seguimiento

En el panel, pulsa Add website, escribe el dominio del sitio que quieres medir (por ejemplo example.com, sin https:// ni www) y continúa. Plausible te mostrará el fragmento de código que debes insertar; cópialo tal cual desde el panel, ya que es el que corresponde a tu versión. Para Plausible CE 3.0 tiene esta forma:

<script defer data-domain="example.com" src="https://your_domain/js/script.js"></script>

Colócalo dentro de la etiqueta <head> de todas las páginas del sitio. En WordPress puedes usar el plugin oficial de Plausible o añadirlo en la cabecera del tema; en frameworks como Next.js o Astro, en el layout principal.

Para verificar la instalación, visita tu web en una ventana privada y abre el panel de Plausible: la visita aparece en la sección de visitantes en tiempo real en pocos segundos. Si no aparece, abre las herramientas de desarrollo del navegador, pestaña Red, y comprueba que la petición a /api/event devuelve el código 202.

Medir eventos personalizados

Para contar acciones como registros o descargas, define primero un objetivo en Site settings > Goals > Add goal > Custom event con el nombre del evento, por ejemplo Signup. Después envía el evento desde tu web. Añade este fragmento justo después del script principal para que las llamadas funcionen aunque el script aún no se haya cargado:

<script>
  window.plausible = window.plausible || function () { (window.plausible.q = window.plausible.q || []).push(arguments) };
</script>

Y llama a la función cuando ocurra la acción:

<button onclick="plausible('Signup')">Crear cuenta</button>

Paso 6: Configurar el correo (opcional)

Plausible envía invitaciones, restablecimiento de contraseña e informes semanales por correo. Para usar tu propio servidor SMTP, añade estas variables a .env con tus datos:

[email protected]
SMTP_HOST_ADDR=smtp.your_mail_provider.com
SMTP_HOST_PORT=587
SMTP_USER_NAME=your_smtp_user
SMTP_USER_PWD=your_smtp_password

Recrea el contenedor para aplicar los cambios:

docker compose up -d --force-recreate plausible

Consulta la wiki del repositorio plausible/community-edition para el resto de opciones de correo, como el uso de TLS implícito en el puerto 465.

Paso 7: Programar copias de seguridad

Los datos de Plausible viven en dos volúmenes de Docker: db-data (PostgreSQL, con usuarios, sitios y objetivos) y event-data (ClickHouse, con todas las visitas). Compose les antepone el nombre del directorio del proyecto. Compruébalo:

docker volume ls --filter name=plausible-ce
DRIVER    VOLUME NAME
local     plausible-ce_db-data
local     plausible-ce_event-data
local     plausible-ce_event-logs
local     plausible-ce_plausible-data

Copiar los archivos de una base de datos en ejecución puede producir una copia inconsistente, así que el script detiene el proyecto durante unos segundos, archiva los volúmenes y lo vuelve a arrancar. La instrucción trap garantiza que los servicios arranquen de nuevo aunque falle la copia:

sudo nano /usr/local/bin/plausible-backup
#!/usr/bin/env bash
set -euo pipefail

BACKUP_DIR="/var/backups/plausible"
COMPOSE_DIR="/opt/plausible-ce"
STAMP="$(date +%F_%H%M)"

mkdir -p "$BACKUP_DIR"
chmod 700 "$BACKUP_DIR"
cd "$COMPOSE_DIR"

docker compose stop
trap 'docker compose start' EXIT

for vol in db-data event-data; do
  docker run --rm \
    -v "plausible-ce_${vol}:/data:ro" \
    -v "$BACKUP_DIR":/backup \
    alpine tar -czf "/backup/plausible-${vol}-${STAMP}.tar.gz" -C /data .
done

cp .env "$BACKUP_DIR/plausible-env-$STAMP"
chmod 600 "$BACKUP_DIR/plausible-env-$STAMP"

find "$BACKUP_DIR" -type f -mtime +14 -delete

Hazlo ejecutable, pruébalo y prográmalo para las 03:15, cuando el tráfico suele ser menor:

sudo chmod 750 /usr/local/bin/plausible-backup
sudo /usr/local/bin/plausible-backup
sudo ls -lh /var/backups/plausible
echo '15 3 * * * root /usr/local/bin/plausible-backup' | sudo tee /etc/cron.d/plausible-backup

Mientras dura la copia, el script de seguimiento no puede registrar visitas, así que perderás los eventos de ese minuto. Copia también los archivos a otro servidor o almacenamiento externo.

Actualizar Plausible

Lee siempre las notas de la versión antes de actualizar: algunas versiones mayores requieren pasos manuales. Para una actualización normal, haz una copia, descarga las etiquetas nuevas y cambia a la versión deseada:

cd /opt/plausible-ce
sudo /usr/local/bin/plausible-backup
git fetch --tags origin
git checkout v3.0.2
docker compose up -d

Sustituye v3.0.2 por la versión a la que quieras actualizar. Como no has modificado compose.yml, el cambio de etiqueta no genera conflictos, y tus ajustes en .env y compose.override.yml se conservan.

Solución de problemas

  • El certificado no se emite: el registro DNS no apunta al servidor o el puerto 80 está bloqueado u ocupado por otro servicio. Revisa docker compose logs plausible y sudo ss -tlnp | grep ':80 '.
  • El contenedor de ClickHouse se reinicia: normalmente es falta de memoria. Comprueba docker compose logs plausible_events_db y free -h, y amplía la RAM del servidor.
  • No se registran visitas: el data-domain del script debe coincidir exactamente con el dominio dado de alta en Plausible.

Conclusión

Tienes Plausible Community Edition funcionando en Ubuntu 24.04 con HTTPS automático, el registro cerrado, tu sitio midiendo visitas sin cookies y copias de seguridad diarias. Como siguientes pasos, puedes crear objetivos de conversión, invitar a tu equipo desde Site settings > People y activar los informes semanales por correo.