Tutoriais de VPS
Plausible Analytics auto-hospedado em VPS (2026): Docker, PostgreSQL, ClickHouse, HTTPS com Caddy e análise com privacidade
Implante o Plausible Analytics em um VPS do zero: execute o aplicativo, o PostgreSQL e o ClickHouse com Docker Compose, configure HTTPS com Caddy, SMTP, análise com privacidade, backup e restauração, atualizações e reversões, e solução de problemas comuns.

Plausible Analytics auto-hospedado em VPS (2026): Docker, PostgreSQL, ClickHouse, HTTPS com Caddy e análise com privacidade
Se você procura uma alternativa leve ao Google Analytics e não quer que os dados de visitas do seu site saiam do seu próprio VPS, o Plausible Analytics é uma boa opção para sites pequenos, desenvolvedores independentes e sites de conteúdo. A interface é limpa, por padrão ele não cria perfis pessoais entre sites e o script de rastreamento é mais leve que o de ferramentas de análise tradicionais.
No entanto, auto-hospedar o Plausible não é apenas executar um contêiner. Um ambiente de produção precisa lidar com PostgreSQL, ClickHouse, volumes persistentes, HTTPS do domínio, e-mail do administrador, backups e reversões de atualização. Este artigo usa Ubuntu 24.04 LTS, Docker Compose e Caddy como exemplo para implantar uma Plausible Community Edition que possa funcionar a longo prazo.
| Ferramenta | Mais adequada para | Principais contrapartidas |
|---|---|---|
| Plausible | Análise de site simples, rápida e com privacidade | Menos relatórios aprofundados e menos ecossistema de plugins que o Matomo |
| Umami | Apenas acompanhar visitas, origens, páginas e eventos, com baixo custo de manutenção | Menos análise avançada e menos processamento de dados |
| Matomo | Necessidade de metas, funis, e-commerce, busca interna e análise detalhada de visitantes | Manutenção mais complexa de banco de dados, arquivamento e atualizações |
Se você só precisa de análise leve, pode começar pelo tutorial de Umami auto-hospedado em VPS. Se o seu site já usa Matomo, você pode comparar com o tutorial de instalação do Matomo em VPS para avaliar o custo de migração. A vantagem do Plausible é que os relatórios padrão são claros o suficiente e, após a implantação, você não precisa manter tarefas extras de arquivamento no navegador.
O Plausible usa ao mesmo tempo o aplicativo web, o PostgreSQL e o ClickHouse. Um blog pequeno ou site empresarial pode começar com a seguinte configuração:
| Escala | Configuração recomendada | Adequada para |
|---|---|---|
| Até 100 mil visualizações de página por mês | 2 núcleos, 4 GB de RAM, 50 GB SSD | Blogs pessoais, landing pages, sites de pequenas empresas |
| De 100 mil a 1 milhão por mês | 4 núcleos, 8 GB de RAM, 150 GB SSD ou mais | Vários sites, sites com campanhas publicitárias contínuas |
| Mais de 1 milhão | Faça teste de carga primeiro e depois separe os bancos de dados ou amplie | Sites de notícias, SaaS e sites de conteúdo com muito tráfego |
O espaço em disco é consumido principalmente pelos dados de eventos do ClickHouse e pelos dados de configuração do PostgreSQL. Antes de entrar no ar, prepare um domínio dedicado, por exemplo analytics.example.com, e aponte os registros A / AAAA para o VPS. Abra apenas SSH, 80 e 443 no firewall e não exponha a porta 5432 do PostgreSQL nem a 8123 do ClickHouse à internet.
Instale o Docker Engine e o Compose v2 conforme a documentação oficial do Docker e depois confirme as versões:
docker --version
docker compose version
Crie o diretório de implantação e o diretório de backup:
sudo mkdir -p /opt/plausible/backups
sudo chown -R "$USER":"$USER" /opt/plausible
cd /opt/plausible
Gere três valores aleatórios e grave-os no .env:
openssl rand -hex 32
openssl rand -hex 32
openssl rand -hex 32
nano .env
chmod 600 .env
BASE_URL=https://analytics.example.com
SECRET_KEY_BASE=替换为第一组随机值
POSTGRES_PASSWORD=替换为第二组随机值
CLICKHOUSE_PASSWORD=替换为第三组随机值
DATABASE_URL=postgres://plausible:替换为第二组随机值@postgres:5432/plausible
CLICKHOUSE_DATABASE_URL=http://plausible:替换为第三组随机值@clickhouse:8123/plausible_events
O BASE_URL deve corresponder exatamente ao endereço de acesso final. Depois que o SECRET_KEY_BASE estiver em produção, não o altere sem motivo, ou as sessões existentes e os dados criptografados deixarão de ser válidos.
Crie /opt/plausible/compose.yaml:
services:
plausible:
image: ghcr.io/plausible/community-edition:v3.2.1
container_name: plausible
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
clickhouse:
condition: service_healthy
ports:
- "127.0.0.1:8000:8000"
env_file:
- .env
environment:
DISABLE_REGISTRATION: invite_only
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:8000/api/health || exit 1"]
interval: 30s
timeout: 10s
retries: 10
start_period: 60s
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
postgres:
image: postgres:16-alpine
container_name: plausible-postgres
restart: unless-stopped
env_file:
- .env
environment:
POSTGRES_DB: plausible
POSTGRES_USER: plausible
volumes:
- plausible_postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U plausible -d plausible"]
interval: 10s
timeout: 5s
retries: 20
clickhouse:
image: clickhouse/clickhouse-server:24.8-alpine
container_name: plausible-clickhouse
restart: unless-stopped
env_file:
- .env
environment:
CLICKHOUSE_DB: plausible_events
CLICKHOUSE_USER: plausible
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: "1"
volumes:
- plausible_clickhouse:/var/lib/clickhouse
- plausible_clickhouse_logs:/var/log/clickhouse-server
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:8123/ping | grep -q Ok"]
interval: 10s
timeout: 5s
retries: 20
volumes:
plausible_postgres:
name: plausible_postgres
plausible_clickhouse:
name: plausible_clickhouse
plausible_clickhouse_logs:
name: plausible_clickhouse_logs
A porta do aplicativo é vinculada apenas a 127.0.0.1:8000, e os bancos de dados ficam totalmente na rede interna do Compose. O exemplo fixa o Plausible Community Edition v3.2.1 e a série ClickHouse 24.8; antes de qualquer atualização oficial, ainda consulte as notas de versão do Plausible e a matriz de compatibilidade, e não use latest diretamente em um ambiente sem supervisão.
Inicie e verifique:
docker compose config >/dev/null
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=100 plausible
curl -I http://127.0.0.1:8000
sudo ss -lntp | grep ':8000'
Se você vir 0.0.0.0:8000, a vinculação da porta está errada e deve ser alterada imediatamente de volta para 127.0.0.1.
Edite /etc/caddy/Caddyfile:
analytics.example.com {
encode zstd gzip
reverse_proxy 127.0.0.1:8000
request_body {
max_size 16MB
}
}
Valide e recarregue:
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
curl -I https://analytics.example.com
O Caddy solicita e renova os certificados automaticamente. Se você usar Cloudflare, mantenha consistentes o DNS, o modo de proxy e a porta de origem, e não configure redirecionamentos forçados conflitantes entre o Caddy, a CDN e a camada de aplicação. Para mais detalhes, consulte Proxy reverso com Caddy e HTTPS automático em VPS.
Abra https://analytics.example.com no navegador e crie a primeira conta de administrador. Use um e-mail dedicado e uma senha longa gerada por um gerenciador de senhas. Depois, adicione um site, preencha o domínio do site, o fuso horário dos relatórios e os eventos que você precisa coletar, e mantenha o registro público desativado.
Copie o código JavaScript fornecido pelo Plausible e coloque-o antes da tag de fechamento head do modelo do seu site. Se você usar CSP, permita pelo menos o domínio de carregamento do script e o domínio de envio da análise; se um plugin de cache combinar ou adiar o script, exclua primeiro o script do Plausible.
Visite o site em uma janela anônima, confirme na aba Network do navegador que aparece uma solicitação para /api/event e depois verifique no painel em tempo real do Plausible. A página inicial abrir não significa que o script de rastreamento está funcionando.
Os convites de membros, a redefinição de senha e as notificações de alerta dependem de e-mail. Adicione o seguinte ao .env de acordo com o serviço SMTP que você usa:
[email protected]
SMTP_HOST_ADDR=smtp.example.com
SMTP_HOST_PORT=587
[email protected]
SMTP_USER_PWD=替换为SMTP专用密码
SMTP_HOST_SSL_ENABLED=false
Após a alteração, reconstrua o contêiner do aplicativo:
docker compose up -d --force-recreate plausible
docker compose logs --tail=100 plausible
A porta 587 geralmente funciona com STARTTLS, e a 465 geralmente usa TLS direto; consulte a documentação do seu provedor de e-mail para os detalhes. Não use a senha principal da sua conta de e-mail pessoal.
O Plausible não depende de cookies nem de perfis pessoais entre sites por padrão, mas a auto-hospedagem não equivale automaticamente a conformidade. Antes de entrar no ar, verifique:
- A política de privacidade explica quais páginas, origens e informações de dispositivo são coletadas e por quanto tempo são mantidas;
- Não coloque informações pessoais como e-mails, nomes ou números de pedido em URLs, nomes de eventos ou propriedades personalizadas;
- Crie apenas os eventos personalizados que você realmente precisa e evite enviar o conteúdo dos formulários como está;
- Se a sua região ou cenário de negócio exigir consentimento, pause a análise não essencial até obtê-lo;
- Exclua periodicamente os sites e membros que você não precisa mais e proteja as contas de administrador;
- Restrinja os pontos de entrada pelo firewall e pelo Caddy e não exponha as portas dos bancos de dados à internet.
"Sem cookies" reduz o risco para a privacidade, mas você ainda precisa de uma avaliação completa com base nos logs de acesso, no tratamento de IP, nas plataformas de anúncios e na região onde o seu negócio opera.
O PostgreSQL armazena contas, sites e configuração, enquanto o ClickHouse armazena os eventos de visita. Se você fizer backup de apenas um deles, após a restauração você terá "consigo fazer login, mas os relatórios históricos estão vazios" ou "há dados, mas a configuração dos sites foi perdida".
Backup do PostgreSQL:
cd /opt/plausible
mkdir -p backups
docker compose exec -T postgres pg_dump \
-U plausible -d plausible --format=custom \
> "backups/plausible-postgres-$(date +%F-%H%M).dump"
Ao fazer backup do volume de dados do ClickHouse, pare as gravações primeiro:
docker compose stop plausible clickhouse
docker run --rm \
-v plausible_clickhouse:/source:ro \
-v "$PWD/backups:/backup" \
alpine sh -c 'tar -C /source -czf /backup/plausible-clickhouse.tar.gz .'
docker compose start clickhouse plausible
Mantenha pelo menos uma cópia dos arquivos de backup em outra máquina ou em armazenamento de objetos, e restrinja as permissões de acesso. Você pode consultar Backups e simulações de restauração em VPS para criptografia, somas de verificação e testes periódicos de restauração.
Após a restauração, verifique a lista de sites, os relatórios históricos, os eventos em tempo real e o login do administrador; não verifique apenas se o contêiner está em execução.
Antes de atualizar, salve a versão atual da imagem, o arquivo Compose e os backups do PostgreSQL e do ClickHouse. Execute a atualização em horários de baixo movimento:
cd /opt/plausible
docker compose config >/dev/null
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=200 plausible
Encerre a janela de atualização somente depois de confirmar que o painel de administração, o script de rastreamento, os eventos em tempo real e os relatórios históricos funcionam normalmente. Se a nova versão não iniciar, restaure a tag da imagem anterior e os backups dos dados. Não execute docker compose down -v sem um backup, pois ele exclui os volumes dos bancos de dados.
Monitore os recursos regularmente:
docker stats --no-stream plausible plausible-postgres plausible-clickhouse
df -h
docker system df
O disco do ClickHouse geralmente cresce mais rápido que o do PostgreSQL. Configure alertas para o disco de dados do Docker, o diretório de backup e os logs, e reserve pelo menos 20% de espaço livre.
docker compose ps
docker compose logs --tail=200 plausible
curl -I http://127.0.0.1:8000
sudo journalctl -u caddy --no-pager -n 100
Enquanto o aplicativo ainda está iniciando, o Caddy retornará temporariamente 502; se persistir, verifique SECRET_KEY_BASE, BASE_URL, as conexões com os bancos de dados e a memória do contêiner.
docker compose logs --tail=200 postgres clickhouse
docker compose exec plausible getent hosts postgres clickhouse
Os nomes de host na rede do Compose são os nomes de serviço postgres e clickhouse, e você não pode usar localhost. Alterar a senha no .env não altera automaticamente o usuário já inicializado do banco de dados; você deve atualizar a conta do banco de dados de forma sincronizada ou seguir o procedimento de restauração de backup.
Na aba Network do navegador, verifique o código de status de /api/event, o domínio da solicitação e os erros de CSP. Causas comuns incluem domínio do site incorreto, script adiado por um plugin de cache, bloqueadores de anúncios bloqueando a solicitação e o site usando um endereço HTTP/HTTPS incorreto. Primeiro use uma janela anônima para descartar a influência das extensões do navegador.
docker compose exec clickhouse clickhouse-client --query 'SELECT 1'
docker compose logs --tail=200 clickhouse
df -h /var/lib/docker
Verifique se o ClickHouse está saudável, se o disco está cheio e se há erros de migração após uma atualização. Se apenas um determinado período estiver faltando, use os logs do contêiner e os logs de acesso do Caddy para determinar se os eventos não foram enviados ou se o banco de dados de análise não os gravou.
- O aplicativo escuta apenas em 127.0.0.1:8000, e 5432 e 8123 não estão expostos à internet
- BASE_URL, o domínio e a configuração HTTPS do Caddy são consistentes
- O administrador usa uma senha forte, e a política de registro continua somente por convite
- Os e-mails SMTP de convite e redefinição de senha foram testados
- O navegador consegue ver /api/event, e o painel em tempo real recebe visitas de teste
- A política de privacidade, a retenção de dados, os eventos personalizados e o mecanismo de consentimento foram confirmados
- Tanto o PostgreSQL quanto o ClickHouse têm backups externos
- Pelo menos uma simulação de restauração foi concluída, e os relatórios históricos podem ser restaurados
- As versões estão fixadas e com backup antes das atualizações, e após as atualizações são verificados erros 502, eventos e espaço em disco
Somente após concluir essas etapas o Plausible é um serviço de análise em VPS que pode funcionar a longo prazo, e não uma demo de Docker adequada apenas para um teste temporário. Para sites que valorizam privacidade, velocidade de página e autonomia dos dados, ele alcança um bom equilíbrio entre a complexidade de implantação e a capacidade de análise.