[comment]: # ({e62e1497-e62e1497})
# 5 Installation from containers

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

[comment]: # ({52adc319-a3ac452e})
### Przegląd

Ta strona opisuje, jak wdrożyć Zabbix przy użyciu Docker lub Docker Compose.

[Docker Compose](#docker-compose) to najszybszy sposób wdrożenia Zabbix.
Odczytuje plik konfiguracyjny i automatycznie uruchamia wszystkie kontenery składające się na kompletne środowisko Zabbix, we właściwej kolejności.

[Docker (ręczne wdrożenie)](#docker-manual-deployment) osiąga ten sam rezultat, wdrażając każdy komponent krok po kroku.

::: noteimportant
Od Zabbix 6.0 deterministyczne wyzwalacze muszą być tworzone podczas instalacji.
Jeśli włączone jest binarne logowanie dla MySQL/MariaDB, wymaga to uprawnień superużytkownika lub ustawienia zmiennej/parametru konfiguracyjnego `log_bin_trust_function_creators = 1`.
Instrukcje dotyczące ustawiania tej zmiennej znajdują się w sekcji [Skrypty tworzenia bazy danych](/manual/appendix/install/db_scripts#mysqlmariadb).
<br><br>
Należy pamiętać, że jeśli wykonujesz to z konsoli, zmienna zostanie ustawiona tylko tymczasowo i zostanie usunięta po ponownym uruchomieniu Docker.
W takim przypadku pozostaw usługę SQL uruchomioną, zatrzymaj tylko usługę `zabbix-server`, uruchamiając `docker compose down zabbix-server`, a następnie `docker compose up -d zabbix-server`.
<br><br>
Alternatywnie można ustawić tę zmienną w pliku konfiguracyjnym.
:::

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

[comment]: # ({b13b686a-fba82ded})
### Wymagania wstępne

Przed rozpoczęciem upewnij się, że Docker (1.12.0 lub nowszy) jest zainstalowany w systemie.
Jeśli nie, skorzystaj z [przewodnika instalacji Dockera](https://docs.docker.com/engine/install/).
W przypadku wdrożenia z użyciem Docker Compose wymagany jest również Docker Compose (2.24.0 lub nowszy).

Niektóre komponenty Zabbix wymagają otwarcia określonych portów na hoście, na którym działa Docker (np. 10051/TCP dla serwera Zabbix, 162/UDP dla pułapek SNMP).
Pełną सूची portów używanych przez komponenty Zabbix znajdziesz w sekcji [Wymagania](/manual/installation/requirements#default-port-numbers).
Dla serwera Zabbix i agent domyślny port można zmienić, ustawiając zmienną środowiskową `ZBX_LISTENPORT` w odpowiednim kontenerze.

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

[comment]: # ({6c7779eb-f9acea87})
### Dostępne obrazy Docker

Zabbix udostępnia obraz Docker dla każdego komponentu Zabbix, a wszystkie są publikowane w serwisie [Docker Hub](https://hub.docker.com/u/zabbix).
Każdy obraz służy do utworzenia kontenera uruchamiającego dany komponent.

|Komponent Zabbix|Obraz 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)|
|Serwer (MySQL)|[zabbix/zabbix-server-mysql](https://hub.docker.com/r/zabbix/zabbix-server-mysql/)|
|Serwer (PostgreSQL)|[zabbix/zabbix-server-pgsql](https://hub.docker.com/r/zabbix/zabbix-server-pgsql/)|
|Interfejs webowy (Apache + MySQL)|[zabbix/zabbix-web-apache-mysql](https://hub.docker.com/r/zabbix/zabbix-web-apache-mysql/)|
|Interfejs webowy (Apache + PostgreSQL)|[zabbix/zabbix-web-apache-pgsql](https://hub.docker.com/r/zabbix/zabbix-web-apache-pgsql/)|
|Interfejs webowy (Nginx + MySQL)|[zabbix/zabbix-web-nginx-mysql](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql/)|
|Interfejs webowy (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/)|
|Usługa webowa|[zabbix/zabbix-web-service](https://hub.docker.com/r/zabbix/zabbix-web-service)|
|Trapy SNMP|[zabbix/zabbix-snmptraps](https://hub.docker.com/r/zabbix/zabbix-snmptraps/)|

::: noteclassic
Aby używać [trapów SNMP](/manual/config/items/itemtypes/snmptrap), kontener trapów SNMP musi współdzielić wolumin z kontenerem serwera Zabbix lub proxy (zobacz [jak używać tego obrazu](https://hub.docker.com/r/zabbix/zabbix-snmptraps#how-to-use-this-image) w Docker Hub oraz poniższy [przykład](#deploy-zabbix-server-postgresql-with-snmp-traps)).
:::

Wszystkie obrazy komponentów Zabbix w Docker Hub są oparte na najnowszych głównych wersjach [obsługiwanych systemów operacyjnych](#image-tags).
Obrazy te są automatycznie przebudowywane po aktualizacji bazowych obrazów systemu operacyjnego.

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

[comment]: # ({c6474561-e498c2aa})
#### Tagi obrazów

Każdy obraz obsługuje tagi służące do wyboru bazowego systemu operacyjnego i wersji Zabbix:

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

Obsługiwane wartości `<os>`:

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

Obsługiwane wartości `<version>`:

-   `latest` - Najnowsza stabilna wersja Zabbix na Alpine Linux
-   `<os>-latest` - Najnowsza stabilna wersja Zabbix na wybranym systemie operacyjnym
-   `<os>-trunk` - Najnowsza kompilacja rozwojowa (nightly) na wybranym systemie operacyjnym
-   `<os>-X.X-latest` - Najnowsze wydanie pomocnicze Zabbix dla określonej głównej wersji Zabbix na wybranym systemie operacyjnym
-   `<os>-X.X.*` - Określone wydanie pomocnicze Zabbix na wybranym systemie operacyjnym

Przykłady:

```bash
# Najnowszy stabilny proxy Zabbix (SQLite3) na Alpine Linux:
docker pull zabbix/zabbix-proxy-sqlite3:latest

# Najnowszy stabilny proxy Zabbix (SQLite3) na Ubuntu:
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-latest

# Najnowsza rozwojowa (nightly) kompilacja serwer Zabbix (MySQL) na Ubuntu:
docker pull zabbix/zabbix-server-mysql:ubuntu-trunk

# Najnowsze wydanie pomocnicze 7.4 serwer Zabbix (MySQL) na Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-7.4-latest

# Wersja 7.4.1 serwer Zabbix (MySQL) na Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-7.4.1
```

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

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

Docker Compose to najszybszy sposób wdrożenia Zabbix.
Odczytuje plik konfiguracyjny (plik Compose) i obsługuje całą konfigurację — pobieranie obrazów Docker, tworzenie wewnętrznej sieci między kontenerami, konfigurację magazynu, inicjalizację bazy danych oraz uruchamianie wszystkiego we właściwej kolejności.

Repozytorium [oficjalnych plików Docker Zabbix](https://github.com/zabbix/zabbix-docker) udostępnia gotowe do użycia pliki Docker Compose oraz system konfiguracji oparty na `.env`, obsługujący różne systemy operacyjne, backendy baz danych i konfigurację komponentów Zabbix.

1\. Sklonuj repozytorium, przejdź do niego i przełącz się na wersję 7.4:

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

2\. (Opcjonalnie) Dostosuj wdrożenie za pomocą [zmiennych środowiskowych](#environment-variables).
Ten krok można pominąć w przypadku domyślnej konfiguracji.

3\. Wdróż domyślną konfigurację — serwer Zabbix, interfejs webowy (działający na Nginx) oraz backend bazy danych (MySQL lub PostgreSQL), każdy uruchomiony w osobnym kontenerze na Alpine Linux.

```bash
# Z MySQL jako bazą danych:
docker compose -f ./compose.yaml up -d

# Z PostgreSQL jako bazą danych:
docker compose -f ./compose_pgsql.yaml up -d
```

Po uruchomieniu kontenerów (zwykle w ciągu 1–3 minut) serwer Zabbix zostanie uruchomiony, a interfejs webowy będzie dostępny pod adresem `http://localhost`.

::: noteclassic
Użyj `docker compose ps`, aby sprawdzić stan kontenerów.
Wszystkie kontenery (z wyjątkiem kontenera `zabbix-docker-server-db-init-1`) powinny mieć status `Up`.
Jeśli którykolwiek ma status `Exited`, sprawdź jego logi za pomocą `docker logs <container-name>`.
:::

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

[comment]: # ({8b4e2b4d-de9f41d4})
#### Zmienne środowiskowe

Zachowanie Docker Compose oraz konfigurację komponentów Zabbix można dostosować za pomocą zmiennych środowiskowych.

**Zmienne na poziomie Compose** (zdefiniowane w pliku [`.env`](https://github.com/zabbix/zabbix-docker/blob/7.4/.env)) kontrolują, które obrazy Docker, porty i zakresy adresów IP sieci są używane.
Możesz używać tych zmiennych bezpośrednio przed poleceniem `docker compose` albo edytować plik `.env`.

Na przykład poniższe polecenie wdraża pełną, wielokontenerową konfigurację Zabbix z użyciem obrazu opartego na Ubuntu (zamiast domyślnego Alpine Linux) oraz udostępnia frontend przez Nginx na niestandardowych portach 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
```

**Zmienne na poziomie komponentu** (zdefiniowane w plikach [`env_vars/.env_<component>`](https://github.com/zabbix/zabbix-docker/blob/7.4/env_vars/)) kontrolują konfigurację komponentów Zabbix.
Przed uruchomieniem polecenia `docker compose` edytuj odpowiedni plik `.env_<component>`.

Na przykład możesz dostosować liczbę pasywnych pollerów serwera Zabbix i ustawienia pamięci podręcznej, a także skonfigurować strefę czasową frontendu, edytując następujące zmienne:

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

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

::: noteclassic
Zmienne środowiskowe na poziomie komponentu odpowiadają parametrom konfiguracji komponentów Zabbix, ale używają innego stylu nazewnictwa (np. `ZBX_STARTPOLLERS` odpowiada [`StartPollers`](/manual/appendix/config/zabbix_server#startpollers)).
Niektóre zmienne są specyficzne dla Dockera, a niektórych parametrów konfiguracji nie można zmienić (np. `PIDFile` i `LogType`).
Korzystając ze zmiennych środowiskowych, zapoznaj się z sekcją *Environment variables* w opisie każdego komponentu [obrazu Docker](#available-docker-images) na Docker Hub.
:::

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

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

Docker Compose przechowuje trwałe dane w katalogu `zbx_env/` utworzonym obok pliku Compose.
Katalog ten zachowuje dane komponentów między ponownymi uruchomieniami kontenerów i aktualizacjami.

Zawartość `zbx_env/` jest zdefiniowana z góry dla obrazu każdego komponentu. Na przykład:

-   `zbx_env/etc/` - używany przez [kontener interfejsu web Zabbix](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql#allowed-volumes-for-the-zabbix-web-interface-container)
-   `zbx_env/usr/` i `zbx_env/var/` - używane przez [kontener serwera Zabbix](https://hub.docker.com/r/zabbix/zabbix-server-mysql#allowed-volumes-for-the-zabbix-server-container)

Więcej informacji o każdym wolumenie można znaleźć w sekcji *Allowed volumes* w opisie [obrazu Docker](#available-docker-images) każdego komponentu na Docker Hub.

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

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

Repozytorium Zabbix Dockerfiles udostępnia również plik [Makefile](https://github.com/zabbix/zabbix-docker/blob/7.4/Makefile) jako skrót do typowych zadań Docker Compose.
Zamiast używać pełnego polecenia `docker compose`, można korzystać z krótszych poleceń `make` (uruchom `make help`, aby zobaczyć dostępne opcje):

```bash
# Domyślne wdrożenie (serwer Zabbix, frontend, MySQL, wszystko na Alpine Linux)
make up

# Własne wdrożenie (serwer Zabbix, frontend z niestandardowymi portami Nginx, PostgreSQL, wszystko na Ubuntu)
make up \
  OS=ubuntu \
  DB=pgsql \
  ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
  ZABBIX_WEB_NGINX_HTTPS_PORT=8443
```

::: noteimportant
Podczas zatrzymywania lub usuwania kontenerów zawsze podawaj ten sam typ bazy danych, który został wdrożony (np. `make down DB=pgsql`).
:::

Domyślnie `make up` uruchamia tylko minimalny zestaw usług (serwer Zabbix, frontend i baza danych).
Dzięki temu konfiguracja pozostaje lekka i nie uruchamia komponentów, które mogą nie być potrzebne.
Aby uwzględnić dodatkowe komponenty, można użyć następujących [profili Compose](https://docs.docker.com/compose/how-tos/profiles/):

```bash
# Domyślne wdrożenie + agent Zabbix, Java gateway, usługa web i pułapki SNMP:
make up COMPOSE_PROFILES=full

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

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

[comment]: # ({1c8231dd-0b4b68c7})
### Docker (ręczne wdrożenie)

Użyj ręcznego wdrożenia, gdy chcesz wdrażać Zabbix krok po kroku, uruchamiać poszczególne komponenty, integrować je z istniejącym środowiskiem lub korzystać z alternatywnego środowiska uruchomieniowego kontenerów, takiego jak Podman.

Na przykład, aby wdrożyć proxy Zabbix, uruchom następujące polecenie:

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

To polecenie:

-   Pobiera obraz Docker `zabbix/zabbix-proxy-sqlite3:alpine-7.4-latest` [Docker image](#available-docker-images).

-   Tworzy i uruchamia kontener `zabbix-proxy-sqlite3` oparty na obrazie Docker (z flagami [`--init`](https://docs.docker.com/reference/cli/docker/container/run/#init) i [`-d`](https://docs.docker.com/reference/cli/docker/container/run/#detach)).

-   Konfiguruje parametr proxy Zabbix [`Server`](/manual/appendix/config/zabbix_proxy#server) za pomocą zmiennej środowiskowej `ZBX_SERVER_HOST`.
    Ten parametr określa adres IP serwera Zabbix, z którego proxy będzie pobierać dane konfiguracyjne i do którego będzie wysyłać zebrane dane.
    Zwróć uwagę, że inne zmienne wymagane do działania aktywnego proxy używają wartości domyślnych i można je pominąć.

::: noteclassic
Zmienne środowiskowe odpowiadają parametrom konfiguracji komponentów Zabbix, ale używają innego stylu nazewnictwa (np. `ZBX_SERVER_HOST` odpowiada [`Server`](/manual/appendix/config/zabbix_proxy#server)).
Niektóre zmienne są specyficzne dla Dockera, a niektórych parametrów konfiguracji nie można zmienić (np. `PIDFile` i `LogType`).
Podczas korzystania ze zmiennych środowiskowych zapoznaj się z sekcją *Environment variables* w opisie każdego [Docker image](#available-docker-images) komponentu na Docker Hub.
:::

-   Łączy lokalizację magazynu zarządzaną przez Docker (np. `/var/lib/docker/volumes/zabbix-proxy-data/`) z katalogiem `/var/lib/zabbix` kontenera, aby dane proxy Zabbix były przechowywane trwale, nawet jeśli kontener zostanie usunięty.

::: noteclassic
Więcej informacji o każdym woluminie znajdziesz w sekcji *Allowed volumes* w opisie każdego [Docker image](#available-docker-images) komponentu na Docker Hub.
:::

Po wdrożeniu kontenera proxy Zabbix możesz przejść do [dodania proxy](/manual/distributed_monitoring/proxies#configuration) w frontend Zabbix oraz [skonfigurowania hostów](/manual/config/hosts/host#configuration), które mają być monitorowane przez to proxy.

Poniższe przykłady obejmują trzy dodatkowe scenariusze wdrożenia:

-   serwer Zabbix (MySQL) z Java gateway
-   serwer Zabbix (PostgreSQL) z pułapkami SNMP
-   serwer Zabbix (MySQL) z Java gateway na RHEL 8

Więcej przykładów znajdziesz w opisie każdego [Docker image](#available-docker-images) komponentu na Docker Hub.

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

[comment]: # ({fecc21f2-492bd3ba})
#### Wdrożenie serwera Zabbix (MySQL) z Java gateway

Ten przykład pokazuje, jak wdrożyć serwer Zabbix z backendem MySQL, Java gateway do [monitorowania JMX](/manual/config/items/itemtypes/jmx_monitoring) oraz interfejsem webowym opartym na Nginx.

1\. Utwórz dedykowaną sieć Docker, aby wszystkie kontenery komponentów Zabbix mogły się wzajemnie komunikować po nazwie kontenera:

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

2\. Uruchom pusty kontener serwera MySQL (zamień `zabbix_pwd` i `root_pwd` na silne hasła):

```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
Jeśli używasz obrazu Docker dla MySQL 8.4 lub nowszego, zastąp `--default-authentication-plugin=mysql_native_password` opcją `--authentication-policy=caching_sha2_password`.
<br><br>
MySQL musi zostać w pełni zainicjalizowany przed uruchomieniem kontenera serwera Zabbix w kroku 4, w przeciwnym razie schemat Zabbix może nie zostać załadowany poprawnie.
Aby potwierdzić, że MySQL jest gotowy, uruchom `docker logs mysql-server` i przejdź dalej dopiero wtedy, gdy zobaczysz `/usr/sbin/mysqld: ready for connections`.
:::

3\. Uruchom kontener Zabbix Java gateway:

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

4\. Uruchom kontener serwera Zabbix i połącz go z kontenerem serwera MySQL (zamień `zabbix_pwd` i `root_pwd` na te same hasła, których użyto w kroku 2):

```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
Po uruchomieniu kontenera serwera Zabbix poczekaj, aż serwer Zabbix zakończy inicjalizację schematu bazy danych.
Aby potwierdzić, że jest gotowy, uruchom `docker logs zabbix-server-mysql` i przejdź dalej dopiero wtedy, gdy nie będzie już widoczny komunikat `Creating 'zabbix' schema in MySQL`.
:::

5\. Uruchom kontener interfejsu webowego Zabbix i połącz go z kontenerami serwera Zabbix oraz serwera MySQL (zamień `zabbix_pwd` i `root_pwd` na te same hasła, których użyto w kroku 2):

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

Po uruchomieniu kontenerów (zwykle w ciągu 1–3 minut) serwer Zabbix zostanie uruchomiony, a interfejs webowy będzie dostępny pod adresem `http://localhost`.

#### Wdrożenie serwera Zabbix (PostgreSQL) z SNMP traps

Ten przykład pokazuje, jak wdrożyć serwer Zabbix z backendem PostgreSQL, [SNMP traps](/manual/config/items/itemtypes/snmptrap) oraz interfejsem webowym opartym na Nginx.

1\. Utwórz dedykowaną sieć Docker, aby wszystkie kontenery komponentów Zabbix mogły się wzajemnie komunikować po nazwie kontenera:

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

2\. Uruchom pusty kontener serwera PostgreSQL (zamień `zabbix_pwd` na silne hasło):

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

4\. Uruchom kontener serwera Zabbix, połącz go z kontenerem serwera PostgreSQL oraz kontenerem SNMP traps (zamień `zabbix_pwd` na to samo hasło, którego użyto w kroku 2):

```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
Po uruchomieniu kontenera serwera Zabbix poczekaj, aż serwer Zabbix zakończy inicjalizację schematu bazy danych.
Aby potwierdzić, że jest gotowy, uruchom `docker logs zabbix-server-pgsql` i przejdź dalej dopiero wtedy, gdy nie będzie już widoczny komunikat `Creating 'zabbix' schema in PostgreSQL`.
:::

5\. Uruchom kontener interfejsu webowego Zabbix i połącz go z kontenerami serwera Zabbix oraz serwera PostgreSQL (zamień `zabbix_pwd` na to samo hasło, którego użyto w kroku 2):

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

Po uruchomieniu kontenerów (zwykle w ciągu 1–3 minut) serwer Zabbix zostanie uruchomiony, a interfejs webowy będzie dostępny pod adresem `http://localhost`.

#### Wdrożenie serwera Zabbix (MySQL) z Java gateway na RHEL 8–10

Ten przykład pokazuje, jak wdrożyć serwer Zabbix z backendem MySQL, Java gateway do [monitorowania JMX](/manual/config/items/itemtypes/jmx_monitoring) oraz interfejsem webowym opartym na Nginx, działające na Red Hat Enterprise Linux 8, 9 lub 10.

W Red Hat Enterprise Linux zalecanym środowiskiem uruchomieniowym kontenerów jest Podman zamiast Docker.
Podman działa podobnie do Dockera, ale nie wymaga działającej w tle usługi uruchamianej jako root, co lepiej pasuje do środowisk Red Hat.

1\. Utwórz nowy pod o nazwie `zabbix` z wystawionymi portami dla interfejsu webowego Zabbix i trappera serwera Zabbix:

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

2\. (Opcjonalnie) Uruchom kontener agenta Zabbix w podzie `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\. Utwórz katalog `./mysql/` na hoście RHEL:

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

4\. Uruchom pusty kontener serwera MySQL (zamień `zabbix_pwd` i `root_pwd` na silne hasła):

```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
Jeśli używasz obrazu Docker dla MySQL 8.4 lub nowszego, zastąp `--default-authentication-plugin=mysql_native_password` opcją `--authentication-policy=caching_sha2_password`.
<br><br>
MySQL musi zostać w pełni zainicjalizowany przed uruchomieniem kontenera serwera Zabbix w kroku 6, w przeciwnym razie schemat Zabbix może nie zostać załadowany poprawnie.
Aby potwierdzić, że MySQL jest gotowy, uruchom `podman logs mysql-server` i przejdź dalej dopiero wtedy, gdy zobaczysz `/usr/sbin/mysqld: ready for connections`.
:::

5\. Uruchom kontener Zabbix Java gateway:

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

6\. Uruchom kontener serwera Zabbix (zamień `zabbix_pwd` i `root_pwd` na te same hasła, których użyto w kroku 4):

```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\. Uruchom kontener interfejsu webowego Zabbix (zamień `zabbix_pwd` i `root_pwd` na te same hasła, których użyto w kroku 4):

```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` udostępnia port `80/TCP` (HTTP) na hoście z portu `8080/TCP` kontenera `zabbix-web-mysql`.
:::

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