[comment]: # ({e62e1497-e62e1497})
# 5 Instal·lació des de contenidors

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

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

Aquesta pàgina descriu com implementar Zabbix utilitzant Docker o Docker Compose.

[Docker Compose](#docker-compose) és la manera més ràpida d'implementar Zabbix.
Es llegeix un arxiu de configuració i automàticament s'inicia tots els contenidors que componen una configuració completa Zabbix, en l'ordre correcte.

[Desplegament manual de Docker](#docker-manual-deployment) aconsegueix el mateix resultat desplegant cada component passa a passa.

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

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

Abans de començar, assegureu-vos que Docker (1.12.0 o posterior) sigui instal·lat al vostre sistema.
Si no ho és, seguiu la [Guia d'instal·lació Docker](https://docs.docker.com/engine/install/).
Per a la implementació de Docker Compose, Docker Compose (2.24.0 o posterior) també és necessari.

Alguns components de Zabbix requereixen que els ports específics estiguin oberts a l'equip que executa Docker (per exemple, 10051/TCP per al servidor Zabbix, 162/UDP per a trampes SNMP).
Veieu els [Requisits](/manual/instal·lació/requisits#default-port-numbers) per a una llista sencera dels ports utilitzats pels components de Zabbix.
Per al servidor i l'agent de Zabbix, el port predeterminat es pot canviar establint la variable d'entorn `ZBX_LISTENPORT` al contenidor respectiu.

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

[comment]: # ({6c7779eb-f9acea87})
### Imatges disponibles de l'acoblador

Zabbix proporciona una imatge Docker per a cada component de Zabbix, tot publicat a [Docker Hub](https://hub.docker.com/u/zabbix).
Cada imatge s'utilitza per crear un contenidor que executa aquest component.

|Component de Zabbix|Imatge de l'acoblador|
|------------ |
|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/)|
|Interfície web (Apache + MySQL)|[zabbix/zabbix-web-apache-mysql](https://hub.docker.com/r/zabbix/zabbix-web-apache-mysql/)|
|Interfície web (Apache + PostgreSQL)|[zabbix/zabbix-web-apache-pgsql](https://hub.docker.com/r/zabbix/zabbix-web-apache-pgsql/)|
|Interfície web (Nginx + MySQL)|[zabbix/zabbix-web-ningx-mysql](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql/)|
|Interfície 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/)|
|Servei web|[zabbix/zabbix-web-service](https://hub.docker.com/r/zabbix/zabbix-web-service)|
|SNMP trampes|[zabbix/zabbix-snmptraps](https://hub.docker.com/r/zabbix/zabbix-snmptraps/)|

::: noteclassic
Per utilitzar [SNMP traps](/manual/config/itemtypes/snmptrap), el contenidor de trampes SNMP ha de compartir un volum amb el servidor Zabbix o el contenidor proxy (veieu [com utilitzar aquesta imatge](https://hub.docker.com/r/zabbix/zabbix-snmptraps#how-to-use-this-image) a Docker Hub.
::

Totes les imatges de components de Zabbix a Docker Hub es basen en les darreres versions principals dels [sistemes operatius compatibles](#image-tags).
Aquestes imatges es reconstrueixen automàticament quan s'actualitzen les imatges del sistema operatiu subjacent.

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

[comment]: # ({a7a01d95-e498c2aa})
#### Etiquetes d'imatges

Cada imatge admet etiquetes per seleccionar el sistema operatiu base i la versió de Zabbix:

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

Valors `<os>` admesos:

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

Valors `<version>` admesos:

- `latest' - Darrera versió estable de Zabbix a Alpine Linux
- `<os>-latest` - Darrera versió estable de Zabbix en el sistema operatiu seleccionat
- `<os>-trunk` - Darrer desenvolupament (per nit) construir sobre el sistema operatiu seleccionat
- `<os>-X.X-latest` - Darrera versió menor de Zabbix d'una versió principal específica de Zabbix en el sistema operatiu seleccionat
- `<os>-X.X. *` - Versió menor específica de Zabbix en el sistema operatiu seleccionat

Exemples:

```bash
# Darrer proxy estable de Zabbix (SQLite3) a Linux Alpine:
docker pull zabbix/zabbix-proxy-sqlite3:latest

# Darrer proxy estable de Zabbix (SQLite3) a Ubuntu:
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-latest

# Darrer desenvolupament (nocturn) fet sobre el servidor Zabbix (MySQL) a Ubuntu:
docker pull zabbix/zabbix-server-mysql:ubuntu-trunk

# Darrera versió menor de la 7.0 del servidor Zabbix (MySQL) a Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-7.0-latest

# Versió 7.0.1 del servidor Zabbix (MySQL) a Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-7.0.1
```

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

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

Docker Compose és la manera més ràpida de desplegar Zabbix.
Llegeix un fitxer de configuració (composeu un fitxer) i gestiona tota la configuració: estireu les imatges de Docker, creeu una xarxa interna entre contenidors, configureu l'emmagatzematge, inicialitzeu la base de dades i inicieu-ho tot en l'ordre correcte.

El repositori [oficial Zabbix Dockerfiles](https://github.com/zabbix/zabbix-docker) proporciona fitxers Docker Compose preparats per utilitzar i un sistema de configuració basat en `.env` que suporta diferents sistemes operatius, backends de bases de dades i configuració de components de Zabbix.

1\. Cloneu el repositori, navegueu-hi i canvieu a la versió 7.0:

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

2\. (Opcional) Personalitzar el desplegament amb [variables de medi ambient](#environment-variables).
Aquesta passa es pot saltar per a una configuració per defecte.

3\. Desplegar la configuració per defecte: servidor Zabbix, interfície web (executant a Nginx) i un backend de base de dades (MySQL o PostgreSQL), cadascun executant-se en el seu propi contenidor a Alpine Linux.

```bash
# Amb MySQL com a base de dades:
docker compose -f ./compose.yaml up -d

# Amb PostgreSQL com a base de dades:
docker compose -f ./compose_pgsql.yaml up -d
```

Després que els contenidors siguin engegats, (normalment en 1-3 minuts), s'engega el servidor Zabbix i la interfície web és disponible a `http://localhost`.

::: noteclassic
Utilitzeu `docker compose ps` per comprovar l'estat del contenidor.
Tots els contenidors (excepte el contenidor `zabbix-docker-server-db-init-1`) haurien de tenir l'estat `Up`.
Si cap mostra `Exit`, comproveu els seus registres amb `docker logs <container-name>`.
:::

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

[comment]: # ({c9a11d44-0be3c140})
#### Variables d'entorn

El comportament de Docker Compose i la configuració del component Zabbix es poden personalitzar mitjançant variables d'entorn.

**Variables a nivell de composició** (definits en el fitxer [`.env`](https://github.com/zabbix/zabbix-docker/blob/7.0/.env)) controlen quins rangs d'imatges, ports i IP de xarxa d'acoblador s'utilitzen.
Podeu utilitzar aquestes variables en línia abans de l'ordre `docker compose`, o editar el fitxer `.env`.

Per exemple, l'ordre següent desplega una configuració completa de Zabbix multi-contenidor utilitzant una imatge basada en Ubuntu (en lloc de la Linux Alpine per defecte) i exposant la interfície web a través de Nginx en ports HTTP (8282) i HTTPS (8443):

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

**Variables a nivell de component** (definits en els fitxers [`env_vars/.env_<component>`](https://github.com/zabbix/zabbix-docker/blob/7.0/env_vars/)) controlen la configuració del component Zabbix.
Editeu el fitxer respectiu `.env_<component>` abans d'executar l'ordre `docker compose`.

Per exemple, podeu ajustar el recompte de sondejos passius del servidor Zabbix i la configuració de la memòria cau, així com configurar la zona horària de la interfície web editant les variables següents:

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

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

::: noteclassic
Les variables d'entorn de nivell de component corresponen a paràmetres de configuració de components de Zabbix utilitzant un estil de denominació diferent (per exemple, `ZBX_STARTPOLLERS` correspon a [`StartPollers`](/manual/appendix/config/zabbix_server#startpollers).
Algunes variables són específiques de Docker, i alguns paràmetres de configuració no es poden canviar (per exemple, 'PIDFile` i `LogType`).
Quan utilitzeu variables d'entorn, consulteu la secció *Variables d'entorn* a la descripció de cada component [Imatge de Docker](#available-docker-images) a Docker Hub.
:::

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

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

Docker Compose emmagatzema dades persistents en el directori `zbx_env/` creat juntament amb el fitxer Compose.
Aquest directori conserva les dades dels components a través de reinicis i actualitzacions de contenidors.

El contingut de `zbx_env/` està predefinit per a la imatge de cada component. Per exemple:

- `zbx_env/etc/` - utilitzat pel [Contenidor d'interfície web de Zabbix](https://hub.docker.com/r/zabbix/zabbix-web-ningx-mysql#allowed-volumes-for-the-zabbix-web-interface-container)
- `zbx_env/usr/` i `zbx_env/var/` - utilitzat pel [Contenidor del servidor Zabbix](https://hub.docker.com/r/zabbix/zabbix-server-mysql#allowed-volumes-for-the-zabbix-server-container)

Per obtenir més informació sobre cada volum, vegeu la secció *Permès volums* a la descripció de cada component [Imatge de Docker](#available-docker-images) a Docker Hub.

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

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

El repositori Zabbix Dockerfiles també proporciona un [Makefile](https://github.com/zabbix/zabbix-docker/blob/7.0/Makefile) com a drecera per a tasques comunes de Docker Compose.
En lloc d'utilitzar l'ordre completa 'docker compose', podeu utilitzar ordres `make` més curtes (executa `make help` per veure les opcions disponibles):

```bash
# Desplegament per defecte (Zabbix server, web interface, MySQL, tot a Alpine Linux)
make up

# Desplegament a mida (Zabbix server, web interface amb ports Nginx personalitzats, PostgreSQL, tot a Ubuntu)
make up \
  OS=ubuntu \
  DB=pgsql \
  ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
  ZABBIX_WEB_NGINX_HTTPS_PORT=8443
```

::: noteimportant
Quan s'aturen o s'eliminen els contenidors, especifiqueu sempre el mateix tipus de base de dades que s'ha desplegat (exemple: `make down DB=pgsql`).
:::

Per defecte, `make up` comença només un conjunt mínim de serveis (servidor Zabbix, interfície web, i la base de dades).
Això manté la configuració lleugera i evita els components d'inici que poden no caldre.
Per incloure components addicionals, podeu utilitzar el següent [perfil de Compose](https://docs.docker.com/compose/how-tos/profiles/):

```bash
# Desplegament per defecte + Zabbix agent, Java gateway, web service, i trampes SNMP:
make up COMPOSE_PROFILES=full

# COMPOSE_PROFILES=tots + Zabbix proxy (MySQL i SQLite3):
make up COMPOSE_PROFILES=all
```

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

[comment]: # ({ec9e0e44-0b4b68c7})
### Docker (desplegament manual)

Utilitzeu la implementació manual quan vulgueu implementar Zabbix passa a passa, executar components individuals, integrar-los amb un entorn existent o utilitzar un temps d'execució de contenidors alternatiu com Podman.

Per exemple, per desplegar un proxy Zabbix, executeu l'ordre següent:

```bash
docker run --name zabbix-proxy-sqlite3 \
  -e ZBX_SERVER_HOST=192.0.2.0 \
  -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
```

::: Nota important
Zabbix (7.0.0-7.0.2) no s'ha d'executar com a procés `PID1`/`init` als contenidors.
::

Aquesta comanda:

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

- Crea i inicia un contenidor `zabbix-proxy-sqlite3` basat en la imatge de Docker (amb [`--init`](https://docs.docker.com/reference/cli/docker/container/run/#init) i [`-d`](https://docs.docker.com/reference/cli/docker/container/run/#detach).

- Configura el paràmetre Zabbix proxy [`Server`](/manual/appendix/config/zabbix_proxy#server) mitjançant la variable d'entorn `ZBX_SERVER_HOST`.
    Aquest paràmetre especifica l'adreça IP del servidor Zabbix des del qual el proxy recuperarà les dades de configuració i a la qual enviarà dades recollides.
    Tingueu en compte que altres variables necessàries per a l'operació de proxy actiu utilitzen valors per defecte i es poden ometre.

::: noteclassic
Les variables d'entorn corresponen a paràmetres de configuració de components de Zabbix utilitzant un estil de denominació diferent (per exemple, `ZBX_SERVER_HOST` correspon a [`Server`](/manual/appendix/config/zabbix_proxy#server)).
Algunes variables són específiques de Docker, i alguns paràmetres de configuració no es poden canviar (per exemple, 'PIDFile` i `LogType`).
Quan utilitzeu variables d'entorn, consulteu la secció *Variables de medi ambient* a la descripció de cada component [Imatge de Docker](#available-docker-images) a Docker Hub.
::

- Connecta una ubicació d'emmagatzematge gestionada per Docker (per exemple, `/var/lib/docker/volumes/zabbix-proxy-data/`) al directori `/var/lib/zabbix` del contenidor de manera que les dades del proxy Zabbix s'emmagatzemen permanentment, fins i tot si el contenidor s'esborra.

::: noteclassic
Per obtindre més informació sobre cada volum, vegeu la secció *Volums permesos* a la descripció de cada component [Imatge de l'acoblador](#available-docker-images) a Docker Hub.
::

Després de desplegar el contenidor de proxy de Zabbix, podeu procedir a [afegir el proxy](/manual/distributed_monitoring/proxies#configuration) a la vostra interfície de Zabbix i [configurar equips](/manual/config/hosts/host#configuration) per ser monitorats per aquest proxy.

Els exemples següents cobreixen tres escenaris de desplegament addicionals:

- Servidor Zabbix (MySQL) amb passarel·la Java
- Servidor Zabbix (PostgreSQL) amb trampes SNMP
- Servidor Zabbix (MySQL) amb passarel·la Java a RHEL 8-10

Per a més exemples, consulteu la descripció de cada component [Docker image](#available-docker-images) a Docker Hub.

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

[comment]: # ({a807fe94-492bd3ba})
##### Implementar el servidor Zabbix (MySQL) amb la passarel·la Java

Aquest exemple mostra com implementar un servidor Zabbix amb un backend MySQL, una passarel·la Java per a [JMX monitoring](/manual/config/itemtypes/jmx_monitoring) i una interfície web basada en Nginx.

1\. Creeu una xarxa dedicada als contenidors de components Zabbix, de manera que tots els contenidors de components de Zabbix puguin arribar entre si pel nom del contenidor:

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

2\. Inicieu la instància del servidor MySQL buida (canvieu `zabbix_pwd` i `root_pwd` amb paraules de pas segures):

```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\. Seguiu els registres de MySQL i espereu fins que aquest sigui disponible per a connexions (empreu `Ctrl+C` per sortir del registre):

```bash
docker logs -f mysql-server

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

4\. Engegueu el contenidor del gateway Java de Zabbix:

```bash
    docker run --name zabbix-java-gateway -t \
          --network=zabbix-net \
          --restart unless-stopped \
          -d zabbix/zabbix-java-gateway:alpine-7.0-latest
```
5\. Engegueu la instància del servidor Zabbix i enllaceu la instància amb la instància del servidor MySQL creada (canvieu `zabbix_pwd` i `root_pwd` amb les mateixes paraules de pas de la passa 2):









6\. Executeu el contenidor del servidor de Zabbix i enllaceu-lo als contenidors del Java Gateway i del servidor de 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 MYSQL_ROOT_PASSWORD="root_pwd" \
          -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
          --network=zabbix-net \
          -p 10051:10051 \
          --restart unless-stopped \
          -d zabbix/zabbix-server-mysql:alpine-7.0-latest
```

7\. Seguiu els registres del servidor Zabbix i espereu fins que el servidor Zabbix hagi acabat d'inicialitzar l'esquema de la base de dades (utilitzeu `Ctrl+C` per sortir del registre):

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

# ... [info]: ** Creant l'esquema 'zabbix' a MySQL
# ... [info]: ** Esquema de base de dades creat correctament!
```

8\. Desactiveu `log_bin_trust_function_creators` al contenidor del servidor MySQL.
Això reforça la restricció de seguretat que impedeix que els usuaris que no són SUPER creïn funcions emmagatzemades.
Executeu l'ordre següent:

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

9\. Executeu un contenidor d'interfície web Zabbix i enllaceu-lo al servidor Zabbix i als contenidors del 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
```

Després que els contenidors estiguin en funcionament, s'inicia el servidor Zabbix i la interfície web està disponible a `http://localhost`.

::: noteclassic
Utilitzeu `docker ps` per comprovar l'estat del contenidor.
Tots els contenidors han de tenir l'estat `Up`.
Si algun mostra `Exited`, comproveu els seus registres per detectar errors amb `docker logs -f <nom-del-contenidor>`.
:::

#### Desplegament del servidor Zabbix (PostgreSQL) amb trampes SNMP

L'exemple ensenya com executar el servidor Zabbix amb suport de bases de dades PostgreSQL, la interfície web Zabbix basada en el servidor web Nginx i la funció de [trampa SNMP](/manual/config/items/itemtypes/snmptrap).

1\. Creeu una xarxa dedicada als contenidors de components Zabbix, de manera que els contenidors dels components de Zabbix puguin arribar per nom als altres contenidors:

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

2\. Engegueu la instància del servidor PostgreSQL buida (canvieu `zabbix_pwd` per un mot de pas segur, i empreu aquest valor a les següents passes):

```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\. Engegueu la instància Zabbix snmptraps:

```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\. Executeu un contenidor de servidor Zabbix i enllaceu-lo al servidor PostgreSQL i als contenidors de trampes 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\. Seguiu els registres del servidor Zabbix i espereu fins que el servidor Zabbix hagi acabat d'inicialitzar l'esquema de la base de dades (feu servir `Ctrl+C` per sortir del registre):

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

# ... [info]: ** Creant l'esquema 'zabbix' a PostgreSQL
# ... [info]: ** Esquema de la base de dades creat correctament!
```

6\. Engegueu el contenidor de la interfície web de Zabbix i enllaceu-ho als contenidors del servidor de Zabbix i del 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 MYSQL_ROOT_PASSWORD="root_pwd" \
          --network=zabbix-net \
			   
          -p 80:8080 \
									   
          --restart unless-stopped \
          -d zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest
```

Després que els contenidors siguin engegats, s'engega el servidor Zabbix i la interfície web és disponible a `http://localhost`.

::: noteclassic
Utilitzeu `docker ps` per comprovar l'estat del contenidor.
Tots els contenidors han de tenir l'estat `Up`.
Si algun mostra `Exited`, comproveu els seus registres per detectar errors amb `docker logs -f <nom-del-contenidor>`.
:::

#### Implementar el servidor Zabbix (MySQL) amb la passarel·la Java a RHEL 8-10

Aquest exemple ensenya com implementar un servidor Zabbix amb un dorsal MySQL, una passarel·la Java per a [monitoratge JMX](/manual/config/itemtypes/jmx_monitoring), i una interfície web basada en Nginx, tot executant-se en Red Hat Enterprise Linux 8, 9, o 10.

A Red Hat Enterprise Linux, el temps d'execució del contenidor recomanat és Podman en lloc de Docker.
Podman funciona de manera similar a Docker, però no requereix un servei de fons que s'executi com a root, cosa que ho fa més adaptable per als entorns de Red Hat.

1\. Creeu un pod nou amb el nom `zabbix` i els ports exposats (interfície web, trapper del servidor Zabbix):

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

2\. (opcional) Inicieu el contenidor de l'agent Zabbix a la ubicació 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\. Creeu el directori `./mysql/` a l'equip RHEL:

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

4\. Executeu un contenidor de servidor MySQL buit (substituïu `zabbix_pwd` i `root_pwd` per mots de pas segurs, empreant aquest valors a les passes següents):

```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\. Seguiu els registres de MySQL i espereu fins que MySQL sigui a punt per a connexions (feu servir `Ctrl+C` per sortir del registre):

```bash
podman logs -f mysql-server

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

6\. Engegueu el contenidor 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\. Activeu `log_bin_trust_function_creators` al contenidor del servidor MySQL.
Això relaxa temporalment les restriccions de seguretat de les funcions emmagatzemades; la configuració es desactivarà en passos posteriors.
Permet a l'usuari de la base de dades Zabbix crear funcions emmagatzemades sense el privilegi `SUPER`, que MySQL requereix quan el [registre binari](https://dev.mysql.com/doc/refman/8.0/en/stored-programs-logging.html) és habilitat (per defecte des de MySQL 8.0).
Executeu l'ordre següent:

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

8\. Engegueu el contenidor del servidor de Zabbix i enllaceu-lo als contenidors de Java Gateway i 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\. Seguiu els registres del servidor Zabbix i espereu fins que el servidor Zabbix hagi acabat d'inicialitzar l'esquema de la base de dades (utilitzeu `Ctrl+C` per sortir dels registres):

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

# ... [info]: ** Creant l'esquema 'zabbix' a MySQL
# ... [info]: ** Esquema de base de dades creat correctament!
```

10\. Desactiveu `log_bin_trust_function_creators` al contenidor del servidor MySQL.
Això reforça la restricció de seguretat que impedeix que els no-superusuaris creïn funcions emmagatzemades.
Executeu l'ordre següent:

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

11\. Executeu un contenidor d'interfície web Zabbix i enllaceu-lo als contenidors del servidor Zabbix i del 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="Europa/Riga" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-web-mysql-70
```

::: noteclassic
El pod `zabbix` exposa el port `80/TCP` (HTTP) a la màquina amfitriona des de `8080/TCP` del contenidor `zabbix-web-mysql`.
:::

Després que els contenidors estiguin en funcionament, s'inicia el servidor Zabbix i la interfície web està disponible a `http://localhost`.

::: noteclassic
Utilitzeu `docker ps` per comprovar l'estat del contenidor.
Tots els contenidors han de tenir l'estat `Up`.
Si algun mostra `Exited`, comproveu els seus registres per detectar errors amb `docker logs -f <nom-del-contenidor>`.
:::

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