KYC-free — um e-mail e uma palavra-passe, nada mais.
Já é membro?
Recuperação
Perdeu a sua chave?
Introduza o seu e-mail — enviaremos um link de redefinição para a guarnição.
Lembra-se?
Dois fatores
Introduza o seu código.
Abra a sua aplicação de autenticação e introduza o código atual de 6 dígitos.
Tutorial · Análise·18 min de leitura · 40 min práticos
Você instalou um script para observar seus leitores. Ele observa de volta, e presta contas a outro lugar.
A análise é a última tag de terceiros que a maioria das pessoas mantém, e é a única que vê tudo: cada página, cada leitor, cada hora, em um sistema que você não possui e não pode auditar. Seis passos para substituí-la por um contador seu — Umami, Plausible Community Edition, Matomo ou nada além do log do servidor — rodando em uma máquina nórdica alugada sem documento de identidade. Sem cookies por padrão, sem banner para discutir, sem transferência da sua audiência de leitores para um país terceiro. A partir de $3.90 por mês. Testado no Debian 12.
As seis etapas
01
Escolher
Quatro ferramentas, uma tabela honesta
02
Provisionar
Um subdomínio, três portas
03
Implantar
Compose, Caddy, primeiro login
04
Instrumentar
Uma tag, e o caminho de primeira parte
05
Cumprir
Duas leis, não uma
06
Keep
Retenção, backups, o log esquecido
Antes de começar · O que é a tag
Não é um contador. É uma linha de relatório.
Contar visitantes é genuinamente útil, e não há nada de sinistro em querer fazer isso. Você precisa saber se a reescrita ajudou, qual artigo as pessoas realmente terminam de ler, qual referência envia leitores em vez de apenas rejeições, e se o deploy de ontem à noite quebrou silenciosamente o checkout em um navegador. Cada uma dessas perguntas é respondida por uma tabela de visualizações de página, e cada uma delas é um motivo legítimo para medir.
O que vale a pena examinar de frente é o arranjo que quase todo mundo aceitou para obter essas respostas. A tag de análise padrão é um trecho de código, escrito por uma empresa de publicidade, que você coloca em cada página do seu site e instrui a rodar no navegador do seu leitor. Ela lê o endereço da página, a referência, a tela, o idioma, o dispositivo; ela define ou lê um identificador no dispositivo; ela envia tudo isso para um sistema que você não pode inspecionar, em um país cujas regras você não escolheu; e entrega o arquivo resultante a uma empresa cuja receita vem de saber o que as pessoas fazem. O proprietário do site ganha um painel. O painel é a metade menor da transação.
A conta chega em quatro parcelas, e só uma delas é óbvia. Há o banner de consentimento, que existe quase inteiramente por causa dessa única tag, que custa a você uma parcela mensurável de visitantes já na porta de entrada, e que você depois paga a um segundo fornecedor para gerenciar. Há a questão da transferência, porque os dados dos seus leitores partem para um país terceiro, e alguém eventualmente precisa registrar por que isso é lícito. Há os dados em si, que são sua audiência de leitores, em um banco de dados que você não pode consultar exceto através dos relatórios que lhe são oferecidos. E há a dependência: o produto é descontinuado, renomeado ou reestruturado no cronograma de outra pessoa, e da última vez que isso aconteceu, as medições antigas foram junto.
A auto-hospedagem remove os quatro problemas de uma vez, e não é um trabalho grande. O software é maduro, gratuito e sem surpresas; a máquina custa alguns dólares por mês; o trabalho é de uma noite. O que você ganha de volta é uma tabela que é sua, em hardware em uma jurisdição que você escolheu, sem terceiros a declarar e — para a maioria das configurações — sem banner para discutir. Quatro formas de saber quantas pessoas leem seu site, e quanto cada uma custa:
Propriedade
A grande tag de análise gratuita
Um SaaS de análise com foco em privacidade
O mesmo software, o seu VPS
Quem detém a tabela de audiência de leitores
Uma empresa de publicidade
Um fornecedor, sob contrato
Você, em disco
Banner de consentimento necessário
Sim, na prática sempre
Geralmente não
Geralmente não — veja a etapa 05
Os dados saem do EEE
Sim, por design
Depende do fornecedor
Somente se você escolher uma máquina fora dele
Terceiros a divulgar
Pelo menos um, mais os subprocessadores dele
Um processador
Nenhum
Bloqueado por listas de filtros
Fortemente
Por nome de host, frequentemente
Raramente, uma vez que seja de primeira parte
Dados brutos disponíveis para você
Não — apenas relatórios
Por uma API, enquanto você paga
É o seu banco de dados
Custo mensal em 100k visualizações
Nada em dinheiro
Dezenas de dólares, subindo com o tráfego
$3.90–$7.90, fixo
Escolha-o quando
Você precisa da integração com a plataforma de anúncios e aceita o resto
Você quer a ética sem rodar nada
A audiência de leitores é sua, e a tabela também
A terceira coluna é uma resposta real, não uma falácia do espantalho: um fornecedor hospedado com foco em privacidade elimina a maioria dos mesmos problemas para pessoas que não deveriam estar rodando servidores, e pagar por um é um resultado melhor do que manter a tag de anúncios. Este guia é para o caso em que você já aluga uma máquina, ou estava pensando em fazer isso.
Etapa 01 · Escolher
Quatro ferramentas. O banco de dados decide a conta.
Essas quatro não são quatro variações da mesma coisa. Elas diferem no que usam para armazenar os dados, e essa única escolha define a pegada de memória, o crescimento de disco, o risco de atualização e a profundidade dos relatórios. Leia a coluna de armazenamento primeiro e a coluna de recursos depois; é essa a ordem em que a decisão realmente é tomada.
Ferramenta
Stack e armazenamento
Nível sensato
Escolha-o para
Umami
Aplicação Node + PostgreSQL ou MySQL. Dois containers.
Sentinel · $3.90
A resposta padrão. Leve, legível, sem cookies, multissite, licença MIT.
Plausible Community Edition
Aplicação Elixir + PostgreSQL + ClickHouse. Quatro containers.
Garrison · $7.90
Metas, funis e painéis públicos; consultas rápidas em alto volume.
Matomo
Aplicação PHP + MariaDB, mais uma tarefa de arquivamento agendada.
Garrison · $7.90
Paridade de recursos com a ferramenta dominante — segmentos, coortes, e-commerce, importação de logs.
GoAccess
Um binário lendo o log de acesso do servidor web. Nenhum banco de dados.
Umami é a opção para a qual recorrer, a menos que você tenha um motivo para não fazê-lo. É uma aplicação Node sobre um único banco de dados relacional, se contenta com um gigabyte de memória, o esquema é um punhado de tabelas que você mesmo pode consultar, e os relatórios cobrem o que a maioria das pessoas abre um painel para ver: páginas, referências, países, dispositivos, além de eventos personalizados quando você quiser. É sem cookies por padrão, e não exige nenhuma configuração para isso.
Plausible Community Edition é a versão auto-hospedável do produto hospedado, e a peça extra é o ClickHouse — um banco de dados colunar que faz consultas agregadas sobre dezenas de milhões de linhas parecerem instantâneas, e que vai usar toda a memória que você permitir. Essa é uma troca justa acima de alguns milhões de visualizações mensais, e uma escolha estranha abaixo disso. Leia os termos de licença do projeto antes de implantar: a Community Edition é feita para rodar sua própria análise, não para revender como serviço.
Matomo é a única das quatro que realmente substitui a ferramenta dominante recurso por recurso, e a honestidade dessa afirmação vale nos dois sentidos: você ganha segmentos, funis, coortes, atribuição de e-commerce, mapas de calor via plugins e a capacidade de importar seus próprios logs de servidor, mas também ganha uma aplicação PHP de grande porte cujas tabelas brutas crescem rápido e cujos relatórios são pré-computados por uma tarefa de arquivamento que você mesmo precisa agendar. Duas coisas fazem valer a pena considerá-lo de qualquer forma: ele pode ser configurado para não definir nenhum cookie, e configurações de medição de audiência dele já apareceram em listas publicadas por reguladores como ferramentas isentas de consentimento — confira a lista atual, não um post de blog, mas é uma vantagem real no papel.
GoAccess é a opção que ninguém sugere e que várias pessoas deveriam adotar. Ele lê o log de acesso que seu servidor web já escreve e o transforma em um relatório de terminal ou em uma única página HTML autocontida. Nada roda no navegador, nada é armazenado no dispositivo, e não há pergunta de consentimento a responder porque não há coleta além da própria requisição. O que você perde é tudo o que acontece dentro da página e qualquer esperança de contar pessoas em vez de requisições. Para um site de documentação ou um blog estático, essa costuma ser uma troca justa — e ele combina bem com uma das outras ferramentas em vez de substituí-la.
A decisão em uma linha
Se você não consegue nomear o recurso que precisa do Plausible ou do Matomo, você precisa do Umami. Implante-o em vinte minutos, rode-o por um mês, e deixe que aquilo que você não conseguir responder lhe diga se deve migrar. Migrar depois custa a você o histórico e nada mais, e o histórico que você estaria perdendo é de um mês.
Etapa 02 · Provisionar
Uma máquina, um nome. Resolva o nome primeiro.
Peça o VPS e escolha o bastião pelo local onde estão seus leitores e onde você quer que os dados fiquem — Stockholm, Helsinki, Oslo e Reykjavík estão todas dentro do EEE, e esse é justamente o ponto. Depois execute a rodada de hardenização da primeira hora antes que qualquer outra coisa toque a máquina: SSH somente por chave, uma porta alterada, um firewall com negação por padrão, atualizações automáticas. São os mesmos quarenta minutos em todos os guias desta série, e isso não é opcional em uma máquina que vai guardar um ano da audiência de leitores de alguém.
Depois resolva o nome de host, porque ele fica embutido no trecho de rastreamento em cada página de cada site que você mede, e alterá-lo depois significa editar todos eles enquanto o nome antigo ainda recebe acessos. Dois formatos funcionam. Um subdomínio dedicado do site que você está medindo — o proxy reverso na máquina de análise responde por ele, e é a coisa mais simples que funciona. Ou um nome neutro em um domínio próprio, se uma única instância vai servir vários sites não relacionados e você preferir que o código-fonte de cada site não anuncie os outros. Crie o registro e deixe-o resolver antes de continuar: o proxy pede um certificado a uma autoridade certificadora no primeiro início, e a autoridade verifica o nome a partir de fora.
dig +short stats.example.com # must return the VPS address before you deploy
ufw default deny incoming
ufw allow 47222/tcp # administrative SSH, moved off 22
ufw allow 80/tcp # ACME challenge and the redirect to 443
ufw allow 443/tcp # the dashboard and the collection endpoint
ufw enable && ufw status numbered
Três portas, e nada mais. O banco de dados não deve ser publicado: ele vive na rede interna do Docker, alcançável pelo container da aplicação e por mais ninguém na internet. Essa é a forma mais comum, de longe, de uma máquina de análise auto-hospedada acabar aparecendo em um resultado de escaneamento — uma porta do PostgreSQL ou do MySQL vinculada ao endereço público porque um arquivo Compose de um tutorial tinha um mapeamento de portas que estava ali para desenvolvimento local.
Quanto ao tamanho, resista ao impulso de comprar além do necessário. Um Sentinel — 2 vCPU, 4 GB, 120 GB NVMe, $3.90 por mês — roda o Umami mais o Postgres com espaço de sobra, e vai guardar anos de eventos para um site com seis dígitos de visualizações mensais. Suba para um Garrison — 4 vCPU, 8 GB, 240 GB — se você escolheu o Plausible, porque o ClickHouse fica mais confortável ali, ou o Matomo, porque a tarefa de arquivamento quer os núcleos. A largura de banda é ilimitada em todos os níveis, e o tráfego de análise é um erro de arredondamento diante disso: cada acesso tem poucas centenas de bytes.
Etapa 03 · Implantar
Dois containers e um proxy. Depois feche a porta.
A implantação de referência abaixo é o Umami, porque é o que a maioria dos leitores deveria rodar, e porque a estrutura se generaliza: um container de aplicação, um container de banco de dados que ele pode alcançar e mais ninguém, e um proxy reverso guardando o certificado. Plausible e Matomo diferem no número de containers e nos nomes das variáveis, não na estrutura — pegue os arquivos Compose oficiais deles e aplique as mesmas três regras.
As três regras, em ordem de quanto vão custar a você se ignoradas. Fixe cada imagem em uma tag exata, nunca em uma flutuante: uma stack de análise que baixa silenciosamente uma nova versão major durante um reboot não relacionado é uma migração de esquema que você não programou. Gere o segredo da aplicação a partir de uma fonte de aleatoriedade real e guarde-o — ele criptografa material de sessão, e trocá-lo depois desconecta todo mundo, na melhor das hipóteses. Não publique nenhuma porta do banco de dados: os dois containers compartilham uma rede, e isso é todo o controle de acesso de que eles precisam.
mkdir -p /srv/analytics && cd /srv/analytics
openssl rand -base64 32 > .app_secret # keep this file; back it up with the database
openssl rand -base64 24 > .db_password
chmod 600 .app_secret .db_password
O arquivo Compose. Dois serviços, uma rede privada, um volume nomeado para o banco de dados, e nenhuma porta publicada — o proxy é a única coisa que conversa com o mundo externo:
O Caddy é o caminho mais curto para uma configuração de TLS correta aqui: duas linhas de configuração, um certificado obtido e renovado sem precisar de um cron job, e padrões modernos que você não precisa pesquisar. Se você já roda nginx na máquina, mantenha o nginx — o requisito é um proxy na frente, não esse proxy específico. De qualquer forma, a aplicação de análise nunca deve ser a coisa escutando diretamente na porta 443.
# Caddyfile — Caddy runs as a third service in the same Compose project, so
# "umami" resolves on the internal network. It is the only service that
# publishes ports (80 and 443).
stats.example.com {
encode zstd gzip
reverse_proxy umami:3000
}
Suba o ambiente, depois faça a única coisa que é genuinamente urgente. docker compose up -d, espere as migrações, e abra o painel. Cada uma dessas ferramentas vem com uma conta de administrador padrão documentada ou uma tela de primeiro registro aberta, e o nome de host se tornou conhecimento público no instante em que o certificado foi emitido, porque os logs de transparência de certificados são públicos e são raspados continuamente. Troque a senha padrão e encerre o registro em poucos minutos após o primeiro carregamento bem-sucedido, não amanhã.
docker compose up -d
docker compose logs -f umami # wait for the schema migration to finish
docker compose ps # both services healthy, no published ports listed
ss -tlnp | grep -E ':(5432|3306)' # must print nothing at all
Os cinco minutos que decidem quem é o proprietário da instância
O Umami vem com uma conta de administrador documentada cuja senha é a mesma em toda instalação do planeta. No Plausible, o primeiro visitante se torna o proprietário, a menos que o registro esteja desativado no ambiente. O Matomo guia o primeiro visitante por um instalador que cria o superusuário. Nos três casos, a janela entre "o certificado existe" e "você fez login" é uma janela em que outra pessoa pode fazer login em seu lugar — e ela nem precisa adivinhar o nome de host, porque ele é publicado para ela. Faça login primeiro, troque a credencial, depois coloque a chave de registro em fechado, e recarregue a página para confirmar que funcionou.
Etapa 04 · Instrumentar
Uma tag. Depois decida em que domínio ela vai residir.
Registre o site no painel, copie o identificador que ele fornece, e coloque uma tag de script com defer no template — no head ou no final do body, não importa muito, mas com defer de qualquer forma, para que ela nunca atrase a página. Essa é a integração completa. Não há gerenciador de tags, não há container, não há data layer e não há fiação de modo de consentimento, e essa ausência é a maior parte do que você veio buscar.
Carregue uma página do site, depois olhe o painel: o acesso deve aparecer em segundos. Se não aparecer, o console do navegador e a aba de rede respondem isso em menos de um minuto — os dois modos de falha são um identificador digitado errado, que gera uma requisição aceita e descartada, e uma requisição que nunca sai, o que significa que uma extensão a engoliu. Exclua o seu próprio tráfego antes de começar a ler os números, ou seus próprios recarregamentos de página serão sua principal referência por uma semana.
Agora a decisão que vale a pena considerar com cuidado. O trecho acima faz uma requisição para um nome de host que não é o do próprio site, e uma parte dos seus visitantes roda software que bloqueia esse tipo de requisição por padrão de nome. As listas capturam os nomes de arquivo conhecidos — qualquer coisa que termine no nome de script do próprio fornecedor — e os domínios hospedados conhecidos, independentemente de para qual servidor eles apontam. O ajuste tem duas partes: renomear o arquivo de script e o endpoint de coleta para algo que não seja um nome de rastreador, o que todas essas ferramentas suportam, e servi-los a partir da origem do próprio site por um caminho que seu proxy já existente repassa. Não sobra, então, nenhuma requisição de terceiros para bloquear.
# On the site's own web server — the two paths the tracker needs, first-party:
example.com {
handle /p/s.js { reverse_proxy https://stats.example.com { header_up Host stats.example.com } }
handle /p/collect { reverse_proxy https://stats.example.com { header_up Host stats.example.com } }
# ... the rest of the site
}
Dois detalhes fazem isso funcionar por completo, em vez de pela metade. O proxy precisa repassar o endereço do visitante em um cabeçalho que a aplicação de análise esteja configurada para confiar, ou cada acesso será atribuído ao seu próprio servidor web, e o relatório de país vai virar uma única barra. E o rastreador precisa ser informado sobre para onde enviar seus dados, o que é um atributo data na tag de script nas três ferramentas — renomear o arquivo sem redirecionar o endpoint resulta em um script que carrega e não reporta para lugar nenhum.
Esse é também o fim honesto da história da medição. Um visitante com JavaScript desativado, ou com uma lista estrita mais uma regra cosmética de primeira parte, não será contado, e nenhuma quantidade de engenharia deveria ser gasta perseguindo essas pessoas — um filtro em nível de rede é uma preferência declarada, e a resposta educada é o log do servidor, que os conta sem coletar nada extra. Eventos e single-page applications são a outra metade da instrumentação: cada ferramenta expõe uma pequena função para eventos personalizados, e todas elas precisam de uma chamada explícita na troca de rota, porque um framework que troca a visualização sem uma navegação não gera nenhum carregamento de página para o script perceber.
Etapa 05 · Cumprir
Duas leis, não uma. A maior parte da internet as confunde.
O motivo pelo qual as pessoas não conseguem concordar sobre se a análise precisa de um banner é que elas estão discutindo duas regras diferentes como se fossem uma só. Separe-as e a resposta se torna tratável. O Artigo 5(3) da Diretiva ePrivacy — transposto para a legislação nacional em todos os Estados-Membros, e a verdadeira origem do banner de cookies — diz que armazenar informação no equipamento terminal de um assinante, ou obter acesso a informação já armazenada nele, exige o consentimento dele, a menos que seja estritamente necessário para fornecer um serviço que ele explicitamente solicitou. Observe o que ele não diz: não diz cookie, e não diz dado pessoal. Ele alcança localStorage, alcança fingerprinting de dispositivo, e se aplica até mesmo a um valor que não identifica ninguém.
O GDPR é a segunda regra e rege uma questão diferente: o que você pode fazer com dados pessoais depois de obtê-los. Ele se aplica à sua análise independentemente de você armazenar algo no dispositivo ou não, porque toda requisição web entrega um endereço IP, e o Tribunal de Justiça decidiu em Breyer (C-582/14) que um endereço IP pode ser dado pessoal nas mãos de um operador de site. Assim, as duas regras se somam: o 5(3) pergunta você escreveu no dispositivo?, o GDPR pergunta o que você fez com o que chegou?.
Um servidor de análise sem cookies é construído para responder a ambas de forma restrita. Ele não armazena nada no dispositivo — nenhum cookie, nenhuma entrada de localStorage, nenhum identificador de qualquer tipo — o que tira o 5(3) de jogo, porque não há armazenamento nem acesso a armazenamento. E ele pega o endereço IP que necessariamente recebe, combina com o user agent, o site e um salt secreto que é rotacionado todos os dias, faz o hash do resultado, guarda o hash e descarta o endereço. Esse hash permite que a ferramenta distinga dois visitantes dentro de um mesmo dia e deixa de ser útil no momento em que o salt é rotacionado, o que é exatamente por que a mesma pessoa amanhã conta como um novo visitante. O processamento é real, e é praticamente o menor processamento possível.
O que resta é uma base legal para essa operação restrita, e na prática os operadores se apoiam em interesses legítimos sob o Artigo 6(1)(f), documentados com uma avaliação de balanceamento que é curta porque os fatos são simples: nenhum perfilamento, nenhum compartilhamento, nenhum rastreamento entre sites, um pseudônimo que morre diariamente, um período de retenção definido. Diversas autoridades de supervisão foram além e publicaram critérios sob os quais a medição de audiência estritamente limitada é isenta de consentimento por completo — os critérios variam por país, são atualizados, e o que importa para você é o do seu próprio país. Isto não é aconselhamento jurídico. É o mapa de quais instrumentos se aplicam, para que o aconselhamento que você buscar possa ser sobre a sua situação, em vez de sobre o formato geral do problema.
A pergunta
Tag de análise ad-tech
Sem cookies, auto-hospedado no EEE
Escreve no dispositivo do visitante?
Sim — então o consentimento do Artigo 5(3) se aplica
Não — o 5(3) não é acionado
Identificador durável mantido?
Meses a anos, entre sites
Um hash salgado que expira diariamente
Transferência para país terceiro a documentar?
Sim, com um mecanismo de transferência a manter
Nenhuma — a máquina está no EEE
Processadores a nomear e contratar
O fornecedor e seus subprocessadores
Seu provedor de hospedagem, pelo hardware, e mais ninguém
Quem pode responder a uma solicitação de acesso do titular
Você, através de qualquer exportação que exista
Você, com SQL — e frequentemente não há nada para retornar
Mais uma linha pertence ao dossiê, porque ela é o argumento discreto para fazer qualquer coisa disso. A legalidade de enviar dados de visitantes europeus para um serviço de análise dos EUA vem sendo litigada há uma década: o Tribunal de Justiça derrubou o marco de transferência anterior em Schrems II (C-311/18), em 2020; diversas autoridades nacionais de supervisão decidiram contra a tag de análise padrão nessa base em 2022 — a Áustria em janeiro, a França em fevereiro, a Itália em junho, com outras seguindo o exemplo — e uma nova decisão de adequação, o EU-US Data Privacy Framework, restabeleceu uma via de transferência em julho de 2023 e está ela mesma sob contestação. Você não precisa ter uma opinião sobre como isso vai terminar. Uma máquina em Helsinki remove essa questão do seu dossiê permanentemente, e isso vale mais do que estar certo sobre o estado atual da questão.
Etapa 06 · Manter
Retenção, backups, atualizações. E o log que você esqueceu.
Defina o período de retenção no primeiro dia, enquanto ele ainda é um número abstrato, e não um ano de dados aos quais você está apegado. Todas essas ferramentas conseguem excluir eventos brutos em um cronograma e manter os resumos agregados; doze meses de detalhe é generoso para quase qualquer finalidade, e isso significa que a resposta honesta para "por quanto tempo você guarda isso" é um número, e não "indefinidamente". Isso também resolve o problema de disco antes que ele comece, o que importa mais para o Matomo, cujas tabelas brutas são as que crescem.
Faça backup do banco de dados em algum lugar que não seja esta máquina e criptografe-o na saída — o guia de backups traz o tratamento completo, e a versão resumida é um dump noturno despejado via pipe em um repositório append-only em uma segunda máquina, idealmente em uma segunda jurisdição. Faça backup do segredo da aplicação junto com ele: um banco de dados que você consegue restaurar e um segredo que você não consegue é um painel em que ninguém consegue fazer login. Depois restaure-o uma vez em um VPS descartável, de propósito, antes de precisar.
Atualizações merecem um pouco mais de cuidado do que um simples bump de container comum, porque essas aplicações são donas de um esquema. Leia as notas de lançamento das versões major que você está pulando, faça o backup antes, não depois, depois troque a tag fixada e suba a stack enquanto observa os logs — uma migração que falha no meio do caminho é recuperável a partir do dump da noite anterior, e muito desagradável sem ele. Não há motivo para estar na versão mais recente na semana em que ela aparece, e há um bom motivo para não estar.
O log que desfaz todo o exercício
Você acabou de implantar uma stack que deliberadamente nunca armazena um endereço IP. A dois metros de distância, seu proxy reverso está escrevendo o endereço IP completo de cada visitante em um log de acesso, em texto simples, e guardando isso por todo o tempo que a rotação padrão determinar — tanto na máquina de análise quanto no servidor web na frente do seu site real. Esse log é um conjunto de dados maior e mais sensível do que o banco de dados de análise, é uma operação de processamento pela qual você precisa responder, e quase ninguém se lembra dele. Decida para que ele serve: se for só para depuração, truncar ou mascarar o último octeto no formato do log e rotacionar de forma agressiva; se você quiser usá-lo para medição baseada em log, diga isso na política e dê a ele um período de retenção real. O que você não deve fazer é deixá-lo no padrão e descrever seu site como não coletando endereços IP.
Por fim, os limites que vale a pena admitir com honestidade, porque um contador auto-hospedado não é uma versão estritamente melhor do que você removeu. Você perde a identidade entre dispositivos e entre dias, então visitante que retorna passa a significar algo mais restrito do que significava antes. Você perde a integração com a plataforma de anúncios, o que importa se você compra tráfego e é irrelevante se não compra — os dados do Search Console são um produto separado e não são afetados. Você passa a ter uma atualização e um backup para cuidar, o que é um custo recorrente real, medido em noites. E a própria máquina se torna algo que vale a pena proteger: ela guarda sua audiência de leitores, está na internet pública, e o checklist de hardenização mais uma rota privada até o painel são as duas coisas que a mantêm sem sobressaltos.
Notas de campo · Seis armadilhas
Seis formas de isso dar errado. Duas delas são silenciosas.
Armadilha 01 · Fatal
A senha padrão que todo mundo conhece
Uma dessas ferramentas vem com a mesma credencial de administrador em toda instalação no planeta; as outras entregam a propriedade a quem quer que se registre primeiro. O nome de host é publicado nos logs de transparência de certificados no instante em que o TLS funciona. Faça login, troque a credencial, encerre o registro — nos primeiros cinco minutos, não amanhã.
Armadilha 02 · Fatal
A porta do banco de dados vinda do tutorial
Arquivos Compose escritos para um laptop publicam a porta 5432 ou 3306 para que o autor pudesse se conectar a partir de uma GUI. Copie um para uma máquina pública e a tabela de audiência de leitores fica a um palpite de senha de distância. O container da aplicação alcança o banco de dados pela rede interna; nada precisa ser publicado além do proxy.
Armadilha 03 · Legal
Assumir que auto-hospedado significa isento
Mover o software para a sua própria máquina responde à questão da transferência e à questão do processador. Isso não responde ao Artigo 5(3) se você depois ativar um recurso que escreve no dispositivo, e não escreve sua política de privacidade para você. A isenção é uma propriedade da configuração, não da hospedagem.
Armadilha 04 · Silenciosa
Todo visitante chega do mesmo país
Um proxy reverso que não repassa o endereço do cliente faz cada acesso parecer que veio do próprio proxy. O painel se enche, os totais parecem certos, e as colunas de geografia e unicidade são silenciosamente ficção. Confira a distribuição por país no primeiro dia, não na revisão trimestral.
Armadilha 05 · Silenciosa
O log de acesso que você ainda está guardando
A stack foi escolhida porque ela nunca armazena um endereço IP. O proxy na frente dela armazena todos eles em texto simples por padrão, e o mesmo faz o servidor web na frente do seu site real. Mascare-os ou rotacione-os deliberadamente, e descreva-os na política — ou pare de afirmar que você não os coleta.
Armadilha 06 · Evitável
Perseguindo os números antigos
Os novos totais não vão coincidir com os antigos, e nenhuma configuração vai fazer com que coincidam. Regras de contagem diferentes, uma parcela bloqueada diferente, e nenhum banner filtrando a amostra. Gaste as duas semanas aprendendo sua própria proporção, depois trate o novo número como a referência e pare de reconciliar duas definições.
FAQ · Análise auto-hospedada
Perguntas, respondidas.
Onze perguntas que surgem ao fazer isso — começando pela que todo mundo erra nas duas direções.
Posso realmente eliminar o banner de cookies se eu hospedar por conta própria?
Frequentemente sim, e o motivo é mais preciso do que "auto-hospedado já resolve". Duas regras distintas estão em jogo. O Artigo 5(3) da Diretiva ePrivacy — a que todo mundo chama de lei dos cookies — exige consentimento para armazenar informações no dispositivo de um visitante ou ler informações dele, a menos que seja estritamente necessário para um serviço que ele pediu. Aplica-se a cookies, mas também a localStorage, a sessionStorage e a qualquer outra coisa que você deixe atrás, e se aplica independentemente de o dado ser pessoal ou não. Uma ferramenta que não escreve nada no dispositivo simplesmente não a aciona. O GDPR é a segunda regra e ele não desaparece: você ainda recebe um endereço IP e uma string de user agent em cada requisição, e um endereço IP é dado pessoal nas mãos de um operador de site (Tribunal de Justiça, Breyer, C-582/14). O que um servidor de análise sem cookies faz é gerar um hash desse IP com um salt que é rotacionado diariamente e depois descartar o IP, de modo que o que chega ao banco de dados é um pseudônimo por dia, por site, não uma pessoa. Essa é uma operação de processamento restrita e bem documentada, que a maioria dos operadores apoia em interesses legítimos, e diversas autoridades de supervisão já publicaram critérios sob os quais a medição pura de audiência é isenta de consentimento. É uma posição defensável, não uma palavra mágica: anote o que você coleta, por quê, e por quanto tempo, e leia a orientação do seu próprio regulador, não a landing page de um fornecedor. Nada nesta página é aconselhamento jurídico.
Qual eu devo escolher se eu não quiser pensar muito sobre isso?
Umami. É uma única aplicação Node e um banco de dados PostgreSQL, é confortável dentro de 1 GB de memória, o painel é legível já na primeira visita, é sem cookies logo de fábrica, e uma instância atende com facilidade todos os sites que você possui. Para a grande maioria das pessoas substituindo o Google Analytics em um blog, um site de documentação, uma loja ou um site institucional, é a resposta certa, e as outras três são uma discussão que você não precisava ter. Escolha o Plausible Community Edition em vez disso se você quiser funis, metas de receita e uma proposta de painel público mais forte, e estiver disposto a rodar o ClickHouse por causa deles. Escolha o Matomo se você genuinamente precisa do conjunto de recursos do Google Analytics — segmentos, coortes, relatórios personalizados, atribuição de e-commerce, importação de log bruto — e aceita que vai estar rodando uma aplicação PHP grande com uma tarefa de arquivamento agendada. Escolha o GoAccess se você quiser nenhum JavaScript na página.
Por que os números não coincidem com os do Google Analytics?
Porque elas estão contando coisas diferentes, e a diferença corre em ambas as direções ao mesmo tempo. Para cima: o Google Analytics atrás de um banner de consentimento só vê os visitantes que clicaram em aceitar, o que na Europa costuma ser a metade deles, enquanto um contador sem cookies e sem banner vê todo mundo. Para cima novamente: seu novo endpoint está no seu próprio domínio e não está nas listas de filtros que descartam requisições para rastreadores conhecidos. Para baixo: um hash que rotaciona diariamente não consegue reconhecer a mesma pessoa no dia seguinte, então um leitor que visita na segunda e na quinta são dois visitantes, não um visitante que retornou — as sessões são costuradas dentro de um mesmo dia e nunca entre dias ou dispositivos diferentes. Para baixo novamente: a maioria das ferramentas auto-hospedadas vem com um filtro de bots conservador e sem a inflação ao estilo Discover. O conselho prático é parar de reconciliar. Rode as duas por duas semanas para aprender sua própria proporção, anote em um Post-it, depois apague a tag do Google e use os novos números como a referência que eles agora são. O que importa para as decisões é o formato da tendência e a classificação relativa de páginas e fontes, e ambos sobrevivem à mudança intactos.
Bloqueadores de anúncios vão bloquear a minha própria instância também?
Parcialmente, e vale a pena saber exatamente como, porque o mecanismo é mais simplório do que as pessoas supõem. As grandes listas de filtros funcionam por padrões: os nomes de host dos serviços hospedados, e um conjunto de nomes de arquivo e de caminho conhecidos — uma requisição para algo terminado em plausible.js, umami.js ou matomo.php é reconhecível não importa para qual servidor ela vá. Mova o software para stats.example.com mantendo os nomes de arquivo padrão e você ainda vai perder uma parcela do público mais técnico. Existem dois ajustes honestos, e eles se somam. Renomeie o script e o endpoint de coleta para algo que não seja um nome de rastreador — todas essas ferramentas permitem isso, e custa uma linha de configuração. Sirva-os a partir da mesma origem do próprio site, por um caminho no seu domínio principal que o proxy reverso repassa, de modo que não sobre nenhuma requisição de terceiros para bloquear. Somando os dois, você recupera a maior parte da perda. Você não vai recuperar tudo, e não deveria querer: um visitante que roda uma lista estrita mais JavaScript desativado fez uma escolha, e a resposta correta a isso é o log do servidor, não uma corrida armamentista.
Fazer proxy do script pelo meu próprio domínio é um dark pattern?
A pergunta merece ser feita, e a resposta depende do que o bloqueador estava protegendo. Uma lista de filtros tem uma ferramenta só, e grosseira, e dois alvos muito diferentes: a rede de ad-tech que segue uma pessoa por dez mil sites e monta um perfil, e o contador que diz a um único proprietário de site que sua página de documentação foi lida quatrocentas vezes ontem. Bloquear o primeiro é uma pessoa se defendendo de vigilância. Bloquear o segundo é dano colateral de uma regra que não consegue diferenciá-los. Servir seu próprio contador a partir do seu próprio domínio não é contrabandear um rastreador por uma defesa; é remover uma requisição de terceiros que nunca deveria ter existido, e a mesma visita gera uma linha no seu log de acesso de qualquer forma. Isso deixa de ser defensável no momento em que a coisa pela qual você está fazendo proxy não é a coisa descrita aqui — se você adicionar identificadores entre sites, fingerprinting, ou um pipeline para uma plataforma de anúncios, o bloqueador estava certo e o proxy é uma mentira. O teste é simples e vale a pena aplicar a si mesmo uma vez: você conseguiria publicar uma página descrevendo exatamente o que esse endpoint coleta, e um leitor daria de ombros? Se sim, faça o proxy. Se não, o problema não é o proxy.
De que tamanho o VPS realmente precisa ser?
Menor do que você teme, com uma exceção. O Umami é um processo Node e um banco de dados Postgres: ele se estabiliza abaixo de 1 GB de memória para um site normal, e o banco de dados cresce aproximadamente o tamanho de uma linha de texto por visualização de página, então um Sentinel — 2 vCPU, 4 GB, 120 GB NVMe, $3.90 por mês — tem anos de margem. O GoAccess é um erro de arredondamento. O Matomo fica no meio: PHP e MariaDB são pouco exigentes até a tarefa de arquivamento rodar, que é o pico de CPU para o qual você precisa dimensionar, e suas tabelas brutas crescem mais rápido que as outras porque ele guarda mais por acesso. A exceção é o Plausible Community Edition, e o motivo é o ClickHouse, não o Plausible: um banco colunar é feito para trocar memória por velocidade de consulta, e vai se servir de tudo que você deixar disponível. Ele roda em 4 GB se você limitar seus caches na configuração padrão, e fica confortável em 8 GB — por isso o nível Garrison, a $7.90, é o piso sensato para esse caso. Em todos os casos, o número que eventualmente força uma atualização é o disco, não a memória, e a etapa 06 é como você evita isso.
Uma única instância pode medir vários sites diferentes?
Sim, e essa é a forma normal de rodar essas ferramentas. As três ferramentas em JavaScript são multissite por design: você registra cada domínio no painel, cada um recebe seu próprio identificador, e o mesmo endpoint de script aceita acessos para todos eles enquanto mantém os relatórios separados. Uma máquina, um certificado, um backup, uma atualização — vinte sites. Duas coisas para ter em mente conforme a lista cresce. Os relatórios são separados por site, então, se você administra sites para clientes, use as próprias permissões de usuário e equipe da ferramenta, em vez de entregar a conta de administrador para todo mundo, e verifique o que uma instância compartilhada implica antes de concordar com isso em um contrato: você se torna a parte que guarda os dados dos visitantes deles. E o endpoint de rastreamento é um nome compartilhado, o que significa que o domínio que o serve aparece no código-fonte de cada site da lista — um fato que vale a pena mencionar a um cliente cujos concorrentes leem o código-fonte da página, e um argumento a favor do caminho de primeira parte da etapa 04.
Eu realmente preciso de JavaScript? E quanto a analisar o log do servidor?
Para uma grande classe de sites, o log é suficiente, e é a medição mais honesta disponível: não coleta nada extra, porque as linhas já existem. O GoAccess lê um log de acesso de servidor web e produz um relatório de terminal ou um painel HTML autocontido — páginas principais, referências, códigos de status, largura de banda, tempos de resposta, user agents — para um site estático, um conjunto de documentação ou uma API, isso é quase tudo o que uma tag de script iria lhe dizer. Dois limites decidem se isso é suficiente para você. Um log não consegue ver o que acontece dentro da página: nenhuma profundidade de rolagem, nenhum clique em link externo, nenhum evento de botão, nenhuma troca de rota de single-page application, porque nada disso toca o servidor. E um log conta requisições, não pessoas, então você fica à mercê do cache e de uma população de bots que hoje é a maioria do tráfego bruto — filtrar é uma tarefa de manutenção permanente, não uma etapa de configuração. Há também uma armadilha de privacidade na direção oposta à que você esperaria, e a etapa 06 cobre isso: o log que você está analisando guarda endereços IP completos, o que é mais dado pessoal do que a ferramenta JavaScript que você rejeitou estava guardando.
Posso importar meu histórico do Google Analytics?
Realisticamente, não, e planejar em torno disso é melhor do que lutar contra isso. O Matomo é o único dos quatro com alguma história séria de importação, e mesmo ali as rotas práticas são importar seus próprios logs de servidor web e usar as ferramentas de migração para instâncias antigas do Matomo, em vez de uma transferência limpa dos relatórios já processados pelo Google. O Umami e o Plausible Community Edition podem aceitar uma carga em lote através das suas APIs, se você estiver disposto a escrever o mapeamento, mas você estaria inventando sessões e visitantes a partir de exportações agregadas, e o resultado é um gráfico que parece contínuo e não é comparável através da junção. O que realmente funciona: exporte os relatórios que importam para você a partir do Google antes que a propriedade desapareça — os totais mensais, as páginas principais, as fontes principais, as contagens de conversão — como CSV, guarde-os no mesmo lugar que seus outros registros, e comece a nova ferramenta como uma referência nova em uma data que você anote. Você vai consultar a exportação antiga duas vezes no primeiro ano e nunca mais, e cada número nela foi medido sob uma definição diferente de qualquer forma.
O que eu realmente preciso escrever na política de privacidade?
Menos do que você imagina, e a brevidade é justamente o ponto — um parágrafo que você consegue defender vale mais que uma página que você copiou. Diga o que é a ferramenta e que você mesmo a opera; nomeie a localização do servidor e o operador legal, já que poder dizer "em uma máquina que alugamos na Finlândia" é todo o benefício de fazer isso. Diga o que é registrado por visita: a página, a referência, o país, o dispositivo e a família do navegador, e um identificador pseudônimo derivado do endereço IP e do user agent com um salt que muda diariamente, a partir do qual o IP original não pode ser recuperado. Diga o que não é registrado: nenhum cookie, nenhum identificador entre sites, nenhum perfil, nenhum dado vendido ou compartilhado. Declare a base legal em que você se apoia e o período de retenção, e garanta que o número que você escreve seja o número com o qual a ferramenta está configurada. Se o seu proxy reverso mantém logs de acesso, isso é uma operação de processamento separada, com sua própria retenção — mencione isso, porque é o que as pessoas esquecem. Depois mantenha o parágrafo sincronizado com a configuração: uma política que descreve a configuração que você tinha há dois anos é peor do que uma vaga.
Por que o provedor de hospedagem importa para uma máquina que só guarda visualizações de página?
Porque "apenas visualizações de página" subestima o que é um banco de dados de análise. Agregado ao longo de um ano, ele é a audiência de leitores do seu site: quais páginas, em que ordem, de quais países, em que horários, chegando por quais links — e, para um pequeno editor ou uma loja de nicho, isso é um plano de negócios e uma lista de fontes em uma única tabela. Também é, do ponto de vista jurisdicional, exatamente o tipo de dado que um adversário pede a um provedor em vez de pedir a você. Duas propriedades decorrem disso. Onde a máquina está localizada decide qual processo legal a alcança: uma máquina em Stockholm, Helsinki, Oslo ou Reykjavík está dentro do EEE, o que remove por completo a questão de transferência internacional do seu dossiê de conformidade, e dentro de quatro regimes constitucionais com fortes tradições de liberdade de imprensa. E de quem é o nome na conta decide o que a própria conta revela: no NordBastion não há documento de identidade, nem nome legal, nem cartão, a fatura é liquidada em Monero ou Bitcoin, e a máquina que guarda sua audiência de leitores não é uma linha em um banco de dados de clientes em algum lugar com seu passaporte anexado a ela. O guia de jurisdições cobre, em detalhe, o piso de proteção legal de cada um dos quatro países.
Obtenha a máquina
Sua audiência de leitores, em uma máquina no EEE que não está registrada em seu nome.
Sentinel — 2 vCPU, 4 GB e 120 GB de NVMe por $3.90 por mês, em Helsinki, Stockholm, Oslo ou Reykjavík — roda o Umami e seu banco de dados com espaço para anos de eventos. Suba para o Garrison por $7.90 se você escolheu o Plausible ou o Matomo. Sem e-mail no cadastro, sem documento de identidade, sem cartão, e nenhum terceiro guardando a lista de todo mundo que já leu seu site.
Última revisão · 2026-10-12 · Fontes · Documentação do Umami, Plausible Community Edition, Matomo e GoAccess; Diretiva ePrivacy 2002/58/EC Artigo 5(3); Regulamento (UE) 2016/679; acórdãos do Tribunal de Justiça em Breyer (C-582/14) e Schrems II (C-311/18); decisão de adequação do EU-US Data Privacy Framework, de julho de 2023 · Cadência · anualmente
Part of the series
Anonymous VPS hosting in 2026 — the cluster.
This guide is one spoke of a larger series. The pillar walks the three privacy layers end to end — the sibling spokes below dive into the specifics.