Plausible Analytics self-hosted na VPS
Plausible Analytics é a alternativa privacy-first ao Google Analytics — sem cookies, sem rastreamento entre sites, compliant com GDPR/LGPD por padrão e script de apenas 1 KB. Self-hosteado na VPS, os dados dos seus visitantes ficam exclusivamente na sua infraestrutura, sem compartilhar com terceiros.
Instalar Plausible com Docker Compose
Stack oficial com PostgreSQL e ClickHouse:
bash
# Clonar o repositório oficial do Plausible:
git clone https://github.com/plausible/community-edition /opt/plausible
cd /opt/plausible
# Gerar chaves secretas:
openssl rand -base64 48 # para SECRET_KEY_BASE
openssl rand -base64 48 # para TOTP_VAULT_KEY
# Editar plausible-conf.env:
cat > plausible-conf.env << 'EOF'
BASE_URL=https://analytics.seudominio.com.br
SECRET_KEY_BASE=CHAVE_GERADA_ACIMA_48_CHARS
TOTP_VAULT_KEY=OUTRA_CHAVE_GERADA
DISABLE_REGISTRATION=invite_only
# MAILER_EMAIL=admin@seudominio.com.br
# SMTP_HOST_ADDR=smtp.gmail.com
# SMTP_HOST_PORT=587
# SMTP_USER_NAME=seu@email.com
# SMTP_USER_PWD=app_password
EOF
# O docker-compose.yml oficial já inclui PostgreSQL e ClickHouse
# Subir a stack:
docker compose up -d
# Criar conta admin (primeiro acesso):
# Acessar http://localhost:8000 (antes de configurar Nginx)
# Criar conta com email e senhaDica
Plausible usa ClickHouse como banco de dados para eventos de analytics — é a principal diferença da instalação. ClickHouse requer ao menos 1-2 GB de RAM exclusivos. Recomendado: VPS com 4 GB de RAM para rodar Plausible confortavelmente.
Configurar Nginx como proxy reverso
Proxy com SSL para o Plausible:
nginx
# /etc/nginx/conf.d/plausible.conf
server {
listen 80;
server_name analytics.seudominio.com.br;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name analytics.seudominio.com.br;
ssl_certificate /etc/letsencrypt/live/analytics.seudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/analytics.seudominio.com.br/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Adicionar o script de tracking ao site
Snippet de apenas 1 KB para rastrear visitantes sem cookies:
html
<!-- Adicionar ao <head> do site -->
<script defer data-domain="seusite.com.br"
src="https://analytics.seudominio.com.br/js/script.js">
</script>
<!-- Com proxy para evitar bloqueio por ad-blockers: -->
<!-- No Nginx do SEU SITE (não do Plausible): -->
<!--
location /stats/js/script.js {
proxy_pass https://analytics.seudominio.com.br/js/script.js;
proxy_set_header Host analytics.seudominio.com.br;
}
location /stats/api/event {
proxy_pass https://analytics.seudominio.com.br/api/event;
proxy_set_header Host analytics.seudominio.com.br;
proxy_set_header X-Forwarded-For $remote_addr;
}
-->
<!-- Então usar: -->
<!-- <script defer data-domain="seusite.com.br" data-api="/stats/api/event"
src="/stats/js/script.js"></script> -->
<!-- Para SPAs (React, Vue, Next.js) — rastrear navegação de rota: -->
<script defer data-domain="seusite.com.br"
src="https://analytics.seudominio.com.br/js/script.pageview-props.js">
</script>API de estatísticas do Plausible
Acessar dados de analytics via API para relatórios customizados:
bash
# Gerar API key: analytics.seudominio.com.br/settings → API Keys
# Visitantes únicos dos últimos 30 dias:
curl "https://analytics.seudominio.com.br/api/v1/stats/aggregate?site_id=seusite.com.br&period=30d&metrics=visitors,pageviews,bounce_rate,visit_duration" \
-H "Authorization: Bearer SEU_API_KEY" | python3 -m json.tool
# Top páginas:
curl "https://analytics.seudominio.com.br/api/v1/stats/breakdown?site_id=seusite.com.br&period=7d&property=event:page&metrics=visitors,pageviews&limit=10" \
-H "Authorization: Bearer SEU_API_KEY"
# Top países:
curl "https://analytics.seudominio.com.br/api/v1/stats/breakdown?site_id=seusite.com.br&period=30d&property=visit:country&metrics=visitors" \
-H "Authorization: Bearer SEU_API_KEY"
# Exportar dados históricos:
# analytics.seudominio.com.br/seusite.com.br/settings → Export DataManutenção e atualização
Atualizar o Plausible e fazer backup dos dados:
bash
# Atualizar Plausible:
cd /opt/plausible
docker compose pull
docker compose up -d --force-recreate
# Verificar saúde dos containers:
docker compose ps
docker compose logs plausible --tail=20
# Backup dos dados:
DATE=$(date +%Y%m%d_%H%M)
# PostgreSQL (metadados: usuários, sites, goals)
docker compose exec -T plausible_db \
pg_dump -U postgres plausible_db | gzip > /var/backups/plausible_pg_${DATE}.sql.gz
# ClickHouse (eventos de analytics — pode ser grande)
# O volume clickhouse_data_volume contém todos os eventos
docker run --rm \
-v plausible_clickhouse_data_volume:/data \
-v /var/backups:/backup \
alpine tar czf "/backup/plausible_clickhouse_${DATE}.tar.gz" /data$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.