Hospedar o Umami em um VPS gerenciado é guardar as estatísticas de seus sites em uma máquina própria, que nossas equipes mantêm atualizada e supervisionam dia e noite. O Umami é um software livre sob a licença MIT que mede a audiência sem cookies. Este guia segue a documentação oficial dele: a instalação com Docker Compose e PostgreSQL, o HTTPS, o primeiro login, o script de rastreamento, o que o projeto diz sobre os dados pessoais, as configurações úteis, os backups e as atualizações.
Por Simon Vasconcelos Lee
Publicado em 15 de novembro de 2026Leitura: 12 minutos
APP_SECRET e TWO_FACTOR_ENCRYPTION_KEY ao acaso, sirva o Umami em HTTPS em um subdomínio próprio e mude logo a senha da conta admin.<head> de suas páginas: o rastreador não usa cookies.pg_dump, guarde o arquivo .env em lugar seguro e atualize com docker compose pull.O Umami é uma plataforma de código aberto de estatísticas web e de produto. A documentação dele descreve uma ferramenta que reúne o tráfego, as campanhas, o comportamento dos visitantes, as conversões, a retenção e a receita, da primeira visita aos resultados que contam para sua atividade. Ele é escrito em TypeScript sobre Next.js, e a imagem Docker dele roda em uma conta sem privilégios.
Uma instância acompanha vários sites: cada um recebe o próprio identificador e o próprio script de rastreamento, e seus colegas se organizam por contas e equipes.
O Umami é publicado sob a licença MIT, em nome da Umami Software, Inc. Ela concede gratuitamente o direito de usar, copiar, modificar, fundir, publicar, distribuir, sublicenciar e vender cópias do software. Você pode, portanto, rodá-lo para sua empresa e para os sites de seus clientes, sem licença a comprar.
A única condição dela: o aviso de copyright e o aviso de permissão acompanham todas as cópias ou partes substanciais do software. Como toda licença MIT, ela fornece o software “no estado em que se encontra”, sem garantia.
A documentação apresenta o Umami como uma medição de audiência sem cookies, sem rastreamento entre sites e sem coleta automática de dados pessoais. Auto-hospedado, ele mantém suas estatísticas em seu próprio servidor: você decide onde elas ficam e por quanto tempo.
| Questão | O que o projeto diz | Fonte |
|---|---|---|
| Os cookies | O rastreador web não usa cookies; a necessidade de um aviso de cookies em seu site depende dos outros serviços que você usa e das exigências que se aplicam | FAQ |
| Os dados coletados | Páginas vistas, URLs de origem, navegadores, sistemas operacionais, tipos de dispositivo e localização aproximada | FAQ |
| O endereço IP | A tabela das sessões não tem coluna para o endereço IP; um identificador de sessão é um hash do site, do endereço, do navegador e de um sal que muda todo mês por padrão | Esquema e código, versão 3.4.1 |
| A retenção | Em auto-hospedagem, os dados são guardados até que você os exclua | FAQ |
| O GDPR | O Umami é concebido com a privacidade em mente, e a conformidade depende de como você o configura e o utiliza | FAQ |
| Os dados que você envia | Um identificador de visitante ou propriedades de evento que você escolhe enviar ficam sob sua responsabilidade | Introdução |
Três configurações do script de rastreamento vão mais longe, se você quiser: data-exclude-search retira os parâmetros de busca das URLs registradas, data-exclude-hash retira o fragmento, e data-do-not-track desativa o rastreamento nos navegadores que expõem a preferência Do Not Track. A documentação observa que essa última configuração não é, por si só, uma solução completa de gestão do consentimento.
Se você identificar os visitantes conectados com data-distinct-id ou umami.identify(), a documentação recomenda um identificador de usuário interno ou um hash em vez de um endereço de e-mail: o valor pode ser lido no HTML da página.
O repositório fornece um docker-compose.yml que inicia o Umami e o banco PostgreSQL dele. Desde a versão 3, o PostgreSQL é o único banco suportado, na versão 12.14 no mínimo, e a documentação recomenda configurá-lo no fuso horário UTC. Em um servidor com o Docker instalado, crie uma pasta e comece pelos segredos, gerados ao acaso com openssl, como sugere a documentação:
cat > .env <<EOF
POSTGRES_PASSWORD=$(openssl rand -hex 24)
APP_SECRET=$(openssl rand -hex 32)
TWO_FACTOR_ENCRYPTION_KEY=$(openssl rand -hex 32)
EOF
chmod 600 .env
Coloque então este compose.yaml ao lado. Ele retoma o arquivo do projeto na versão 3.4.1, com duas mudanças: os segredos vêm do arquivo .env, e a porta é publicada apenas em 127.0.0.1.
services:
umami:
image: ghcr.io/umami-software/umami:latest
ports:
- "127.0.0.1:3000:3000"
environment:
DATABASE_URL: postgresql://umami:${POSTGRES_PASSWORD}@db:5432/umami
APP_SECRET: ${APP_SECRET}
TWO_FACTOR_ENCRYPTION_KEY: ${TWO_FACTOR_ENCRYPTION_KEY}
depends_on:
db:
condition: service_healthy
init: true
restart: always
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
interval: 5s
timeout: 5s
retries: 5
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: umami
POSTGRES_USER: umami
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- umami-db-data:/var/lib/postgresql/data
restart: always
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 5
volumes:
umami-db-data:
docker compose up -d
curl -s http://127.0.0.1:3000/api/heartbeat
DATABASE_URL: a única variável obrigatória, a cadeia de conexão com o banco. A senha hexadecimal entra como está; uma senha com caracteres especiais exigiria a codificação por cento.APP_SECRET: uma cadeia aleatória que protege os tokens de autenticação, exclusiva de cada instalação. No código da versão 3.4.1, ela também entra no cálculo dos identificadores de sessão: mantenha-a estável.TWO_FACTOR_ENCRYPTION_KEY: 64 caracteres hexadecimais que criptografam os segredos da autenticação em duas etapas. Sem ela, ninguém consegue ativar a autenticação em duas etapas.admin. A sonda /api/heartbeat responde {"ok":true} assim que o Umami está pronto.latest acompanha a última versão publicada. O registro do projeto também publica tags de versão, como 3.4.1, para fixar a que você roda.A documentação de instalação não informa números de memória nem de processador. O tamanho depende do tráfego dos sites acompanhados e do volume de dados que você guarda. Em um VPS gerenciado, descreva-nos o uso e recomendamos o tamanho adequado.
O Umami escuta em HTTP na porta 3000, e a documentação sugere servi-lo atrás de seu servidor web, por um proxy reverso. Dê a ele um subdomínio próprio, como stats.example.com, apontado para o servidor com registros A e AAAA. Servir o Umami em um caminho passa por BASE_PATH, uma variável lida na compilação da aplicação: com a imagem publicada, o subdomínio é o caminho direto.
O proxy também precisa repassar o endereço do visitante. O Umami o lê nos cabeçalhos que recebe, entre eles X-Real-IP e X-Forwarded-For: ele o usa para distinguir os visitantes e localizar o país deles. Se seu proxy usa outro cabeçalho, CLIENT_IP_HEADER o nomeia.
O Caddy obtém o certificado Let's Encrypt e ativa o HTTPS sozinho. A diretiva reverse_proxy dele define X-Forwarded-For por padrão: estas três linhas bastam.
stats.example.com {
reverse_proxy 127.0.0.1:3000
}
Este bloco retoma o exemplo de Nginx da documentação do Umami, na porta 80 para deixar o Certbot instalar o HTTPS:
server {
listen 80;
listen [::]:80;
server_name stats.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Em seguida, o Certbot instala o certificado e cuida de renová-lo:
sudo certbot --nginx
Ao criar o banco, o Umami abre uma conta de administrador: usuário admin, senha umami. A documentação pede para mudar essa senha no primeiro login.
admin e umami.Guarde TWO_FACTOR_ENCRYPTION_KEY com seus backups: a documentação avisa que perder ou mudar essa chave torna ilegíveis os segredos armazenados, e cada usuário precisa então configurar de novo a autenticação em duas etapas.
<head> de suas páginas e visite seu site: os dados aparecem logo no painel.<script defer src="https://stats.example.com/script.js" data-website-id="your-website-id"></script>
next/script em vez de uma tag <script> simples.data-domains limita o rastreamento a seus domínios de produção, o que mantém seus ambientes de teste fora das estatísticas.localStorage.setItem('umami.disabled', 1).Alguns bloqueadores de anúncios bloqueiam tudo o que parece medição de audiência. Auto-hospedado, o Umami já é servido a partir de seu próprio domínio, e duas variáveis vão mais longe: TRACKER_SCRIPT_NAME dá ao script outro nome que não script.js, e COLLECT_API_ENDPOINT renomeia o endpoint de coleta, no lugar de /api/send. O script passa então a chamar sozinho o novo endpoint; em suas páginas, só muda a origem do código de rastreamento.
TRACKER_SCRIPT_NAME: "stats.js"
COLLECT_API_ENDPOINT: "/api/collect"
Estas variáveis de ambiente vão no serviço umami do compose.yaml, e depois docker compose up -d recria o contêiner para levá-las em conta:
| Variável | O que ela faz | Valor |
|---|---|---|
DISABLE_TELEMETRY | Desativa a telemetria anônima que o Umami envia ao projeto para melhorar a aplicação | 1 |
PRIVATE_MODE | Desativa todas as chamadas externas à rede, inclusive os ícones dos sites, servidos pelo DuckDuckGo por padrão | 1 |
DISABLE_UPDATES | Desativa a verificação de novas versões | 1 |
IGNORE_IP | Exclui da coleta endereços IP e faixas CIDR, como os de seus escritórios | Uma lista separada por vírgulas |
SALT_ROTATION | Define a frequência com que muda o sal por trás dos identificadores de sessão | month por padrão |
REDIS_URL | Acrescenta um cache Redis, que a documentação recomenda para sites de tráfego alto ou várias instâncias | Seu endereço Redis |
MCP_ENABLED | Abre o endpoint /mcp: seu assistente de IA lê suas estatísticas em modo somente leitura, com uma chave de API criada em Settings, API keys | 1 |
Tudo o que o Umami guarda fica no banco PostgreSQL dele: contas, sites, equipes e estatísticas. Exporte-o todos os dias e logo antes de cada atualização: em auto-hospedagem, esses dados são guardados sem limite de duração. Ao lado do banco, o arquivo .env guarda os segredos que o tornam utilizável:
| Elemento | O que ele guarda | A salvar |
|---|---|---|
| O banco PostgreSQL | Contas, sites, equipes, relatórios e todas as estatísticas | Obrigatório, com pg_dump |
.env | A senha do banco, APP_SECRET e a chave da autenticação em duas etapas | Obrigatório, criptografado |
compose.yaml | A configuração de sua instância | Recomendado |
pg_dump faz uma exportação coerente enquanto o banco está em uso. O formato personalizado, -Fc, é compactado e se restaura com pg_restore:
docker compose exec -T db pg_dump -U umami -d umami -Fc > umami-$(date +%F).dump
Agende esse comando no servidor pelo menos uma vez por dia, faça a triagem das exportações, que se acumulam, e envie uma cópia para outro lugar. Guardadas no disco do servidor, essas exportações também entram nos backups noturnos dele.
docker compose stop umami.docker compose stop umami
docker compose exec -T db pg_restore -U umami -d umami --clean --if-exists < umami-YYYY-MM-DD.dump
docker compose start umami
Repita esse exercício de tempos em tempos, em uma cópia: é assim que você verifica se um backup funciona.
A documentação dá dois comandos, a partir da pasta do compose.yaml. O banco continua no volume dele:
docker compose pull
docker compose up --force-recreate -d
Ao reiniciar, o contêiner aplica sozinho as migrações do esquema. A versão 3.4.0, de 17 de setembro de 2026, trazia duas, para as anotações e as chaves de API; a versão 3.4.1, de 23 de outubro de 2026, não traz nenhuma. Após uma atualização principal, como a passagem para a versão 3, a documentação sugere executar ANALYZE no PostgreSQL para que os painéis recuperem a velocidade:
docker compose exec db psql -U umami -d umami -c "ANALYZE;"
postgres:15-alpine do arquivo. Passar a uma nova versão principal do PostgreSQL exige uma exportação e uma restauração, ou pg_upgrade.A auto-hospedagem exige cuidar do servidor além da aplicação. Em um VPS gerenciado, nossas equipes assumem o servidor e acompanham sua instância de forma proativa; o Umami continua sendo seu software, com as configurações e os dados dele.
| Assunto | Nossas equipes | Você |
|---|---|---|
| O servidor | Atualizações do sistema e de segurança, com intervenções no servidor incluídas | O momento que convém a sua atividade |
| A supervisão | Servidor acompanhado 24 horas por dia, 7 dias por semana, com intervenção sem esperar sua ligação | A leitura dos logs de sua instância |
| Umami | Acompanhamento proativo: erros, lentidões e espaço em disco identificados, correção recomendada | A instalação, as atualizações e as configurações dele, que você aplica, por conta própria ou com seu assistente de IA |
| Os sites e as estatísticas | O servidor que os sustenta, monitorado e com backup | As contas, os sites acompanhados, o script de rastreamento e o tempo de guarda dos dados |
| Os backups | Toda noite, criptografados e guardados fora da máquina; restauração incluída | As exportações próprias do Umami e o pedido de restauração, quando você precisar |
| A migração | Seu servidor atual migrado, grátis | O momento da virada |
Se você preferir que nossas equipes intervenham na própria aplicação, esse serviço é cobrado por hora ou por valor fechado, com o orçamento informado antes da intervenção.
Com um VPS gerenciado Simafri, nossas equipes mantêm atualizado o servidor de sua instância Umami, monitoram-no dia e noite e intervêm sem esperar sua ligação; elas também acompanham sua instância de forma proativa e recomendam as correções úteis, que você aplica por conta própria ou com seu assistente de IA. Os backups são criptografados todas as noites e guardados fora da máquina, a restauração está incluída, e a migração de seu servidor atual é grátis.
Sim. O Umami está sob a licença MIT: você pode usá-lo, modificá-lo e redistribuí-lo em uma empresa sem licença a comprar, desde que mantenha o aviso de copyright dele. Resta o custo do servidor em que ele roda.
Não. O FAQ do projeto indica que o rastreador web do Umami não usa cookies. A necessidade de um aviso de cookies em seu site depende dos outros serviços que você usa nele e das exigências que se aplicam.
Não desde a versão 3: o Umami suporta o PostgreSQL, na versão 12.14 no mínimo. Uma instância da versão 2 com MySQL leva primeiro os dados para o PostgreSQL com o guia de migração do projeto e depois passa para a versão 3.
Parta do docker-compose.yml do projeto, que roda o Umami e o PostgreSQL, com segredos aleatórios em um arquivo .env e a porta publicada em 127.0.0.1. Execute docker compose up -d e coloque na frente um proxy reverso em HTTPS, em um subdomínio.
Na instalação, o Umami cria uma conta admin com a senha umami. Mude-a no primeiro login, em Settings e depois Profile, e ative a autenticação em duas etapas na aba Security, assim que TWO_FACTOR_ENCRYPTION_KEY estiver definida.
Em uma instância auto-hospedada, TRACKER_SCRIPT_NAME dá ao script outro nome que não script.js, e COLLECT_API_ENDPOINT renomeia o endpoint de coleta /api/send. Mude então a origem do código de rastreamento em suas páginas.
Exporte o banco PostgreSQL todos os dias com pg_dump, a partir do contêiner do banco, e guarde à parte o arquivo .env, que contém APP_SECRET e a chave da autenticação em duas etapas. Restaure com pg_restore e teste a restauração regularmente.
Um VPS gerenciado cobre o servidor: sistema, segurança, supervisão e backups. Nossas equipes também acompanham sua instância de forma proativa e recomendam as correções úteis, que você aplica. Uma intervenção na aplicação é cobrada por hora ou por valor fechado.
Simafri
Vamos falar de seu site
Conte para a gente sobre seu projeto em poucas palavras: responderemos rapidamente.
Obrigado! O seu pedido foi enviado. Responderemos em breve.
Prefere o e-mail? Escreva para a gente em support@simafri.com.