[comment]: # ({e62e1497-e62e1497})
# 5 Instalación desde contenedores

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

[comment]: # ({5f71f243-a3ac452e})
### Descripción general

Esta página describe cómo desplegar Zabbix usando Docker o Docker Compose.

[Docker Compose](#docker-compose) es la forma más rápida de desplegar Zabbix.
Lee un archivo de configuración e inicia automáticamente todos los contenedores que componen una instalación completa de Zabbix, en el orden correcto.

[Docker (despliegue manual)](#docker-manual-deployment) logra el mismo resultado desplegando cada componente paso a paso.

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

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

Antes de comenzar, asegúrese de que Docker (1.12.0 o posterior) esté instalado en su sistema.
Si no lo está, siga la [guía de instalación de Docker](https://docs.docker.com/engine/install/).
Para el despliegue con Docker Compose, también se requiere Docker Compose (2.24.0 o posterior).

Algunos componentes de Zabbix requieren que determinados puertos estén abiertos en el host que ejecuta Docker (por ejemplo, 10051/TCP para Zabbix server, 162/UDP para traps SNMP).
Consulte [Requisitos](/manual/installation/requirements#default-port-numbers) para ver una lista completa de los puertos utilizados por los componentes de Zabbix.
Para Zabbix server y agent, el puerto predeterminado puede cambiarse configurando la variable de entorno `ZBX_LISTENPORT` en el contenedor correspondiente.

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

[comment]: # ({6c7779eb-f9acea87})
### Imágenes Docker disponibles

Zabbix proporciona una imagen Docker para cada componente de Zabbix, todas publicadas en [Docker Hub](https://hub.docker.com/u/zabbix).
Cada imagen se utiliza para crear un contenedor que ejecuta ese componente.

|Componente de Zabbix|Imagen 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/)|
|Interfaz web (Apache + MySQL)|[zabbix/zabbix-web-apache-mysql](https://hub.docker.com/r/zabbix/zabbix-web-apache-mysql/)|
|Interfaz web (Apache + PostgreSQL)|[zabbix/zabbix-web-apache-pgsql](https://hub.docker.com/r/zabbix/zabbix-web-apache-pgsql/)|
|Interfaz web (Nginx + MySQL)|[zabbix/zabbix-web-nginx-mysql](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql/)|
|Interfaz 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/)|
|Servicio web|[zabbix/zabbix-web-service](https://hub.docker.com/r/zabbix/zabbix-web-service)|
|Trampas SNMP|[zabbix/zabbix-snmptraps](https://hub.docker.com/r/zabbix/zabbix-snmptraps/)|

::: noteclassic
Para utilizar [trampas SNMP](/manual/config/items/itemtypes/snmptrap), el contenedor de trampas SNMP debe compartir un volumen con el contenedor de Zabbix server o proxy (consulte [cómo usar esta imagen](https://hub.docker.com/r/zabbix/zabbix-snmptraps#how-to-use-this-image) en Docker Hub y el [ejemplo](#deploy-zabbix-server-postgresql-with-snmp-traps) a continuación).
:::

Todas las imágenes de componentes de Zabbix en Docker Hub se basan en las últimas versiones principales de los [sistemas operativos compatibles](#image-tags).
Estas imágenes se reconstruyen automáticamente cuando se actualizan las imágenes del sistema operativo subyacente.

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

[comment]: # ({a7a01d95-e498c2aa})
#### Etiquetas de imagen

Cada imagen admite etiquetas para seleccionar el sistema operativo base y la versión de Zabbix:

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

Valores `<os>` admitidos:

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

Valores `<version>` admitidos:

-   `latest` - La versión estable más reciente de Zabbix en Alpine Linux
-   `<os>-latest` - La versión estable más reciente de Zabbix en el SO seleccionado
-   `<os>-trunk` - La compilación de desarrollo (nightly) más reciente en el SO seleccionado
-   `<os>-X.X-latest` - La versión menor más reciente de Zabbix de una versión mayor específica de Zabbix en el SO seleccionado
-   `<os>-X.X.*` - Una versión menor específica de Zabbix en el SO seleccionado

Ejemplos:

```bash
# Último Zabbix proxy estable (SQLite3) en Alpine Linux:
docker pull zabbix/zabbix-proxy-sqlite3:latest

# Último Zabbix proxy estable (SQLite3) en Ubuntu:
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-latest

# Compilación de desarrollo (nightly) más reciente de Zabbix server (MySQL) en Ubuntu:
docker pull zabbix/zabbix-server-mysql:ubuntu-trunk

# Última versión menor 7.0 de Zabbix server (MySQL) en Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-7.0-latest

# Versión 7.0.1 de Zabbix server (MySQL) en Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-7.0.1
```

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

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

Docker Compose es la forma más rápida de desplegar Zabbix.
Lee un archivo de configuración (Compose file) y se encarga de toda la configuración: descarga de imágenes Docker, creación de una red interna entre contenedores, configuración del almacenamiento, inicialización de la base de datos e inicio de todo en el orden correcto.

El repositorio [official Zabbix Dockerfiles](https://github.com/zabbix/zabbix-docker) proporciona archivos Docker Compose listos para usar y un sistema de configuración basado en `.env` que admite distintos sistemas operativos, backends de base de datos y configuración de componentes de Zabbix.

1\. Clona el repositorio, navega hasta él y cambia a la versión 7.0:

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

2\. (Opcional) Personaliza el despliegue con [variables de entorno](#environment-variables).
Este paso se puede omitir para una configuración predeterminada.

3\. Despliega la configuración predeterminada: Zabbix server, interfaz web (ejecutándose en Nginx) y un backend de base de datos (MySQL o PostgreSQL), cada uno ejecutándose en su propio contenedor sobre Alpine Linux.

```bash
# Con MySQL como base de datos:
docker compose -f ./compose.yaml up -d

# Con PostgreSQL como base de datos:
docker compose -f ./compose_pgsql.yaml up -d
```

Después de que los contenedores estén en funcionamiento (normalmente en 1–3 minutos), Zabbix server se inicia y la interfaz web está disponible en `http://localhost`.

::: noteclassic
Usa `docker compose ps` para comprobar el estado de los contenedores.
Todos los contenedores (excepto el contenedor `zabbix-docker-server-db-init-1`) deben tener el estado `Up`.
Si alguno muestra `Exited`, revisa sus registros en busca de errores con `docker logs -f <container-name>`.
:::

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

[comment]: # ({c9a11d44-0be3c140})
#### Variables de entorno

Tanto el comportamiento de Docker Compose como la configuración de los componentes de Zabbix pueden personalizarse mediante variables de entorno.

Las **variables a nivel de Compose** (definidas en el [archivo `.env`](https://github.com/zabbix/zabbix-docker/blob/7.0/.env)) controlan qué imágenes de Docker, puertos y rangos de IP de red se utilizan.
Puede usar estas variables en línea antes del comando `docker compose`, o editar el archivo `.env`.

Por ejemplo, el siguiente comando despliega una configuración completa de Zabbix con varios contenedores usando una imagen basada en Ubuntu (en lugar de Alpine Linux, que es la predeterminada) y exponiendo la interfaz web mediante Nginx en puertos HTTP (8282) y HTTPS (8443) personalizados:

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

Las **variables a nivel de componente** (definidas en los archivos [`env_vars/.env_<component>`](https://github.com/zabbix/zabbix-docker/blob/7.0/env_vars/)) controlan la configuración de los componentes de Zabbix.
Edite el archivo `.env_<component>` correspondiente antes de ejecutar el comando `docker compose`.

Por ejemplo, puede ajustar el número de pollers pasivos de Zabbix server y la configuración de caché, así como configurar la zona horaria de la interfaz web editando las siguientes variables:

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

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

::: noteclassic
Las variables de entorno a nivel de componente corresponden a los parámetros de configuración de los componentes de Zabbix usando un estilo de nombres diferente (por ejemplo, `ZBX_STARTPOLLERS` corresponde a [`StartPollers`](/manual/appendix/config/zabbix_server#startpollers)).
Algunas variables son específicas de Docker, y algunos parámetros de configuración no pueden cambiarse (por ejemplo, `PIDFile` y `LogType`).
Al usar variables de entorno, consulte la sección *Variables de entorno* en la descripción de la [imagen de Docker](#available-docker-images) de cada componente en Docker Hub.
:::

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

[comment]: # ({15680aeb-7d10f7dc})
#### Volúmenes

Docker Compose almacena los datos persistentes en el directorio `zbx_env/`, creado junto al archivo de Compose.
Este directorio conserva los datos de los componentes entre reinicios y actualizaciones de los contenedores.

El contenido de `zbx_env/` está predefinido para la imagen de cada componente. Por ejemplo:

-   `zbx_env/etc/` - utilizado por el [contenedor de la interfaz web de Zabbix](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql#allowed-volumes-for-the-zabbix-web-interface-container)
-   `zbx_env/usr/` y `zbx_env/var/` - utilizados por el [contenedor del server de Zabbix](https://hub.docker.com/r/zabbix/zabbix-server-mysql#allowed-volumes-for-the-zabbix-server-container)

Para obtener más información sobre cada volumen, consulte la sección *Allowed volumes* en la descripción de la [imagen de Docker](#available-docker-images) de cada componente en Docker Hub.

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

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

El repositorio de Dockerfiles de Zabbix también proporciona un [Makefile](https://github.com/zabbix/zabbix-docker/blob/7.0/Makefile) como acceso directo para tareas comunes de Docker Compose.
En lugar de usar el comando completo `docker compose`, puede usar comandos `make` más cortos (ejecute `make help` para ver las opciones disponibles):

```bash
# Despliegue predeterminado (Zabbix server, interfaz web, MySQL, todo en Alpine Linux)
make up

# Despliegue personalizado (Zabbix server, interfaz web con puertos Nginx personalizados, PostgreSQL, todo en Ubuntu)
make up \
  OS=ubuntu \
  DB=pgsql \
  ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
  ZABBIX_WEB_NGINX_HTTPS_PORT=8443
```

::: noteimportant
Al detener o eliminar contenedores, especifique siempre el mismo tipo de base de datos que se desplegó (por ejemplo, `make down DB=pgsql`).
:::

De forma predeterminada, `make up` inicia solo un conjunto mínimo de servicios (Zabbix server, interfaz web y base de datos).
Esto mantiene la configuración ligera y evita iniciar componentes que pueden no ser necesarios.
Para incluir componentes adicionales, puede usar los siguientes [perfiles de Compose](https://docs.docker.com/compose/how-tos/profiles/):

```bash
# Despliegue predeterminado + Zabbix agent, Java gateway, servicio web y traps SNMP:
make up COMPOSE_PROFILES=full

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

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

[comment]: # ({ec9e0e44-0b4b68c7})
### Docker (implementación manual)

Use la implementación manual cuando desee desplegar Zabbix paso a paso, ejecutar componentes individuales, integrarlos con un entorno existente o usar un runtime de contenedores alternativo como Podman.

Por ejemplo, para desplegar un proxy de Zabbix, ejecute el siguiente 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
Zabbix (7.0.0-7.0.2) no debe ejecutarse como proceso `PID1`/`init` en contenedores.
:::

Este comando:

-   Descarga la [imagen de Docker](#available-docker-images) `zabbix/zabbix-proxy-sqlite3:alpine-7.0-latest`.

-   Crea e inicia un contenedor `zabbix-proxy-sqlite3` basado en la imagen de Docker (con las opciones [`--init`](https://docs.docker.com/reference/cli/docker/container/run/#init) y [`-d`](https://docs.docker.com/reference/cli/docker/container/run/#detach)).

-   Configura el parámetro [`Server`](/manual/appendix/config/zabbix_proxy#server) del proxy de Zabbix mediante la variable de entorno `ZBX_SERVER_HOST`.
    Este parámetro especifica la dirección IP del server de Zabbix desde el cual el proxy recuperará los datos de configuración y al cual enviará los datos recopilados.
    Tenga en cuenta que las demás variables necesarias para el funcionamiento del proxy activo usan valores predeterminados y pueden omitirse.

::: noteclassic
Las variables de entorno corresponden a los parámetros de configuración de los componentes de Zabbix mediante un estilo de nomenclatura diferente (por ejemplo, `ZBX_SERVER_HOST` corresponde a [`Server`](/manual/appendix/config/zabbix_proxy#server)).
Algunas variables son específicas de Docker, y algunos parámetros de configuración no se pueden cambiar (por ejemplo, `PIDFile` y `LogType`).
Al usar variables de entorno, consulte la sección *Environment variables* en la descripción de la [imagen de Docker](#available-docker-images) de cada componente en Docker Hub.
:::

-   Conecta una ubicación de almacenamiento administrada por Docker (por ejemplo, `/var/lib/docker/volumes/zabbix-proxy-data/`) al directorio `/var/lib/zabbix` del contenedor para que los datos del proxy de Zabbix se almacenen de forma permanente, incluso si el contenedor se elimina.

::: noteclassic
Para obtener más información sobre cada volumen, consulte la sección *Allowed volumes* en la descripción de la [imagen de Docker](#available-docker-images) de cada componente en Docker Hub.
:::

Después de desplegar el contenedor del proxy de Zabbix, puede continuar con [agregar el proxy](/manual/distributed_monitoring/proxies#configuration) en su interfaz web de Zabbix y [configurar hosts](/manual/config/hosts/host#configuration) para que este proxy los supervise.

Los ejemplos siguientes cubren tres escenarios adicionales de implementación:

-   server de Zabbix (MySQL) con Java gateway
-   server de Zabbix (PostgreSQL) con trampas SNMP
-   server de Zabbix (MySQL) con Java gateway en RHEL 8–10

Para más ejemplos, consulte la descripción de la [imagen de Docker](#available-docker-images) de cada componente en Docker Hub.

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

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

Este ejemplo muestra cómo desplegar un Zabbix server con un backend MySQL, un Java gateway para [monitorización JMX](/manual/config/items/itemtypes/jmx_monitoring) y una interfaz web basada en Nginx.

1\. Cree una red Docker dedicada, de modo que todos los contenedores de los componentes de Zabbix puedan الوصول entre sí por nombre de contenedor:

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

2\. Ejecute un contenedor vacío de MySQL server (reemplace `zabbix_pwd` y `root_pwd` por contraseñas seguras, y use esos valores en los pasos siguientes):

```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\. Siga los registros de MySQL y espere hasta que MySQL esté listo para conexiones (use `Ctrl+C` para salir de los registros):

```bash
docker logs -f mysql-server

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

4\. Ejecute un contenedor de 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\. Habilite `log_bin_trust_function_creators` en el contenedor de MySQL server.
Esto relaja temporalmente las restricciones de seguridad sobre las funciones almacenadas; el ajuste se deshabilitará en pasos posteriores.
Permite que el usuario de la base de datos de Zabbix cree funciones almacenadas sin el privilegio `SUPER`, que MySQL requiere cuando [binary logging](https://dev.mysql.com/doc/refman/8.0/en/stored-programs-logging.html) está habilitado (valor predeterminado desde MySQL 8.0).
Ejecute el siguiente comando:

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

6\. Ejecute un contenedor de Zabbix server y enlácelo con los contenedores Java Gateway y MySQL server:

```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\. Siga los registros de Zabbix server y espere hasta que Zabbix server haya terminado de inicializar el esquema de la base de datos (use `Ctrl+C` para salir de los registros):

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

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

8\. Deshabilite `log_bin_trust_function_creators` en el contenedor de MySQL server.
Esto vuelve a aplicar la restricción de seguridad que impide que los usuarios que no son `SUPER` creen funciones almacenadas.
Ejecute el siguiente comando:

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

9\. Ejecute un contenedor de la interfaz web de Zabbix y enlácelo con los contenedores Zabbix server y MySQL server:

```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
```

Después de que los contenedores estén en ejecución, Zabbix server se iniciará y la interfaz web estará disponible en `http://localhost`.

::: noteclassic
Use `docker ps` para comprobar el estado de los contenedores.
Todos los contenedores deben tener el estado `Up`.
Si alguno muestra `Exited`, revise sus registros en busca de errores con `docker logs -f <container-name>`.
:::

#### Desplegar Zabbix server (PostgreSQL) con SNMP traps

Este ejemplo muestra cómo desplegar un Zabbix server con un backend PostgreSQL, [SNMP traps](/manual/config/items/itemtypes/snmptrap) y una interfaz web basada en Nginx.

1\. Cree una red Docker dedicada, de modo que todos los contenedores de los componentes de Zabbix puedan acceder entre sí por nombre de contenedor:

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

2\. Ejecute un contenedor vacío de PostgreSQL server (reemplace `zabbix_pwd` por una contraseña segura, y use ese valor en los pasos siguientes):

```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\. Ejecute un contenedor de Zabbix SNMP traps:

```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\. Ejecute un contenedor de Zabbix server y enlácelo con los contenedores PostgreSQL server y SNMP traps:

```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\. Siga los registros de Zabbix server y espere hasta que Zabbix server haya terminado de inicializar el esquema de la base de datos (use `Ctrl+C` para salir de los registros):

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

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

6\. Ejecute un contenedor de la interfaz web de Zabbix y enlácelo con los contenedores Zabbix server y PostgreSQL server:

```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
```

Después de que los contenedores estén en ejecución, Zabbix server se iniciará y la interfaz web estará disponible en `http://localhost`.

::: noteclassic
Use `docker ps` para comprobar el estado de los contenedores.
Todos los contenedores deben tener el estado `Up`.
Si alguno muestra `Exited`, revise sus registros en busca de errores con `docker logs -f <container-name>`.
:::

#### Desplegar Zabbix server (MySQL) con Java gateway en RHEL 8–10

Este ejemplo muestra cómo desplegar un Zabbix server con un backend MySQL, un Java gateway para [monitorización JMX](/manual/config/items/itemtypes/jmx_monitoring) y una interfaz web basada en Nginx, todo ello ejecutándose en Red Hat Enterprise Linux 8, 9 o 10.

En Red Hat Enterprise Linux, el entorno de ejecución de contenedores recomendado es Podman en lugar de Docker.
Podman funciona de forma similar a Docker, pero no requiere un servicio en segundo plano ejecutándose como root, lo que lo hace más adecuado para entornos Red Hat.

1\. Cree un nuevo pod con el nombre `zabbix` y puertos expuestos para la interfaz web de Zabbix y el trapper de Zabbix server:

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

2\. (Opcional) Ejecute un contenedor de Zabbix agent en la ubicación del 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\. Cree un directorio `./mysql/` en el host RHEL:

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

4\. Ejecute un contenedor vacío de MySQL server (reemplace `zabbix_pwd` y `root_pwd` por contraseñas seguras, y use esos valores en los pasos siguientes):

```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\. Siga los registros de MySQL y espere hasta que MySQL esté listo para conexiones (use `Ctrl+C` para salir de los registros):

```bash
podman logs -f mysql-server

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

6\. Ejecute un contenedor de 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\. Habilite `log_bin_trust_function_creators` en el contenedor de MySQL server.
Esto relaja temporalmente las restricciones de seguridad sobre las funciones almacenadas; el ajuste se deshabilitará en pasos posteriores.
Permite que el usuario de la base de datos de Zabbix cree funciones almacenadas sin el privilegio `SUPER`, que MySQL requiere cuando [binary logging](https://dev.mysql.com/doc/refman/8.0/en/stored-programs-logging.html) está habilitado (valor predeterminado desde MySQL 8.0).
Ejecute el siguiente comando:

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

8\. Ejecute un contenedor de Zabbix server y enlácelo con los contenedores Java Gateway y MySQL server:

```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\. Siga los registros de Zabbix server y espere hasta que Zabbix server haya terminado de inicializar el esquema de la base de datos (use `Ctrl+C` para salir de los registros):

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

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

10\. Deshabilite `log_bin_trust_function_creators` en el contenedor de MySQL server.
Esto vuelve a aplicar la restricción de seguridad que impide que los usuarios que no son `SUPER` creen funciones almacenadas.
Ejecute el siguiente comando:

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

11\. Ejecute un contenedor de la interfaz web de Zabbix y enlácelo con los contenedores Zabbix server y MySQL server:

```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
El pod `zabbix` expone el puerto `80/TCP` (HTTP) al host desde el puerto `8080/TCP` del contenedor `zabbix-web-mysql`.
:::

Después de que los contenedores estén en ejecución, Zabbix server se iniciará y la interfaz web estará disponible en `http://localhost`.

::: noteclassic
Use `docker ps` para comprobar el estado de los contenedores.
Todos los contenedores deben tener el estado `Up`.
Si alguno muestra `Exited`, revise sus registros en busca de errores con `docker logs -f <container-name>`.
:::

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