[comment]: # ({e62e1497-e62e1497})
# 5 Instalação a partir de containers

[comment]: # ({/e62e1497-e62e1497})

[comment]: # ({5f71f243-a3ac452e})
### Visão geral

Esta página descreve como implantar o Zabbix usando Docker ou Docker Compose.

[Docker Compose](#docker-compose) é a maneira mais rápida de implantar o Zabbix.
Ele lê um arquivo de configuração e inicia automaticamente todos os containers que compõem uma instalação completa do Zabbix, na ordem correta.

[Docker (implantação manual)](#docker-manual-deployment) alcança o mesmo resultado implantando cada componente passo a passo.

[comment]: # ({/5f71f243-a3ac452e})

[comment]: # ({b13b686a-fba82ded})
### Pré-requisitos

Antes de começar, certifique-se de que o Docker (1.12.0 ou posterior) esteja instalado no seu sistema.
Caso não esteja, siga o [guia de instalação do Docker](https://docs.docker.com/engine/install/).
Para implantação com Docker Compose, o Docker Compose (2.24.0 ou posterior) também é necessário.

Alguns componentes do Zabbix exigem que portas específicas estejam abertas no host que executa o Docker (por exemplo, 10051/TCP para o Zabbix server, 162/UDP para traps SNMP).
Consulte [Requirements](/manual/installation/requirements#default-port-numbers) para ver a lista completa de portas usadas pelos componentes do Zabbix.
Para o Zabbix server e o agent, a porta padrão pode ser alterada definindo a variável de ambiente `ZBX_LISTENPORT` no respectivo container.

[comment]: # ({/b13b686a-fba82ded})

[comment]: # ({6c7779eb-f9acea87})
### Imagens Docker disponíveis

O Zabbix fornece uma imagem Docker para cada componente do Zabbix, todas publicadas no [Docker Hub](https://hub.docker.com/u/zabbix).
Cada imagem é usada para criar um contêiner que executa esse componente.

|Componente do Zabbix|Imagem Docker|
|--|--------|
|Agent|[zabbix/zabbix-agent](https://hub.docker.com/r/zabbix/zabbix-agent/)|
|Agent 2|[zabbix/zabbix-agent2](https://hub.docker.com/r/zabbix/zabbix-agent2)|
|Server (MySQL)|[zabbix/zabbix-server-mysql](https://hub.docker.com/r/zabbix/zabbix-server-mysql/)|
|Server (PostgreSQL)|[zabbix/zabbix-server-pgsql](https://hub.docker.com/r/zabbix/zabbix-server-pgsql/)|
|Interface web (Apache + MySQL)|[zabbix/zabbix-web-apache-mysql](https://hub.docker.com/r/zabbix/zabbix-web-apache-mysql/)|
|Interface web (Apache + PostgreSQL)|[zabbix/zabbix-web-apache-pgsql](https://hub.docker.com/r/zabbix/zabbix-web-apache-pgsql/)|
|Interface web (Nginx + MySQL)|[zabbix/zabbix-web-nginx-mysql](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql/)|
|Interface web (Nginx + PostgreSQL)|[zabbix/zabbix-web-nginx-pgsql](https://hub.docker.com/r/zabbix/zabbix-web-nginx-pgsql/)|
|Proxy (SQLite3)|[zabbix/zabbix-proxy-sqlite3](https://hub.docker.com/r/zabbix/zabbix-proxy-sqlite3/)|
|Proxy (MySQL)|[zabbix/zabbix-proxy-mysql](https://hub.docker.com/r/zabbix/zabbix-proxy-mysql/)|
|Java gateway|[zabbix/zabbix-java-gateway](https://hub.docker.com/r/zabbix/zabbix-java-gateway/)|
|Serviço web|[zabbix/zabbix-web-service](https://hub.docker.com/r/zabbix/zabbix-web-service)|
|Armadilhas SNMP|[zabbix/zabbix-snmptraps](https://hub.docker.com/r/zabbix/zabbix-snmptraps/)|

::: noteclassic
Para usar [armadilhas SNMP](/manual/config/items/itemtypes/snmptrap), o contêiner de armadilhas SNMP deve compartilhar um volume com o contêiner do Zabbix server ou proxy (consulte [como usar esta imagem](https://hub.docker.com/r/zabbix/zabbix-snmptraps#how-to-use-this-image) no Docker Hub e o [exemplo](#deploy-zabbix-server-postgresql-with-snmp-traps) abaixo).
:::

Todas as imagens dos componentes do Zabbix no Docker Hub são baseadas nas versões principais mais recentes dos [sistemas operacionais suportados](#image-tags).
Essas imagens são reconstruídas automaticamente quando as imagens do sistema operacional subjacente são atualizadas.

[comment]: # ({/6c7779eb-f9acea87})

[comment]: # ({a7a01d95-e498c2aa})
#### Tags de imagem

Cada imagem oferece suporte a tags para selecionar o sistema operacional base e a versão do Zabbix:

```default
zabbix/<image>:<os>-<version>
```

Valores `<os>` suportados:

-   `alpine` - Alpine Linux
-   `ubuntu` - Ubuntu
-   `centos` - CentOS Stream
-   `ol` - Oracle Linux
-   `ltsc2022` - Windows 11 LTSC 2022 (somente Zabbix agent)

Valores `<version>` suportados:

-   `latest` - Versão estável mais recente do Zabbix no Alpine Linux
-   `<os>-latest` - Versão estável mais recente do Zabbix no SO selecionado
-   `<os>-trunk` - Build de desenvolvimento (nightly) mais recente no SO selecionado
-   `<os>-X.X-latest` - Release secundária mais recente do Zabbix de uma versão principal específica do Zabbix no SO selecionado
-   `<os>-X.X.*` - Release secundária específica do Zabbix no SO selecionado

Exemplos:

```bash
# Zabbix proxy (SQLite3) estável mais recente no Alpine Linux:
docker pull zabbix/zabbix-proxy-sqlite3:latest

# Zabbix proxy (SQLite3) estável mais recente no Ubuntu:
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-latest

# Build de desenvolvimento (nightly) mais recente do Zabbix server (MySQL) no Ubuntu:
docker pull zabbix/zabbix-server-mysql:ubuntu-trunk

# Release secundária 7.0 mais recente do Zabbix server (MySQL) no Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-7.0-latest

# Versão 7.0.1 do Zabbix server (MySQL) no Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-7.0.1
```

[comment]: # ({/a7a01d95-e498c2aa})

[comment]: # ({a76784bc-c443c22e})
### Docker Compose

O Docker Compose é a maneira mais rápida de implantar o Zabbix.
Ele lê um arquivo de configuração (Compose file) e cuida de toda a configuração — baixando imagens Docker, criando uma rede interna entre os containers, configurando o armazenamento, inicializando o banco de dados e iniciando tudo na ordem correta.

O repositório [official Zabbix Dockerfiles](https://github.com/zabbix/zabbix-docker) fornece arquivos Docker Compose prontos para uso e um sistema de configuração baseado em `.env`, com suporte a diferentes sistemas operacionais, backends de banco de dados e configuração dos componentes do Zabbix.

1\. Clone o repositório, navegue até ele e mude para a versão 7.0:

```bash
git clone https://github.com/zabbix/zabbix-docker.git
cd zabbix-docker
git checkout 7.0
```

2\. (Opcional) Personalize a implantação com [variáveis de ambiente](#environment-variables).
Esta etapa pode ser ignorada para uma configuração padrão.

3\. Implante a configuração padrão — Zabbix server, interface web (executando no Nginx) e um backend de banco de dados (MySQL ou PostgreSQL), cada um executando em seu próprio container no Alpine Linux.

```bash
# Com MySQL como banco de dados:
docker compose -f ./compose.yaml up -d

# Com PostgreSQL como banco de dados:
docker compose -f ./compose_pgsql.yaml up -d
```

Depois que os containers estiverem em execução (normalmente em 1 a 3 minutos), o Zabbix server é iniciado e a interface web fica disponível em `http://localhost`.

::: noteclassic
Use `docker compose ps` para verificar o status dos containers.
Todos os containers (exceto o container `zabbix-docker-server-db-init-1`) devem estar com o status `Up`.
Se algum estiver com `Exited`, verifique os logs em busca de erros com `docker logs -f <container-name>`.
:::

[comment]: # ({/a76784bc-c443c22e})

[comment]: # ({c9a11d44-0be3c140})
#### Variáveis de ambiente

Tanto o comportamento do Docker Compose quanto a configuração dos componentes do Zabbix podem ser personalizados usando variáveis de ambiente.

As **variáveis no nível do Compose** (definidas no [arquivo `.env`](https://github.com/zabbix/zabbix-docker/blob/7.0/.env)) controlam quais imagens Docker, portas e intervalos de IP de rede são usados.
Você pode usar essas variáveis inline antes do comando `docker compose` ou editar o arquivo `.env`.

Por exemplo, o comando a seguir implanta uma configuração completa do Zabbix com vários contêineres usando uma imagem baseada em Ubuntu (em vez do Alpine Linux padrão) e expondo a interface web via Nginx em portas HTTP (8282) e HTTPS (8443) personalizadas:

```bash
OS=ubuntu \
ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
ZABBIX_WEB_NGINX_HTTPS_PORT=8443 \
docker compose -f ./compose.yaml up -d
```

As **variáveis no nível do componente** (definidas nos arquivos [`env_vars/.env_<component>`](https://github.com/zabbix/zabbix-docker/blob/7.0/env_vars/)) controlam a configuração dos componentes do Zabbix.
Edite o respectivo arquivo `.env_<component>` antes de executar o comando `docker compose`.

Por exemplo, você pode ajustar a contagem de pollers passivos do Zabbix server e as configurações de cache, bem como configurar o fuso horário da interface web editando as seguintes variáveis:

```ini
# env_vars/.env_srv
ZBX_STARTPOLLERS=20
ZBX_CACHESIZE=64M
ZBX_HISTORYCACHESIZE=32M

# env_vars/.env_web
PHP_TZ=Europe/Paris
```

::: noteclassic
As variáveis de ambiente no nível do componente correspondem aos parâmetros de configuração dos componentes do Zabbix usando um estilo de nomenclatura diferente (por exemplo, `ZBX_STARTPOLLERS` corresponde a [`StartPollers`](/manual/appendix/config/zabbix_server#startpollers)).
Algumas variáveis são específicas do Docker, e alguns parâmetros de configuração não podem ser alterados (por exemplo, `PIDFile` e `LogType`).
Ao usar variáveis de ambiente, consulte a seção *Environment variables* na descrição da [imagem Docker](#available-docker-images) de cada componente no Docker Hub.
:::

[comment]: # ({/c9a11d44-0be3c140})

[comment]: # ({15680aeb-7d10f7dc})
#### Volumes

O Docker Compose armazena dados persistentes no diretório `zbx_env/`, criado ao lado do arquivo Compose.
Esse diretório preserva os dados dos componentes entre reinicializações e atualizações dos contêineres.

O conteúdo de `zbx_env/` é predefinido para a imagem de cada componente. Por exemplo:

-   `zbx_env/etc/` - usado pelo [contêiner da interface web do Zabbix](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql#allowed-volumes-for-the-zabbix-web-interface-container)
-   `zbx_env/usr/` e `zbx_env/var/` - usados pelo [contêiner do server Zabbix](https://hub.docker.com/r/zabbix/zabbix-server-mysql#allowed-volumes-for-the-zabbix-server-container)

Para mais informações sobre cada volume, consulte a seção *Allowed volumes* na descrição da [imagem Docker](#available-docker-images) de cada componente no Docker Hub.

[comment]: # ({/15680aeb-7d10f7dc})

[comment]: # ({4287ef6f-fb9850d6})
#### Makefile

O repositório Zabbix Dockerfiles também fornece um [Makefile](https://github.com/zabbix/zabbix-docker/blob/7.0/Makefile) como um atalho para tarefas comuns do Docker Compose.
Em vez de usar o comando completo `docker compose`, você pode usar comandos `make` mais curtos (execute `make help` para ver as opções disponíveis):

```bash
# Implantação padrão (Zabbix server, interface web, MySQL, tudo em Alpine Linux)
make up

# Implantação personalizada (Zabbix server, interface web com portas Nginx personalizadas, PostgreSQL, tudo em Ubuntu)
make up \
  OS=ubuntu \
  DB=pgsql \
  ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
  ZABBIX_WEB_NGINX_HTTPS_PORT=8443
```

::: noteimportant
Ao parar ou remover contêineres, sempre especifique o mesmo tipo de banco de dados que foi implantado (por exemplo, `make down DB=pgsql`).
:::

Por padrão, `make up` inicia apenas um conjunto mínimo de serviços (Zabbix server, interface web e banco de dados).
Isso mantém a configuração leve e evita iniciar componentes que talvez não sejam necessários.
Para incluir componentes adicionais, você pode usar os seguintes [perfis do Compose](https://docs.docker.com/compose/how-tos/profiles/):

```bash
# Implantação padrão + Zabbix agent, Java gateway, serviço web e traps SNMP:
make up COMPOSE_PROFILES=full

# COMPOSE_PROFILES=full + Zabbix proxy (MySQL e SQLite3):
make up COMPOSE_PROFILES=all
```

[comment]: # ({/4287ef6f-fb9850d6})

[comment]: # ({ec9e0e44-0b4b68c7})
### Docker (implantação manual)

Use a implantação manual quando quiser implantar o Zabbix passo a passo, executar componentes individuais, integrá-los a um ambiente existente ou usar um runtime de contêiner alternativo, como o Podman.

Por exemplo, para implantar um proxy do Zabbix, execute o seguinte comando:

```bash
docker run --name zabbix-proxy-sqlite3 \
  -e ZBX_SERVER_HOST=192.0.2.1 \
  -e ZBX_PROXYMODE=0 \
  -e ZBX_HOSTNAME=zabbix-proxy-sqlite3 \
  -v zabbix-proxy-data:/var/lib/zabbix/db_data \
  --init \
  -d \
  zabbix/zabbix-proxy-sqlite3:alpine-7.0-latest
```

:::noteimportant
O Zabbix (7.0.0-7.0.2) não deve ser executado como processo `PID1`/`init` em contêineres.
:::

Este comando:

-   Faz o pull da [imagem Docker](#available-docker-images) `zabbix/zabbix-proxy-sqlite3:alpine-7.0-latest`.

-   Cria e inicia um contêiner `zabbix-proxy-sqlite3` com base na imagem Docker (com as flags [`--init`](https://docs.docker.com/reference/cli/docker/container/run/#init) e [`-d`](https://docs.docker.com/reference/cli/docker/container/run/#detach)).

-   Configura o parâmetro [`Server`](/manual/appendix/config/zabbix_proxy#server) do proxy do Zabbix por meio da variável de ambiente `ZBX_SERVER_HOST`.
    Esse parâmetro especifica o endereço IP do server do Zabbix do qual o proxy recuperará os dados de configuração e para o qual enviará os dados coletados.
    Observe que outras variáveis necessárias para a operação de proxy ativo usam valores padrão e podem ser omitidas.

::: noteclassic
As variáveis de ambiente correspondem aos parâmetros de configuração dos componentes do Zabbix usando um estilo de nomenclatura diferente (por exemplo, `ZBX_SERVER_HOST` corresponde a [`Server`](/manual/appendix/config/zabbix_proxy#server)).
Algumas variáveis são específicas do Docker, e alguns parâmetros de configuração não podem ser alterados (por exemplo, `PIDFile` e `LogType`).
Ao usar variáveis de ambiente, consulte a seção *Environment variables* em cada descrição de [imagem Docker](#available-docker-images) do componente no Docker Hub.
:::

-   Conecta um local de armazenamento gerenciado pelo Docker (por exemplo, `/var/lib/docker/volumes/zabbix-proxy-data/`) ao diretório `/var/lib/zabbix` do contêiner, para que os dados do proxy do Zabbix sejam armazenados permanentemente, mesmo que o contêiner seja removido.

::: noteclassic
Para mais informações sobre cada volume, consulte a seção *Allowed volumes* em cada descrição de [imagem Docker](#available-docker-images) do componente no Docker Hub.
:::

Depois de implantar o contêiner do proxy do Zabbix, você pode prosseguir para [adicionar o proxy](/manual/distributed_monitoring/proxies#configuration) na interface web do Zabbix e [configurar hosts](/manual/config/hosts/host#configuration) para serem monitorados por esse proxy.

Os exemplos abaixo abrangem três cenários adicionais de implantação:

-   server do Zabbix (MySQL) com Java gateway
-   server do Zabbix (PostgreSQL) com traps SNMP
-   server do Zabbix (MySQL) com Java gateway no RHEL 8–10

Para mais exemplos, consulte a descrição de cada [imagem Docker](#available-docker-images) do componente no Docker Hub.

[comment]: # ({/ec9e0e44-0b4b68c7})

[comment]: # ({a807fe94-492bd3ba})
#### Implantar Zabbix server (MySQL) com Java gateway

Este exemplo mostra como implantar um Zabbix server com backend MySQL, um Java gateway para [monitoramento JMX](/manual/config/items/itemtypes/jmx_monitoring) e uma interface web baseada em Nginx.

1\. Crie uma rede Docker dedicada, para que todos os contêineres dos componentes do Zabbix possam se alcançar pelo nome do contêiner:

```bash
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
```

2\. Execute um contêiner vazio do servidor MySQL (substitua `zabbix_pwd` e `root_pwd` por senhas fortes e use esses valores nas etapas a seguir):

```bash
docker run --name mysql-server -t \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e MYSQL_ROOT_PASSWORD="root_pwd" \
  --network=zabbix-net \
  --restart unless-stopped \
  -d mysql:8.0-oracle \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
```

3\. Acompanhe os logs do MySQL e aguarde até que o MySQL esteja pronto para conexões (use `Ctrl+C` para sair dos logs):

```bash
docker logs -f mysql-server

# ... [Server] /usr/sbin/mysqld: ready for connections. ...
```

4\. Execute um contêiner do Zabbix Java gateway:

```bash
docker run --name zabbix-java-gateway -t \
  --network=zabbix-net \
  --restart unless-stopped \
  -d zabbix/zabbix-java-gateway:alpine-7.0-latest
```

5\. Ative `log_bin_trust_function_creators` no contêiner do servidor MySQL.
Isso relaxa temporariamente as restrições de segurança sobre funções armazenadas; a configuração será desativada nas etapas posteriores.
Ela permite que o usuário do banco de dados do Zabbix crie funções armazenadas sem o privilégio `SUPER`, que o MySQL exige quando o [binary logging](https://dev.mysql.com/doc/refman/8.0/en/stored-programs-logging.html) está habilitado (padrão desde o MySQL 8.0).
Execute o seguinte comando:

```bash
docker exec -it mysql-server mysql -u root -p'root_pwd' \
  -e "SET GLOBAL log_bin_trust_function_creators = 1;"
```

6\. Execute um contêiner do Zabbix server e conecte-o aos contêineres do Java Gateway e do servidor MySQL:

```bash
docker run --name zabbix-server-mysql -t \
  -e DB_SERVER_HOST="mysql-server" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
  --network=zabbix-net \
  -p 10051:10051 \
  --restart unless-stopped \
  --init \
  -d zabbix/zabbix-server-mysql:alpine-7.0-latest
```

7\. Acompanhe os logs do Zabbix server e aguarde até que o Zabbix server conclua a inicialização do esquema do banco de dados (use `Ctrl+C` para sair dos logs):

```bash
docker logs -f zabbix-server-mysql

# ... [info]: ** Creating 'zabbix' schema in MySQL
# ... [info]: ** Database schema successfully created!
```

8\. Desative `log_bin_trust_function_creators` no contêiner do servidor MySQL.
Isso restaura a restrição de segurança que impede usuários sem o privilégio `SUPER` de criar funções armazenadas.
Execute o seguinte comando:

```bash
docker exec -it mysql-server mysql -u root -p'root_pwd' \
  -e "SET GLOBAL log_bin_trust_function_creators = 0;"
```

9\. Execute um contêiner da interface web do Zabbix e conecte-o aos contêineres do Zabbix server e do servidor MySQL:

```bash
docker run --name zabbix-web-nginx-mysql -t \
  -e ZBX_SERVER_HOST="zabbix-server-mysql" \
  -e DB_SERVER_HOST="mysql-server" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e PHP_TZ="Europe/Riga" \
  --network=zabbix-net \
  -p 80:8080 \
  --restart unless-stopped \
  -d zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest
```

Depois que os contêineres estiverem em execução, o Zabbix server será iniciado e a interface web estará disponível em `http://localhost`.

::: noteclassic
Use `docker ps` para verificar o status dos contêineres.
Todos os contêineres devem estar com o status `Up`.
Se algum mostrar `Exited`, verifique os logs em busca de erros com `docker logs -f <container-name>`.
:::

#### Implantar Zabbix server (PostgreSQL) com traps SNMP

Este exemplo mostra como implantar um Zabbix server com backend PostgreSQL, [traps SNMP](/manual/config/items/itemtypes/snmptrap) e uma interface web baseada em Nginx.

1\. Crie uma rede Docker dedicada, para que todos os contêineres dos componentes do Zabbix possam se alcançar pelo nome do contêiner:

```bash
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
```

2\. Execute um contêiner vazio do servidor PostgreSQL (substitua `zabbix_pwd` por uma senha forte e use esse valor nas etapas a seguir):

```bash
docker run --name postgres-server -t \
  -e POSTGRES_USER="zabbix" \
  -e POSTGRES_PASSWORD="zabbix_pwd" \
  -e POSTGRES_DB="zabbix" \
  --network=zabbix-net \
  --restart unless-stopped \
  -d postgres:latest
```

3\. Execute um contêiner de traps SNMP do Zabbix:

```bash
docker run --name zabbix-snmptraps -t \
  -v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw \
  -v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro \
  --network=zabbix-net \
  -p 162:1162/udp \
  --restart unless-stopped \
  -d zabbix/zabbix-snmptraps:alpine-7.0-latest
```

4\. Execute um contêiner do Zabbix server e conecte-o aos contêineres do servidor PostgreSQL e de traps SNMP:

```bash
docker run --name zabbix-server-pgsql -t \
  -e DB_SERVER_HOST="postgres-server" \
  -e POSTGRES_USER="zabbix" \
  -e POSTGRES_PASSWORD="zabbix_pwd" \
  -e POSTGRES_DB="zabbix" \
  -e ZBX_ENABLE_SNMP_TRAPS="true" \
  --network=zabbix-net \
  -p 10051:10051 \
  --volumes-from zabbix-snmptraps \
  --restart unless-stopped \
  --init \
  -d zabbix/zabbix-server-pgsql:alpine-7.0-latest
```

5\. Acompanhe os logs do Zabbix server e aguarde até que o Zabbix server conclua a inicialização do esquema do banco de dados (use `Ctrl+C` para sair dos logs):

```bash
docker logs -f zabbix-server-pgsql

# ... [info]: ** Creating 'zabbix' schema in PostgreSQL
# ... [info]: ** Database schema successfully created!
```

6\. Execute um contêiner da interface web do Zabbix e conecte-o aos contêineres do Zabbix server e do servidor PostgreSQL:

```bash
docker run --name zabbix-web-nginx-pgsql -t \
  -e ZBX_SERVER_HOST="zabbix-server-pgsql" \
  -e DB_SERVER_HOST="postgres-server" \
  -e POSTGRES_DB="zabbix" \
  -e POSTGRES_USER="zabbix" \
  -e POSTGRES_PASSWORD="zabbix_pwd" \
  -e PHP_TZ="Europe/Riga" \
  --network=zabbix-net \
  -p 443:8443 \
  -p 80:8080 \
  -v /etc/ssl/nginx:/etc/ssl/nginx:ro \
  --restart unless-stopped \
  -d zabbix/zabbix-web-nginx-pgsql:alpine-7.0-latest
```

Depois que os contêineres estiverem em execução, o Zabbix server será iniciado e a interface web estará disponível em `http://localhost`.

::: noteclassic
Use `docker ps` para verificar o status dos contêineres.
Todos os contêineres devem estar com o status `Up`.
Se algum mostrar `Exited`, verifique os logs em busca de erros com `docker logs -f <container-name>`.
:::

#### Implantar Zabbix server (MySQL) com Java gateway no RHEL 8–10

Este exemplo mostra como implantar um Zabbix server com backend MySQL, um Java gateway para [monitoramento JMX](/manual/config/items/itemtypes/jmx_monitoring) e uma interface web baseada em Nginx, tudo executado no Red Hat Enterprise Linux 8, 9 ou 10.

No Red Hat Enterprise Linux, o runtime de contêiner recomendado é o Podman em vez do Docker.
O Podman funciona de forma semelhante ao Docker, mas não requer um serviço em segundo plano executado como root, o que o torna mais adequado para ambientes Red Hat.

1\. Crie um novo pod com o nome `zabbix` e portas expostas para a interface web do Zabbix e o trapper do Zabbix server:

```bash
podman pod create --name zabbix -p 80:8080 -p 10051:10051
```

2\. (Opcional) Execute um contêiner do Zabbix agent no pod `zabbix`:

```bash
podman run --name zabbix-agent \
  -e ZBX_SERVER_HOST="127.0.0.1,localhost" \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-agent-70:latest
```

3\. Crie um diretório `./mysql/` no host RHEL:

```bash
mkdir -p ./mysql
```

4\. Execute um contêiner vazio do servidor MySQL (substitua `zabbix_pwd` e `root_pwd` por senhas fortes e use esses valores nas etapas a seguir):

```bash
podman run --name mysql-server -t \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e MYSQL_ROOT_PASSWORD="root_pwd" \
  -v ./mysql/:/var/lib/mysql/:Z \
  --restart=always \
  --pod=zabbix \
  -d mysql:8.0 \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
```

5\. Acompanhe os logs do MySQL e aguarde até que o MySQL esteja pronto para conexões (use `Ctrl+C` para sair dos logs):

```bash
podman logs -f mysql-server

# ... [Server] /usr/sbin/mysqld: ready for connections. ...
```

6\. Execute um contêiner do Zabbix Java gateway:

```bash
podman run --name zabbix-java-gateway -t \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-java-gateway-70
```

7\. Ative `log_bin_trust_function_creators` no contêiner do servidor MySQL.
Isso relaxa temporariamente as restrições de segurança sobre funções armazenadas; a configuração será desativada nas etapas posteriores.
Ela permite que o usuário do banco de dados do Zabbix crie funções armazenadas sem o privilégio `SUPER`, que o MySQL exige quando o [binary logging](https://dev.mysql.com/doc/refman/8.0/en/stored-programs-logging.html) está habilitado (padrão desde o MySQL 8.0).
Execute o seguinte comando:

```bash
podman exec -it mysql-server mysql -u root -p'root_pwd' \
  -e "SET GLOBAL log_bin_trust_function_creators = 1;"
```

8\. Execute um contêiner do Zabbix server e conecte-o aos contêineres do Java Gateway e do servidor MySQL:

```bash
podman run --name zabbix-server-mysql -t \
  -e DB_SERVER_HOST="127.0.0.1" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e ZBX_JAVAGATEWAY="127.0.0.1" \
  --restart=always \
  --init \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-server-mysql-70
```

9\. Acompanhe os logs do Zabbix server e aguarde até que o Zabbix server conclua a inicialização do esquema do banco de dados (use `Ctrl+C` para sair dos logs):

```bash
podman logs -f zabbix-server-mysql

# ... [info]: ** Creating 'zabbix' schema in MySQL
# ... [info]: ** Database schema successfully created!
```

10\. Desative `log_bin_trust_function_creators` no contêiner do servidor MySQL.
Isso restaura a restrição de segurança que impede usuários sem o privilégio `SUPER` de criar funções armazenadas.
Execute o seguinte comando:

```bash
podman exec -it mysql-server mysql -u root -p'root_pwd' \
  -e "SET GLOBAL log_bin_trust_function_creators = 0;"
```

11\. Execute um contêiner da interface web do Zabbix e conecte-o aos contêineres do Zabbix server e do servidor MySQL:

```bash
podman run --name zabbix-web-mysql -t \
  -e ZBX_SERVER_HOST="127.0.0.1" \
  -e DB_SERVER_HOST="127.0.0.1" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e PHP_TZ="Europe/Riga" \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-web-mysql-70
```

::: noteclassic
O pod `zabbix` expõe a porta `80/TCP` (HTTP) para a máquina host a partir da porta `8080/TCP` do contêiner `zabbix-web-mysql`.
:::

Depois que os contêineres estiverem em execução, o Zabbix server será iniciado e a interface web estará disponível em `http://localhost`.

::: noteclassic
Use `docker ps` para verificar o status dos contêineres.
Todos os contêineres devem estar com o status `Up`.
Se algum mostrar `Exited`, verifique os logs em busca de erros com `docker logs -f <container-name>`.
:::

[comment]: # ({/a807fe94-492bd3ba})
