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
sudoque pertenezca al grupodocker. - 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 usayour_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
Notalos puertos que Docker publica se abren mediante sus propias reglas de iptables, sin pasar por UFW. En esta configuración solo se publican el 80 y el 443; PostgreSQL y ClickHouse quedan en la red interna de Docker.
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.
Notalos bloqueadores de anuncios pueden impedir la carga de
script.js. Servirlo desde un subdominio propio, como en esta guía, reduce el problema pero no lo elimina.
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 plausibleysudo ss -tlnp | grep ':80 '. - El contenedor de ClickHouse se reinicia: normalmente es falta de memoria. Comprueba
docker compose logs plausible_events_dbyfree -h, y amplía la RAM del servidor. - No se registran visitas: el
data-domaindel 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.
