Implantar o Zabbix 7.0 LTS com o Docker Compose permite subir toda a estrutura de monitoramento de forma integrada e isolada em contêineres.
Diferente de configurações básicas que armazenam senhas em texto puro em arquivos .env (vulneráveis a vazamentos em repositórios Git e legíveis via docker inspect), esta arquitetura utiliza Docker Secrets. Com essa abordagem, as credenciais do banco de dados trafegam montadas apenas em memória RAM (tmpfs em /run/secrets/), atendendo às boas práticas de segurança para ambientes corporativos e de produção.
Componentes da Arquitetura
Para que o Zabbix funcione de forma completa, a estrutura sobe quatro serviços integrados em uma rede dedicada:
- MySQL Server (8.0): Banco de dados relacional responsável por armazenar configurações, métricas e históricos.
- Zabbix Server (7.0 LTS): O núcleo da solução, encarregado de processar as coletas, calcular triggers e disparar alertas.
- Zabbix Web Apache (7.0 LTS): Interface gráfica web para gerenciamento, visualização de gráficos, mapas e dashboards.
- Zabbix Agent 2 (7.0 LTS): Agente moderno escrito em Go para monitorar a saúde do próprio ambiente local com suporte a checagens simultâneas.
Pré-requisitos
- Sistema operacional Linux (Ubuntu Server ou Debian recomendados).
- Docker e o plugin Docker Compose v2 instalados. Clique aqui para instalar.
- Portas livres no servidor:
8080(Interface Web HTTP)8443(Interface Web HTTPS)10051(Comunicação do Zabbix Server)10050(Comunicação do Zabbix Agent)
- Conhecimento básico de terminal Linux e permissões de
sudo.
Passo 1: Criar a Estrutura de Diretórios e Proteção Git
Crie a pasta principal do projeto, o diretório restrito para os segredos e os diretórios de persistência para scripts de alerta e configurações personalizadas do agente:
mkdir -p ~/zabbix/secrets
mkdir -p ~/zabbix/zbx_env/usr/lib/zabbix/alertscripts
mkdir -p ~/zabbix/zbx_env/etc/zabbix/zabbix_agentd.d
cd ~/zabbix

Configurar o .gitignore
Para evitar que senhas ou arquivos locais sejam enviados acidentalmente para um repositório Git (GitHub/GitLab), crie um arquivo .gitignore na raiz do projeto:
cat > .gitignore <<'EOF'
secrets/
*.txt
zbx_env/
EOF

Vamos explicar o que esse script faz:
- Abaixo estamos ignorando segredos e senhas:
secrets/
*.txt - Em seguida vamos ignorar diretórios de ambiente local e finalizar o script:
zbx_env/
EOF
Se dermos um ls nessa pasta vamos ver que foram criados os diretórios:

Passo 2: Criar os Segredos do Docker (Docker Secrets)
Crie os arquivos contendo a senha do usuário root do MySQL e a senha do usuário zabbix.
Atenção: Substitua os valores de exemplo abaixo por senhas fortes antes de executar os comandos. Utilizamos o comando
printfem vez deechopara evitar que uma quebra de linha oculta (\n) seja gravada no final do arquivo de senha.
Inicialmente vamos definir a senha de root do MySQL:
printf "mysql123" > secrets/mysql_root_password.txt
Depois, vamos definir a senha senha do usuário ‘zabbix’ no banco de dados:
printf "zabbix123" > secrets/mysql_password.txt

Lembre-se de definir senhas fortes, estamos usando senhas genéricas aqui apenas porque é um tutorial educativo.
Você pode verificar os arquivos recém criados com o comando ls.

Restringir as permissões no Linux
Aplique o princípio do menor privilégio para garantir que apenas o proprietário da conta consiga acessar a pasta e ler os arquivos de senha:
chmod 700 secrets
chmod 644 secrets/*.txt
Passo 3: Criar o arquivo docker-compose.yaml
Crie o arquivo de orquestração dos contêineres. Esta configuração já inclui:
- O parâmetro
--log-bin-trust-function-creators=1no MySQL 8.0, permitindo que o Zabbix Server crie as triggers e funções iniciais do banco sem precisar da senha deroot. - Verificação de saúde (healthcheck) para garantir que o Zabbix Server só inicie após o banco de dados estar 100% operacional.
cat > docker-compose.yaml <<'EOF'
services:
# 1. Banco de Dados MySQL 8.0
mysql-server:
image: mysql:8.0
container_name: mysql-server
command:
- mysqld
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
- --default-authentication-plugin=mysql_native_password
- --log-bin-trust-function-creators=1
volumes:
- mysql-data:/var/lib/mysql
environment:
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql_root_password
- MYSQL_PASSWORD_FILE=/run/secrets/mysql_password
secrets:
- mysql_root_password
- mysql_password
restart: always
networks:
- zabbix-net
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost -u root -p$$(cat /run/secrets/mysql_root_password) --silent"]
interval: 10s
timeout: 5s
retries: 5
# 2. Zabbix Server (7.0 LTS)
zabbix-server:
image: zabbix/zabbix-server-mysql:ubuntu-7.0-latest
container_name: zabbix-server
ports:
- "10051:10051"
volumes:
- ./zbx_env/usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts
environment:
- DB_SERVER_HOST=mysql-server
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD_FILE=/run/secrets/mysql_password
secrets:
- mysql_password
restart: always
networks:
- zabbix-net
depends_on:
mysql-server:
condition: service_healthy
# 3. Zabbix Web Frontend (Apache)
zabbix-web:
image: zabbix/zabbix-web-apache-mysql:ubuntu-7.0-latest
container_name: zabbix-web
ports:
- "8080:8080"
- "8443:8443"
environment:
- ZBX_SERVER_HOST=zabbix-server
- ZBX_SERVER_PORT=10051
- DB_SERVER_HOST=mysql-server
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD_FILE=/run/secrets/mysql_password
- PHP_TZ=America/Sao_Paulo
secrets:
- mysql_password
restart: always
networks:
- zabbix-net
depends_on:
mysql-server:
condition: service_healthy
zabbix-server:
condition: service_started
# 4. Zabbix Agent 2
zabbix-agent:
image: zabbix/zabbix-agent2:ubuntu-7.0-latest
container_name: zabbix-agent
environment:
- ZBX_SERVER_HOST=zabbix-server
- ZBX_SERVER_PORT=10051
- ZBX_HOSTNAME=Zabbix server
volumes:
- ./zbx_env/etc/zabbix/zabbix_agentd.d:/etc/zabbix/zabbix_agentd.d:ro
ports:
- "10050:10050"
restart: always
networks:
- zabbix-net
depends_on:
- zabbix-server
networks:
zabbix-net:
driver: bridge
volumes:
mysql-data:
secrets:
mysql_root_password:
file: ./secrets/mysql_root_password.txt
mysql_password:
file: ./secrets/mysql_password.txt
EOF
Vamos colar o script e pressionar Enter.

Podemos verificar que foi criado o arquivo “docker-compose.yaml” com o comando ls .

Passo 4: Iniciar os Contêineres
Suba todos os serviços em segundo plano (background):
sudo docker compose up -d

Podemos verificar na figura acima que foram feitos os downloads dos containers e em seguida as configurações de rede e volumes e somente depois foram iniciados os containers.
Nota sobre a primeira execução: O MySQL e o Zabbix Server levarão de 1 a 3 minutos para criar toda a estrutura inicial do banco de dados. (vai demorar)
Passo 5: Verificar os Logs de Inicialização
Monitore os logs do Zabbix Server para acompanhar a criação das tabelas e o início dos serviços:
sudo docker compose logs -f zabbix-server

Aguarde até visualizar a confirmação de que os processos foram iniciados sem erros críticos:
Você verá algo semelhante ao que vemos na figura abaixo:

Pressione Ctrl + C para sair da visualização de logs.
Passo 6: Acessar a Interface Web
Abra o seu navegador e acesse o endereço IP do servidor na porta 8080 (ou localhost se estiver na máquina local):
http://SEU_IP:8080

Utilize as credenciais padrão de fábrica do Zabbix:
- Usuário:
Admin(com a letra “A” maiúscula) - Senha:
zabbix
Pode demorar um pouco, mas depois veremos uma tela como na figura abaixo.

Passo 7: Configurar o Host “Zabbix server” para Usar o Agente
O Zabbix vem pré-configurado com um host chamado Zabbix server apontando para o IP 127.0.0.1:10050. Como o agente está rodando em outro contêiner na rede Docker, é necessário ajustar a interface de conexão:
No menu lateral esquerdo da interface web, acesse Coleta de dados (Data collection) → Hosts.

Clique sobre o nome do host Zabbix server.

- Na seção Interfaces, localize a linha correspondente ao tipo Agent.

Faça as seguintes alterações:
Conectar em (Connect to): Altere de IP para DNS.
Nome DNS (DNS name): Digite zabbix-agent (em letras minúsculas e sem espaços).
Porta (Port): Mantenha 10050.
Clique no botão Atualizar (Update) no final da página.

Passo 8: Confirmar a Disponibilidade
Aguarde de 1 a 2 minutos e retorne à tela Coleta de dados → Hosts. Observe a coluna Disponibilidade (Availability): o ícone ZBX ficará verde, confirmando que o agente está respondendo às coletas do servidor.

Agora, ao clicar em Dashboards vamos ver o zabbix server sendo monitorado.

Caso o ícone permaneça vermelho ou cinza, teste a comunicação manualmente executando:
sudo docker exec -it zabbix-server zabbix_get -s zabbix-agent -k agent.version
Monitoramento de Contêiner vs. Máquina Física:
O agente em contêiner monitora os recursos isolados do próprio contêiner. Caso queira monitorar o hardware e os processos reais do sistema operacional hospedeiro (host Linux), instale o pacote
zabbix-agent2diretamente no sistema operacional do servidor ou mapeie os diretórios/proce/sysno contêiner do agente.
Comandos Úteis para o Dia a Dia
| Comando | Descrição |
sudo docker compose up -d | Inicia todos os serviços em segundo plano |
sudo docker compose down | Para e remove os contêineres (os dados permanecem salvos no volume) |
sudo docker compose ps | Exibe o status atual dos contêineres |
sudo docker compose logs -f | Exibe os logs de todos os serviços em tempo real |
sudo docker compose logs zabbix-server | Exibe apenas os logs do Zabbix Server |
sudo docker exec -it zabbix-agent bash | Acessa o terminal interno do contêiner do agente para testes |
Recomendações Finais de Segurança
- Altere a senha padrão do Admin: Assim que realizar o primeiro login na interface web, vá em Administração → Usuários, clique em
Admine altere a senha padrão (zabbix) por questão de segurança. - Rotina de Backup: Agende backups periódicos do banco de dados executando o
mysqldumpdiretamente no contêiner do MySQL: sudo docker exec mysql-server mysqldump -u root -p$(sudo cat secrets/mysql_root_password.txt) zabbix > backup_zabbix.sql- Atualizações: Quando quiser atualizar os contêineres para versões mais recentes da série 7.0 LTS, execute
sudo docker compose pulle, em seguida,sudo docker compose up -d.
Veja mais:
Zabbix: Monitorar Máquina Windows
Monitorar seu Roteador com Zabbix: Guia para Iniciantes
Zabbix Tags: Como Organizar e Filtrar Alertas de Monitoramento
Zabbix FIM: Monitoramento de Integridade de Arquivos
Como instalar o Zabbix com Docker Compose e Docker Secrets (Zabbix 7.0 LTS)
Zabbix Appliance no VirtualBox
Como instalar o Zabbix no Raspberry Pi

Juliana Mascarenhas
Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer






