[comment]: # ({e62e1497-e62e1497})
# 5 Installation aus Containern

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

[comment]: # ({52adc319-a3ac452e})
### Übersicht

Diese Seite beschreibt, wie Zabbix mit Docker oder Docker Compose bereitgestellt wird.

[Docker Compose](#docker-compose) ist der schnellste Weg, Zabbix bereitzustellen.
Es liest eine Konfigurationsdatei und startet automatisch alle Container, aus denen eine vollständige Zabbix-Installation besteht, in der richtigen Reihenfolge.

[Docker (manuelle Bereitstellung)](#docker-manual-deployment) erreicht dasselbe Ergebnis, indem jede Komponente Schritt für Schritt bereitgestellt wird.

::: noteimportant
Seit Zabbix 6.0 müssen deterministische Auslöser während der Installation erstellt werden.
Wenn das binäre Logging für MySQL/MariaDB aktiviert ist, sind dafür Superuser-Rechte oder das Setzen des Variablen-/Konfigurationsparameters `log_bin_trust_function_creators = 1` erforderlich.
Anweisungen zum Setzen der Variable finden Sie unter [Datenbank-Erstellungsskripte](/manual/appendix/install/db_scripts#mysqlmariadb).
<br><br>
Beachten Sie, dass die Variable bei Ausführung über eine Konsole nur vorübergehend gesetzt wird und beim Neustart von Docker wieder entfernt wird.
In diesem Fall lassen Sie Ihren SQL-Dienst weiterlaufen und stoppen Sie nur den Dienst `zabbix-server`, indem Sie `docker compose down zabbix-server` ausführen und anschließend `docker compose up -d zabbix-server`.
<br><br>
Alternativ können Sie diese Variable in der Konfigurationsdatei setzen.
:::

[comment]: # ({/52adc319-a3ac452e})

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

Bevor Sie beginnen, stellen Sie sicher, dass Docker (1.12.0 oder höher) auf Ihrem System installiert ist.
Falls nicht, folgen Sie der [Docker-Installationsanleitung](https://docs.docker.com/engine/install/).
Für die Bereitstellung mit Docker Compose ist außerdem Docker Compose (2.24.0 oder höher) erforderlich.

Einige Zabbix-Komponenten erfordern, dass bestimmte Ports auf dem Host, auf dem Docker ausgeführt wird, geöffnet sind (z. B. 10051/TCP für den Zabbix-Server, 162/UDP für SNMP-Traps).
Eine vollständige Liste der von Zabbix-Komponenten verwendeten Ports finden Sie unter [Anforderungen](/manual/installation/requirements#default-port-numbers).
Für Zabbix-Server und Agent kann der Standardport durch Festlegen der Umgebungsvariable `ZBX_LISTENPORT` im jeweiligen Container geändert werden.

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

[comment]: # ({6c7779eb-f9acea87})
### Verfügbare Docker-Images

Zabbix stellt für jede Zabbix-Komponente ein Docker-Image bereit, die alle auf [Docker Hub](https://hub.docker.com/u/zabbix) veröffentlicht sind.
Jedes Image wird verwendet, um einen Container zu erstellen, der diese Komponente ausführt.

|Zabbix-Komponente|Docker-Image|
|--|--------|
|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/)|
|Web-Frontend (Apache + MySQL)|[zabbix/zabbix-web-apache-mysql](https://hub.docker.com/r/zabbix/zabbix-web-apache-mysql/)|
|Web-Frontend (Apache + PostgreSQL)|[zabbix/zabbix-web-apache-pgsql](https://hub.docker.com/r/zabbix/zabbix-web-apache-pgsql/)|
|Web-Frontend (Nginx + MySQL)|[zabbix/zabbix-web-nginx-mysql](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql/)|
|Web-Frontend (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/)|
|Web service|[zabbix/zabbix-web-service](https://hub.docker.com/r/zabbix/zabbix-web-service)|
|SNMP traps|[zabbix/zabbix-snmptraps](https://hub.docker.com/r/zabbix/zabbix-snmptraps/)|

::: noteclassic
Um [SNMP traps](/manual/config/items/itemtypes/snmptrap) zu verwenden, muss der SNMP-traps-Container ein Volume mit dem Zabbix-Server- oder Proxy-Container gemeinsam nutzen (siehe [how to use this image](https://hub.docker.com/r/zabbix/zabbix-snmptraps#how-to-use-this-image) auf Docker Hub und das [Beispiel](#deploy-zabbix-server-postgresql-with-snmp-traps) unten).
:::

Alle Zabbix-Komponenten-Images auf Docker Hub basieren auf den neuesten Hauptversionen der [unterstützten Betriebssysteme](#image-tags).
Diese Images werden automatisch neu erstellt, wenn die zugrunde liegenden OS-Images aktualisiert werden.

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

[comment]: # ({c6474561-e498c2aa})
#### Image-Tags

Jedes Image unterstützt Tags zur Auswahl des Basisbetriebssystems und der Zabbix-Version:

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

Unterstützte `<os>`-Werte:

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

Unterstützte `<version>`-Werte:

-   `latest` - Neueste stabile Zabbix-Version auf Alpine Linux
-   `<os>-latest` - Neueste stabile Zabbix-Version auf dem ausgewählten Betriebssystem
-   `<os>-trunk` - Neuester Entwicklungs- (Nightly-) Build auf dem ausgewählten Betriebssystem
-   `<os>-X.X-latest` - Neueste Zabbix-Nebenversion einer bestimmten Zabbix-Hauptversion auf dem ausgewählten Betriebssystem
-   `<os>-X.X.*` - Bestimmte Zabbix-Nebenversion auf dem ausgewählten Betriebssystem

Beispiele:

```bash
# Neuester stabiler Zabbix Proxy (SQLite3) auf Alpine Linux:
docker pull zabbix/zabbix-proxy-sqlite3:latest

# Neuester stabiler Zabbix Proxy (SQLite3) auf Ubuntu:
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-latest

# Neuester Entwicklungs- (Nightly-) Build von Zabbix Server (MySQL) auf Ubuntu:
docker pull zabbix/zabbix-server-mysql:ubuntu-trunk

# Neueste 7.4-Nebenversion von Zabbix Server (MySQL) auf Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-7.4-latest

# Version 7.4.1 von Zabbix Server (MySQL) auf Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-7.4.1
```

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

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

Docker Compose ist der schnellste Weg, Zabbix bereitzustellen.
Es liest eine Konfigurationsdatei (Compose-Datei) und übernimmt die gesamte Einrichtung - das Herunterladen von Docker-Images, das Erstellen eines internen Netzwerks zwischen Containern, das Einrichten des Speichers, das Initialisieren der Datenbank und das Starten aller Komponenten in der richtigen Reihenfolge.

Das Repository [offizielle Zabbix Dockerfiles](https://github.com/zabbix/zabbix-docker) stellt sofort nutzbare Docker-Compose-Dateien und ein auf `.env` basierendes Konfigurationssystem bereit, das verschiedene Betriebssysteme, Datenbank-Backends und die Konfiguration von Zabbix-Komponenten unterstützt.

1\. Klonen Sie das Repository, wechseln Sie in das Verzeichnis und schalten Sie auf Version 7.4 um:

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

2\. (Optional) Passen Sie die Bereitstellung mit [Umgebungsvariablen](#environment-variables) an.
Dieser Schritt kann bei einer Standardinstallation übersprungen werden.

3\. Stellen Sie die Standardinstallation bereit - Zabbix Server, Weboberfläche (auf Nginx) und ein Datenbank-Backend (MySQL oder PostgreSQL), jeweils in einem eigenen Container unter Alpine Linux.

```bash
# Mit MySQL als Datenbank:
docker compose -f ./compose.yaml up -d

# Mit PostgreSQL als Datenbank:
docker compose -f ./compose_pgsql.yaml up -d
```

Nachdem die Container gestartet und betriebsbereit sind (in der Regel innerhalb von 1-3 Minuten), wird der Zabbix Server gestartet und die Weboberfläche ist unter `http://localhost` verfügbar.

::: noteclassic
Verwenden Sie `docker compose ps`, um den Status der Container zu prüfen.
Alle Container (außer dem Container `zabbix-docker-server-db-init-1`) sollten den Status `Up` haben.
Wenn bei einem Container `Exited` angezeigt wird, prüfen Sie die Protokolle mit `docker logs <container-name>`.
:::

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

[comment]: # ({8b4e2b4d-de9f41d4})
#### Umgebungsvariablen

Das Verhalten von Docker Compose und die Konfiguration von Zabbix-Komponenten können beide über Umgebungsvariablen angepasst werden.

**Variablen auf Compose-Ebene** (definiert in der [`.env`-Datei](https://github.com/zabbix/zabbix-docker/blob/7.4/.env)) steuern, welche Docker-Images, Ports und Netzwerk-IP-Bereiche verwendet werden.
Sie können diese Variablen inline vor dem `docker compose`-Befehl verwenden oder die `.env`-Datei bearbeiten.

Zum Beispiel stellt der folgende Befehl ein vollständiges Zabbix-Setup mit mehreren Containern bereit, das ein auf Ubuntu basierendes Image verwendet (anstelle des standardmäßigen Alpine Linux) und die Weboberfläche über Nginx auf benutzerdefinierten HTTP- (8282) und HTTPS- (8443) Ports bereitstellt:

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

**Variablen auf Komponentenebene** (definiert in den Dateien [`env_vars/.env_<component>`](https://github.com/zabbix/zabbix-docker/blob/7.4/env_vars/)) steuern die Konfiguration der Zabbix-Komponenten.
Bearbeiten Sie die jeweilige `.env_<component>`-Datei, bevor Sie den `docker compose`-Befehl ausführen.

Zum Beispiel können Sie die Anzahl der passiven Poller des Zabbix-Servers und die Cache-Einstellungen anpassen sowie die Zeitzone der Weboberfläche konfigurieren, indem Sie die folgenden Variablen bearbeiten:

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

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

::: noteclassic
Umgebungsvariablen auf Komponentenebene entsprechen Konfigurationsparametern der Zabbix-Komponenten, verwenden jedoch eine andere Namenskonvention (z. B. entspricht `ZBX_STARTPOLLERS` [`StartPollers`](/manual/appendix/config/zabbix_server#startpollers)).
Einige Variablen sind Docker-spezifisch, und einige Konfigurationsparameter können nicht geändert werden (z. B. `PIDFile` und `LogType`).
Wenn Sie Umgebungsvariablen verwenden, lesen Sie bitte den Abschnitt *Environment variables* in der Beschreibung des jeweiligen [Docker-Images](#available-docker-images) auf Docker Hub.
:::

[comment]: # ({/8b4e2b4d-de9f41d4})

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

Docker Compose speichert persistente Daten im Verzeichnis `zbx_env/`, das zusammen mit der Compose-Datei erstellt wird.
Dieses Verzeichnis bewahrt die Daten der Komponenten über Container-Neustarts und Updates hinweg.

Der Inhalt von `zbx_env/` ist für das Image jeder Komponente vordefiniert. Zum Beispiel:

-   `zbx_env/etc/` - wird vom [Zabbix web frontend container](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql#allowed-volumes-for-the-zabbix-web-interface-container) verwendet
-   `zbx_env/usr/` und `zbx_env/var/` - werden vom [Zabbix Server-Container](https://hub.docker.com/r/zabbix/zabbix-server-mysql#allowed-volumes-for-the-zabbix-server-container) verwendet

Weitere Informationen zu den einzelnen Volumes finden Sie im Abschnitt *Allowed volumes* in der Beschreibung des [Docker-Images](#available-docker-images) jeder Komponente auf Docker Hub.

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

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

Das Zabbix-Dockerfiles-Repository stellt außerdem eine [Makefile](https://github.com/zabbix/zabbix-docker/blob/7.4/Makefile) als Abkürzung für gängige Docker-Compose-Aufgaben bereit.
Anstelle des vollständigen Befehls `docker compose` können Sie kürzere `make`-Befehle verwenden (führen Sie `make help` aus, um die verfügbaren Optionen anzuzeigen):

```bash
# Standardbereitstellung (Zabbix Server, Weboberfläche, MySQL, alles auf Alpine Linux)
make up

# Benutzerdefinierte Bereitstellung (Zabbix Server, Weboberfläche mit benutzerdefinierten Nginx-Ports, PostgreSQL, alles auf Ubuntu)
make up \
  OS=ubuntu \
  DB=pgsql \
  ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
  ZABBIX_WEB_NGINX_HTTPS_PORT=8443
```

::: noteimportant
Beim Stoppen oder Entfernen von Containern geben Sie immer denselben Datenbanktyp an, der bereitgestellt wurde (z. B. `make down DB=pgsql`).
:::

Standardmäßig startet `make up` nur einen minimalen Satz von Diensten (Zabbix Server, Weboberfläche und Datenbank).
Dadurch bleibt die Einrichtung schlank und es werden keine Komponenten gestartet, die möglicherweise nicht benötigt werden.
Um zusätzliche Komponenten einzubeziehen, können Sie die folgenden [Compose-Profile](https://docs.docker.com/compose/how-tos/profiles/) verwenden:

```bash
# Standardbereitstellung + Zabbix Agent, Java gateway, Webdienst und SNMP-Traps:
make up COMPOSE_PROFILES=full

# COMPOSE_PROFILES=full + Zabbix Proxy (MySQL und SQLite3):
make up COMPOSE_PROFILES=all
```

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

[comment]: # ({1c8231dd-0b4b68c7})
### Docker (manuelle Bereitstellung)

Verwenden Sie die manuelle Bereitstellung, wenn Sie Zabbix Schritt für Schritt bereitstellen, einzelne Komponenten ausführen, sie in eine vorhandene Umgebung integrieren oder eine alternative Container-Laufzeitumgebung wie Podman verwenden möchten.

Um beispielsweise einen Zabbix Proxy bereitzustellen, führen Sie den folgenden Befehl aus:

```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.4-latest
```

Dieser Befehl:

-   Lädt das `zabbix/zabbix-proxy-sqlite3:alpine-7.4-latest` [Docker-Image](#available-docker-images) herunter.

-   Erstellt und startet einen `zabbix-proxy-sqlite3`-Container auf Basis des Docker-Images (mit den Flags [`--init`](https://docs.docker.com/reference/cli/docker/container/run/#init) und [`-d`](https://docs.docker.com/reference/cli/docker/container/run/#detach)).

-   Konfiguriert den Zabbix Proxy-Parameter [`Server`](/manual/appendix/config/zabbix_proxy#server) über die Umgebungsvariable `ZBX_SERVER_HOST`.
    Dieser Parameter gibt die IP-Adresse des Zabbix Servers an, von dem der Proxy Konfigurationsdaten abruft und an den er die gesammelten Daten sendet.
    Beachten Sie, dass andere für den aktiven Proxy-Betrieb erforderliche Variablen Standardwerte verwenden und weggelassen werden können.

::: noteclassic
Umgebungsvariablen entsprechen Zabbix-Komponenten-Konfigurationsparametern mit einer anderen Namenskonvention (z. B. entspricht `ZBX_SERVER_HOST` [`Server`](/manual/appendix/config/zabbix_proxy#server)).
Einige Variablen sind Docker-spezifisch, und einige Konfigurationsparameter können nicht geändert werden (z. B. `PIDFile` und `LogType`).
Wenn Sie Umgebungsvariablen verwenden, lesen Sie bitte den Abschnitt *Environment variables* in der Beschreibung des jeweiligen [Docker-Images](#available-docker-images) auf Docker Hub.
:::

-   Verbindet einen von Docker verwalteten Speicherort (z. B. `/var/lib/docker/volumes/zabbix-proxy-data/`) mit dem Verzeichnis `/var/lib/zabbix` des Containers, damit die Daten des Zabbix Proxy dauerhaft gespeichert werden, auch wenn der Container entfernt wird.

::: noteclassic
Weitere Informationen zu den einzelnen Volumes finden Sie im Abschnitt *Allowed volumes* in der Beschreibung des jeweiligen [Docker-Images](#available-docker-images) auf Docker Hub.
:::

Nachdem Sie den Zabbix-Proxy-Container bereitgestellt haben, können Sie fortfahren, den [Proxy hinzuzufügen](/manual/distributed_monitoring/proxies#configuration) in Ihrem Zabbix Frontend und [Hosts zu konfigurieren](/manual/config/hosts/host#configuration), die von diesem Proxy überwacht werden sollen.

Die folgenden Beispiele decken drei zusätzliche Bereitstellungsszenarien ab:

-   Zabbix Server (MySQL) mit Java gateway
-   Zabbix Server (PostgreSQL) mit SNMP-Traps
-   Zabbix Server (MySQL) mit Java gateway auf RHEL 8

Weitere Beispiele finden Sie in der Beschreibung des jeweiligen [Docker-Images](#available-docker-images) auf Docker Hub.

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

[comment]: # ({fecc21f2-492bd3ba})
#### Zabbix Server (MySQL) mit Java gateway bereitstellen

Dieses Beispiel zeigt, wie ein Zabbix Server mit einem MySQL-Backend, einem Java gateway für [JMX-Überwachung](/manual/config/items/itemtypes/jmx_monitoring) und einer webbasierten Oberfläche auf Nginx-Basis bereitgestellt wird.

1\. Erstellen Sie ein dediziertes Docker-Netzwerk, damit alle Container der Zabbix-Komponenten sich über ihren Containernamen gegenseitig erreichen können:

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

2\. Starten Sie einen leeren MySQL-Server-Container (ersetzen Sie `zabbix_pwd` und `root_pwd` durch starke Passwörter):

```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 \
  --default-authentication-plugin=mysql_native_password
```

::: noteimportant
Wenn Sie ein Docker-Image für MySQL 8.4 oder neuer verwenden, ersetzen Sie `--default-authentication-plugin=mysql_native_password` durch `--authentication-policy=caching_sha2_password`.
<br><br>
MySQL muss vollständig initialisiert sein, bevor Sie in Schritt 4 den Zabbix Server-Container starten, andernfalls wird das Zabbix-Schema möglicherweise nicht korrekt geladen.
Um zu bestätigen, dass MySQL bereit ist, führen Sie `docker logs mysql-server` aus und fahren Sie erst fort, wenn `/usr/sbin/mysqld: ready for connections` angezeigt wird.
:::

3\. Starten Sie einen Zabbix Java gateway-Container:

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

4\. Starten Sie einen Zabbix Server-Container und verbinden Sie ihn mit dem MySQL-Server-Container (ersetzen Sie `zabbix_pwd` und `root_pwd` durch dieselben Passwörter, die in Schritt 2 verwendet wurden):

```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.4-latest
```

::: noteimportant
Nachdem Sie den Zabbix Server-Container gestartet haben, warten Sie, bis der Zabbix Server die Initialisierung des Datenbankschemas abgeschlossen hat.
Um zu bestätigen, dass er bereit ist, führen Sie `docker logs zabbix-server-mysql` aus und fahren Sie erst fort, wenn `Creating 'zabbix' schema in MySQL` nicht mehr angezeigt wird.
:::

5\. Starten Sie einen Container für die Zabbix-Weboberfläche und verbinden Sie ihn mit den Containern des Zabbix Servers und des MySQL Servers (ersetzen Sie `zabbix_pwd` und `root_pwd` durch dieselben Passwörter, die in Schritt 2 verwendet wurden):

```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.4-latest
```

Nachdem die Container gestartet und betriebsbereit sind (typischerweise innerhalb von 1–3 Minuten), wird der Zabbix Server gestartet und die Weboberfläche ist unter `http://localhost` verfügbar.

#### Zabbix Server (PostgreSQL) mit SNMP-Traps bereitstellen

Dieses Beispiel zeigt, wie ein Zabbix Server mit einem PostgreSQL-Backend, [SNMP-Traps](/manual/config/items/itemtypes/snmptrap) und einer webbasierten Oberfläche auf Nginx-Basis bereitgestellt wird.

1\. Erstellen Sie ein dediziertes Docker-Netzwerk, damit alle Container der Zabbix-Komponenten sich über ihren Containernamen gegenseitig erreichen können:

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

2\. Starten Sie einen leeren PostgreSQL-Server-Container (ersetzen Sie `zabbix_pwd` durch ein starkes Passwort):

```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\. Starten Sie einen Zabbix SNMP-Traps-Container:

```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.4-latest
```

4\. Starten Sie einen Zabbix Server-Container und verbinden Sie ihn mit dem PostgreSQL-Server-Container und dem SNMP-Traps-Container (ersetzen Sie `zabbix_pwd` durch dasselbe Passwort, das in Schritt 2 verwendet wurde):

```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 \
  -d zabbix/zabbix-server-pgsql:alpine-7.4-latest
```

::: noteimportant
Nachdem Sie den Zabbix Server-Container gestartet haben, warten Sie, bis der Zabbix Server die Initialisierung des Datenbankschemas abgeschlossen hat.
Um zu bestätigen, dass er bereit ist, führen Sie `docker logs zabbix-server-pgsql` aus und fahren Sie erst fort, wenn `Creating 'zabbix' schema in PostgreSQL` nicht mehr angezeigt wird.
:::

5\. Starten Sie einen Container für die Zabbix-Weboberfläche und verbinden Sie ihn mit den Containern des Zabbix Servers und des PostgreSQL Servers (ersetzen Sie `zabbix_pwd` durch dasselbe Passwort, das in Schritt 2 verwendet wurde):

```bash
docker run --name zabbix-web-nginx-pgsql -t \
  -e ZBX_SERVER_HOST="zabbix-server-pgsql" \
  -e DB_SERVER_HOST="postgres-server" \
  -e POSTGRES_USER="zabbix" \
  -e POSTGRES_PASSWORD="zabbix_pwd" \
  -e POSTGRES_DB="zabbix" \
  --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.4-latest
```

Nachdem die Container gestartet und betriebsbereit sind (typischerweise innerhalb von 1–3 Minuten), wird der Zabbix Server gestartet und die Weboberfläche ist unter `http://localhost` verfügbar.

#### Zabbix Server (MySQL) mit Java gateway auf RHEL 8–10 bereitstellen

Dieses Beispiel zeigt, wie ein Zabbix Server mit einem MySQL-Backend, einem Java gateway für [JMX-Überwachung](/manual/config/items/itemtypes/jmx_monitoring) und einer webbasierten Oberfläche auf Nginx-Basis bereitgestellt wird, die alle auf Red Hat Enterprise Linux 8, 9 oder 10 ausgeführt werden.

Unter Red Hat Enterprise Linux wird als Container-Laufzeitumgebung Podman anstelle von Docker empfohlen.
Podman funktioniert ähnlich wie Docker, benötigt jedoch keinen im Hintergrund laufenden Dienst mit Root-Rechten, was es besser für Red-Hat-Umgebungen geeignet macht.

1\. Erstellen Sie ein neues Pod mit dem Namen `zabbix` und freigegebenen Ports für die Zabbix-Weboberfläche und den Zabbix-Server-Trapper:

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

2\. (Optional) Starten Sie einen Zabbix-Agent-Container im 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-74:latest
```

3\. Erstellen Sie ein Verzeichnis `./mysql/` auf dem RHEL-Host:

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

4\. Starten Sie einen leeren MySQL-Server-Container (ersetzen Sie `zabbix_pwd` und `root_pwd` durch starke Passwörter):

```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 \
  --default-authentication-plugin=mysql_native_password
```

::: noteimportant
Wenn Sie ein Docker-Image für MySQL 8.4 oder neuer verwenden, ersetzen Sie `--default-authentication-plugin=mysql_native_password` durch `--authentication-policy=caching_sha2_password`.
<br><br>
MySQL muss vollständig initialisiert sein, bevor Sie in Schritt 6 den Zabbix Server-Container starten, andernfalls wird das Zabbix-Schema möglicherweise nicht korrekt geladen.
Um zu bestätigen, dass MySQL bereit ist, führen Sie `podman logs mysql-server` aus und fahren Sie erst fort, wenn `/usr/sbin/mysqld: ready for connections` angezeigt wird.
:::

5\. Starten Sie einen Zabbix Java gateway-Container:

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

6\. Starten Sie einen Zabbix Server-Container (ersetzen Sie `zabbix_pwd` und `root_pwd` durch dieselben Passwörter, die in Schritt 4 verwendet wurden):

```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 MYSQL_ROOT_PASSWORD="root_pwd" \
  -e ZBX_JAVAGATEWAY="127.0.0.1" \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-server-mysql-74
```

7\. Starten Sie einen Container für die Zabbix-Weboberfläche (ersetzen Sie `zabbix_pwd` und `root_pwd` durch dieselben Passwörter, die in Schritt 4 verwendet wurden):

```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 MYSQL_ROOT_PASSWORD="root_pwd" \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-web-mysql-74
```

::: noteclassic
Pod `zabbix` stellt den Port `80/TCP` (HTTP) des Containers `zabbix-web-mysql` auf dem Hostsystem über `8080/TCP` bereit.
:::

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