Alojar Umami num VPS gerido é guardar as estatísticas dos seus sites numa máquina sua, que as nossas equipas mantêm atualizada e supervisionam dia e noite. O Umami é um software livre sob licença MIT que mede a audiência sem cookies. Este guia segue a sua documentação oficial: a instalação com o Docker Compose e o PostgreSQL, o HTTPS, o primeiro início de sessão, o script de rastreamento, o que o projeto diz sobre os dados pessoais, as definições úteis, as cópias de segurança e as atualizações.
Por Simon Vasconcelos Lee
Publicado a 15 de novembro de 2026Leitura: 12 minutos
APP_SECRET e TWO_FACTOR_ENCRYPTION_KEY, sirva o Umami em HTTPS num subdomínio próprio e mude logo a palavra-passe da conta admin.<head> das suas páginas: o rastreador não utiliza cookies.pg_dump, guarde o ficheiro .env num lugar seguro e atualize com docker compose pull.O Umami é uma plataforma de análise web e de produto, de código aberto. A sua documentação descreve uma ferramenta que reúne a audiência, as campanhas, o comportamento dos visitantes, as conversões, a retenção e as receitas, da primeira visita aos resultados que contam para a sua atividade. Está escrito em TypeScript sobre Next.js, e a sua imagem Docker corre com uma conta sem privilégios.
Uma instância acompanha vários sites: cada um recebe o seu próprio identificador e o seu script de rastreamento, e os seus colegas orientam-se através das contas e das equipas.
O Umami é publicado sob a licença MIT, em nome da Umami Software, Inc. Esta concede, gratuitamente, o direito de utilizar, copiar, modificar, fundir, publicar, distribuir, sublicenciar e vender cópias do software. Pode, portanto, fazê-lo correr para a sua empresa e para os sites dos seus clientes, sem licença para comprar.
A sua única condição: o aviso de direitos de autor e o aviso de permissão acompanham todas as cópias ou partes substanciais do software. Como qualquer licença MIT, fornece o software «tal como está», sem garantia.
A documentação apresenta o Umami como uma ferramenta de estatísticas sem cookies, sem rastreamento entre sites e sem recolha automática de dados pessoais. Autoalojado, mantém as suas estatísticas no seu próprio servidor: é você que decide onde ficam e durante quanto tempo.
| Questão | O que diz o projeto | Fonte |
|---|---|---|
| Cookies | O rastreador web não utiliza cookies; o facto de o seu site precisar ou não de um aviso de cookies depende dos outros serviços que utiliza e dos requisitos que se lhe aplicam | FAQ |
| Dados recolhidos | Páginas vistas, URL de origem, navegadores, sistemas operativos, tipos de dispositivo e localização aproximada | FAQ |
| 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 todos os meses por predefinição | Esquema e código, versão 3.4.1 |
| Conservação | Em autoalojamento, os dados são conservados até os eliminar | FAQ |
| RGPD | O Umami foi concebido a pensar na privacidade, e a conformidade depende da forma como o configura e utiliza | FAQ |
| Os dados que envia | Um identificador de visitante ou propriedades de eventos que decida enviar ficam sob a sua responsabilidade | Introdução |
Três definições do script de rastreamento vão mais longe, se o desejar: data-exclude-search retira os parâmetros de pesquisa dos URL registados, 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 assinala que esta última definição não constitui, por si só, uma solução completa de gestão do consentimento.
Se identificar os visitantes com sessão iniciada com data-distinct-id ou umami.identify(), a documentação recomenda um identificador de utilizador 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 arranca o Umami e a sua base de dados PostgreSQL. Desde a versão 3, o PostgreSQL é a única base de dados suportada, na versão 12.14 no mínimo, e a documentação recomenda configurá-lo no fuso horário UTC. Num servidor com o Docker instalado, crie uma pasta e comece pelos seus segredos, gerados aleatoriamente com o 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 depois este compose.yaml ao lado. Retoma o ficheiro do projeto na versão 3.4.1, com duas alterações: os segredos vêm do ficheiro .env, e a porta só é publicada 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 ligação à base de dados. A palavra-passe hexadecimal entra tal como está; uma palavra-passe com caracteres especiais exigiria uma codificação percentual.APP_SECRET: uma cadeia aleatória que protege os tokens de autenticação, própria de cada instalação. No código da versão 3.4.1, entra também no cálculo dos identificadores de sessão: mantenha-a estável.TWO_FACTOR_ENCRYPTION_KEY: 64 caracteres hexadecimais que cifram os segredos da autenticação de dois fatores. Sem ela, ninguém pode ativar a autenticação de dois fatores.admin. A sonda /api/heartbeat responde {"ok":true} assim que o Umami está pronto.latest acompanha a última versão publicada. O registo do projeto publica também etiquetas de versão, como 3.4.1, para fixar a que utiliza.A documentação de instalação não indica nenhum valor de memória nem de processador. O tamanho depende do tráfego dos sites acompanhados e do volume de dados que conserva. Num VPS gerido, descreva-nos a sua utilização e recomendamos-lhe o tamanho adequado.
O Umami escuta em HTTP na porta 3000, e a documentação sugere servi-lo atrás do seu servidor web, através de um proxy inverso. Atribua-lhe um subdomínio próprio, como stats.example.com, que aponte para o servidor com registos A e AAAA. Servir o Umami num caminho passa por BASE_PATH, uma variável lida na construção da aplicação: com a imagem publicada, o subdomínio é a via direta.
O proxy tem também de transmitir o endereço do visitante. O Umami lê-o nos cabeçalhos que recebe, entre os quais X-Real-IP e X-Forwarded-For: serve-se dele para distinguir os visitantes e para localizar o seu país. Se o seu proxy utilizar outro cabeçalho, CLIENT_IP_HEADER indica-o.
O Caddy obtém o certificado Let's Encrypt e ativa o HTTPS por si próprio. A sua diretiva reverse_proxy define X-Forwarded-For por predefinição: estas três linhas bastam.
stats.example.com {
reverse_proxy 127.0.0.1:3000
}
Este bloco retoma o exemplo Nginx da documentação do Umami, a escutar 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;
}
}
O Certbot instala depois o certificado e encarrega-se de o renovar:
sudo certbot --nginx
Ao criar a sua base de dados, o Umami abre uma conta de administrador: nome de utilizador admin, palavra-passe umami. A documentação pede que mude esta palavra-passe no primeiro início de sessão.
admin e umami.Guarde TWO_FACTOR_ENCRYPTION_KEY com as suas cópias de segurança: a documentação avisa que perder ou mudar esta chave torna ilegíveis os segredos guardados, e cada utilizador tem então de configurar de novo a sua autenticação de dois fatores.
<head> das suas páginas e visite depois o 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 simples etiqueta <script>.data-domains limita o rastreamento aos seus domínios de produção, o que deixa os seus ambientes de teste fora das estatísticas.localStorage.setItem('umami.disabled', 1).Alguns bloqueadores de anúncios bloqueiam tudo o que se assemelhe a estatísticas. Em autoalojamento, o Umami já é servido a partir do 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 muda o nome do ponto de recolha, em vez de /api/send. O script chama então sozinho o novo ponto de recolha; nas 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 entram no serviço umami do compose.yaml, e depois docker compose up -d recria o contentor para as ter em conta:
| Variável | O que 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 de rede externas, incluindo os ícones dos sites, servidos pelo DuckDuckGo por predefinição | 1 |
DISABLE_UPDATES | Desativa a verificação de novas versões | 1 |
IGNORE_IP | Exclui da recolha endereços IP e intervalos CIDR, como os dos seus escritórios | Uma lista separada por vírgulas |
SALT_ROTATION | Define a frequência com que muda o sal dos identificadores de sessão | month por predefinição |
REDIS_URL | Acrescenta uma cache Redis, que a documentação recomenda para os sites com muito tráfego ou para várias instâncias | O seu endereço Redis |
MCP_ENABLED | Abre o ponto de acesso /mcp: o seu assistente de IA lê as suas estatísticas em modo de leitura, com uma chave de API criada em Settings, API keys | 1 |
Tudo o que o Umami conserva vive na sua base de dados PostgreSQL: contas, sites, equipas e estatísticas. Exporte-a todos os dias e logo antes de cada atualização: em autoalojamento, estes dados são conservados sem limite de tempo. Ao lado da base de dados, o ficheiro .env contém os segredos que a tornam utilizável:
| Elemento | O que guarda | A copiar |
|---|---|---|
| A base de dados PostgreSQL | Contas, sites, equipas, relatórios e todas as estatísticas | Obrigatório, com pg_dump |
.env | A palavra-passe da base de dados, APP_SECRET e a chave da autenticação de dois fatores | Obrigatório, cifrado |
compose.yaml | A configuração da sua instância | Recomendado |
O pg_dump faz uma exportação coerente enquanto a base de dados está a ser utilizada. O formato personalizado, -Fc, é comprimido e restaura-se com o pg_restore:
docker compose exec -T db pg_dump -U umami -d umami -Fc > umami-$(date +%F).dump
Agende este 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. Colocadas no disco do servidor, estas exportações entram também nas suas cópias de segurança noturnas.
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 este exercício de vez em quando, numa cópia: é assim que verifica que uma cópia de segurança funciona.
A documentação dá dois comandos, a partir da pasta do compose.yaml. A base de dados mantém-se no seu volume:
docker compose pull
docker compose up --force-recreate -d
No reinício, o contentor 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. Depois de 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 sua rapidez:
docker compose exec db psql -U umami -d umami -c "ANALYZE;"
postgres:15-alpine do ficheiro. Passar para uma nova versão principal do PostgreSQL exige uma exportação e um restauro, ou o pg_upgrade.O autoalojamento exige cuidar do servidor para além da aplicação. Num VPS gerido, as nossas equipas assumem o servidor e acompanham a sua instância de forma proativa; o Umami continua a ser o seu software, com as suas definições e os seus dados.
| Assunto | As nossas equipas | Você |
|---|---|---|
| O servidor | Atualizações do sistema e de segurança, intervenções no servidor incluídas | O momento que convém à sua atividade |
| A supervisão | Servidor acompanhado 24 horas por dia, 7 dias por semana, com intervenção sem esperar pela sua chamada | A leitura dos registos da sua instância |
| Umami | Acompanhamento proativo: erros, lentidão e espaço em disco identificados, correção recomendada | A sua instalação, as suas atualizações e as suas definições, que aplica diretamente ou com o seu assistente de IA |
| Os sites e as estatísticas | O servidor que os suporta, vigiado e com cópias de segurança | As contas, os sites acompanhados, o script de rastreamento e o tempo de conservação dos dados |
| As cópias de segurança | Todas as noites, cifradas e guardadas fora da máquina; restauro incluído | As exportações próprias do Umami e o pedido de restauro, quando precisar |
| A migração | O seu servidor atual migrado, oferecido | O momento da mudança |
Se preferir que as nossas equipas intervenham na própria aplicação, este serviço é faturado à hora ou por pacote, com um orçamento comunicado antes da intervenção.
Com um VPS gerido da Simafri, as nossas equipas mantêm atualizado o servidor da sua instância Umami, vigiam-no dia e noite e intervêm sem esperar pela sua chamada; acompanham também a sua instância de forma proativa e recomendam-lhe as correções úteis, que aplica diretamente ou com o seu assistente de IA. As cópias de segurança são cifradas todas as noites e guardadas fora da máquina, o seu restauro está incluído, e a migração do seu servidor atual é oferecida.
Sim. O Umami está sob licença MIT: pode utilizá-lo, modificá-lo e redistribuí-lo numa empresa sem licença para comprar, desde que mantenha o seu aviso de direitos de autor. Resta o custo do servidor que o faz funcionar.
Não. A FAQ do projeto indica que o rastreador web do Umami não utiliza cookies. O facto de o seu site precisar ou não de um aviso de cookies depende dos outros serviços que nele utiliza e dos requisitos que se lhe 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 em MySQL transfere primeiro os seus dados para o PostgreSQL com o guia de migração do projeto e passa depois para a versão 3.
Parta do docker-compose.yml do projeto, que faz correr o Umami e o PostgreSQL, com segredos aleatórios num ficheiro .env e a porta publicada em 127.0.0.1. Execute docker compose up -d e coloque depois um proxy inverso em HTTPS à frente, num subdomínio.
Na instalação, o Umami cria uma conta admin com a palavra-passe umami. Mude-a no primeiro início de sessão, em Settings e depois Profile, e ative a autenticação de dois fatores no separador Security quando TWO_FACTOR_ENCRYPTION_KEY estiver definida.
Numa instância autoalojada, TRACKER_SCRIPT_NAME dá ao script outro nome que não script.js, e COLLECT_API_ENDPOINT muda o nome do ponto de recolha /api/send. Mude depois a origem do código de rastreamento nas suas páginas.
Exporte todos os dias a base de dados PostgreSQL com o pg_dump, a partir do contentor da base de dados, e guarde à parte o ficheiro .env, que contém APP_SECRET e a chave da autenticação de dois fatores. Restaure com o pg_restore e teste regularmente o restauro.
Um VPS gerido cobre o servidor: sistema, segurança, supervisão e cópias de segurança. As nossas equipas acompanham também a sua instância de forma proativa e recomendam-lhe as correções úteis, que aplica. Uma intervenção na aplicação é faturada à hora ou por pacote.
Simafri
Vamos falar do seu projeto
Diga-nos em poucas palavras o que precisa: respondemos-lhe rapidamente.
Obrigado! O seu pedido foi enviado. Responderemos em breve.
Prefere o email? Escreva-nos para support@simafri.com.