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 senha
    Dica
    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 Data

    Manutençã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.

    Perguntas frequentes