Laboratório em bancada
Laboratório: Metabase em produção com PostgreSQL via Docker Compose
Você terá um ambiente Metabase funcional, conectado a um banco PostgreSQL, acessível via navegador, pronto para criar dashboards. O laboratório leva cerca de 2 horas.

- Duração estimada
- 120 min
- Passos
- 12
- Validações
- 4
Este laboratório ensina como implantar o Metabase open source em uma VM Linux, usando Docker Compose para orquestrar o Metabase e um banco PostgreSQL dedicado. Você aprenderá a configurar volumes persistentes, variáveis de ambiente seguras, criar o usuário inicial, conectar o Metabase ao banco e validar o acesso via web. O objetivo é entender o fluxo de implantação e os pontos críticos de operação segura.
Topologia
Uma VM Linux (exemplo: 192.168.56.10) roda dois containers: um com PostgreSQL, outro com Metabase. O Metabase conecta-se ao PostgreSQL pela rede interna do Docker. O acesso ao Metabase é feito via navegador em outro dispositivo na mesma rede, usando a porta 3000.
┌────────────┐ ┌─────────────┐n│ Usuário │ <───> │ Metabase │n│(192.168.56.1)│ │(192.168.56.10:3000)│n└────────────┘ │ │n │ │n ┌─────▼─────┐n │ PostgreSQL │n │(Docker net)│n └────────────┘Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| VM Linux (Ubuntu 22.04 ou Debian 12) | 2 vCPU, 4GB RAM, 10GB disco, acesso root, porta 3000 liberada |
| Metabase | AGPL v3 · a versão estável atual |
| PostgreSQL | PostgreSQL License · a versão estável atual |
| Docker | Apache 2.0 · a versão estável atual |
| Docker Compose | Apache 2.0 · a versão estável atual |
Roteiro
- Preparar a VM Linux
Atualize os pacotes da VM para garantir segurança e compatibilidade.
sudo apt update && sudo apt upgrade -yO que você deve ver: Sistema atualizado sem erros.
- Instalar Docker e Docker Compose
O Metabase e o PostgreSQL serão executados em containers. Instale Docker e Docker Compose para facilitar o gerenciamento.
sudo apt install docker.io docker-compose -yO que você deve ver: Comando 'docker --version' e 'docker-compose --version' retornam versões instaladas.
- Criar diretórios de persistência
Crie pastas para persistir dados do PostgreSQL e do Metabase. Isso evita perda de dados ao reiniciar containers.
mkdir -p ~/metabase_lab/postgres_datanmkdir -p ~/metabase_lab/metabase_dataO que você deve ver: Diretórios criados em ~/metabase_lab.
- Criar arquivo docker-compose.yml
Monte um arquivo docker-compose.yml para orquestrar os serviços Metabase e PostgreSQL, com volumes persistentes e variáveis de ambiente seguras.
cat > ~/metabase_lab/docker-compose.yml <<EOFnversion: '3.8'nservices:n db:n image: postgres:15n container_name: metabase-postgresn restart: unless-stoppedn environment:n POSTGRES_DB: metabasen POSTGRES_USER: metabasen POSTGRES_PASSWORD: m3t4b453_pwdn volumes:n - ./postgres_data:/var/lib/postgresql/datan networks:n - metanetn metabase:n image: metabase/metabase:latestn container_name: metabase-appn restart: unless-stoppedn environment:n MB_DB_TYPE: postgresn MB_DB_DBNAME: metabasen MB_DB_PORT: 5432n MB_DB_USER: metabasen MB_DB_PASS: m3t4b453_pwdn MB_DB_HOST: dbn ports:n - 3000:3000n volumes:n - ./metabase_data:/metabase-datan networks:n - metanetnnetworks:n metanet:n driver: bridgenEOFO que você deve ver: Arquivo docker-compose.yml criado em ~/metabase_lab.
- Iniciar os containers
Suba os containers em modo destacado. O Metabase irá inicializar e conectar ao PostgreSQL automaticamente.
cd ~/metabase_labndocker-compose up -dO que você deve ver: Containers 'metabase-postgres' e 'metabase-app' em execução.
- Verificar logs de inicialização
Acompanhe os logs do Metabase para garantir que subiu sem erros e conectou ao banco.
docker logs -f metabase-appO que você deve ver: Mensagens de inicialização do Metabase e confirmação de conexão ao PostgreSQL.
- Acessar a interface web do Metabase
Abra o navegador e acesse http://<IP-da-VM>:3000 para iniciar o setup.
O que você deve ver: Tela de configuração inicial do Metabase.
- Configurar usuário administrador
Crie o usuário admin do Metabase. Isso define quem gerencia o ambiente.
O que você deve ver: Usuário criado e acesso ao painel principal do Metabase.
- Conectar uma base de dados de exemplo
Adicione uma fonte de dados (pode ser o próprio PostgreSQL criado). Isso permite criar perguntas e dashboards.
O que você deve ver: Base de dados conectada e disponível no Metabase.
- Criar uma pergunta simples
No Metabase, crie uma pergunta (query) simples para validar a conexão e visualizar dados.
O que você deve ver: Resultado da consulta exibido na interface.
- Criar um dashboard
Monte um dashboard básico adicionando a pergunta criada. Isso valida a funcionalidade de BI.
O que você deve ver: Dashboard criado e visualizável.
- Testar persistência dos dados
Reinicie os containers e verifique se as configurações e dashboards permanecem.
docker-compose downndocker-compose up -dO que você deve ver: Ambiente volta ao ar com dados preservados.
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Acessar http://<IP-da-VM>:3000 de outro dispositivo na rede | Tela de login do Metabase aparece | |
| Executar 'docker ps' na VM | docker ps | Containers 'metabase-app' e 'metabase-postgres' em estado 'Up' |
| Criar e visualizar uma pergunta no Metabase | Resultado da consulta exibido sem erro | |
| Reiniciar containers e acessar novamente | docker-compose down && docker-compose up -d | Dashboards e configurações permanecem após reinício |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| Acesso negado ao Metabase na porta 3000 | Firewall bloqueando a porta | Liberar porta 3000/tcp no firewall da VM |
| Erro de conexão ao banco no log do Metabase | Variáveis de ambiente do banco incorretas | Verificar usuário, senha e nome do serviço no docker-compose.yml |
| Dados e dashboards somem após reinício | Volumes não persistentes | Conferir se os volumes estão mapeados corretamente no docker-compose.yml |
| Containers não sobem | Porta 5432 ou 3000 já em uso | Parar serviços conflitantes ou alterar mapeamento de portas |
Segurança e hardening
- Altere as senhas padrão do PostgreSQL e do Metabase.
- Não exponha a porta 3000 para a internet sem proxy reverso e autenticação forte.
- Restrinja o acesso aos volumes de dados.
- Mantenha Docker e containers sempre atualizados.
- Consulte a documentação do Metabase para variáveis de ambiente sensíveis.
