[comment]: # ({e62e1497-e62e1497})
# 5. Установка из контейнеров 

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

[comment]: # ({5f71f243-a3ac452e})
### Обзор

В этом разделе описывается, как развернуть Zabbix с помощью Docker или Docker Compose.

[Docker Compose](#docker-compose) — самый быстрый способ развернуть Zabbix.
Считывается конфигурационный файл, и автоматически запускаются все контейнеры, составляющие полную инсталляцию Zabbix, в правильном порядке.

[Docker (ручное развёртывание)](#docker-ручное-развёртывание) позволяет достичь того же результата путём поэтапного развёртывания каждого компонента.

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

[comment]: # ({b13b686a-fba82ded})
### Предварительные требования

Прежде чем начать, убедитесь, что в вашей системе установлен Docker (версия 1.12.0 или более поздняя).
Если это не так, следуйте [руководству по установке Docker \[en\]](https://docs.docker.com/engine/install/).
Для развёртывания с помощью Docker Compose также требуется Docker Compose (версия 2.24.0 или более поздняя).

Для работы некоторых компонентов Zabbix на хосте, где запущен Docker, необходимо открыть определённые порты (например, 10051/TCP для сервера Zabbix, 162/UDP для SNMP-трапов).
Полный список портов, используемых компонентами Zabbix, смотрите в разделе [Требования](/manual/installation/requirements#номера-портов-по-умолчанию).
Для сервера и агента Zabbix порт по умолчанию можно изменить, установив в соответствующем контейнере переменную окружения `ZBX_LISTENPORT`.

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

[comment]: # ({6c7779eb-f9acea87})
### Доступные образы Docker

Zabbix предоставляет образ Docker для каждого компонента Zabbix, все они опубликованы на [Docker Hub](https://hub.docker.com/u/zabbix).
Каждый образ используется для создания контейнера, выполняющего этот компонент.

|Компонент Zabbix|Образ Docker|
|--|--------|
|Агент|[zabbix/zabbix-agent](https://hub.docker.com/r/zabbix/zabbix-agent/)|
|Агент 2|[zabbix/zabbix-agent2](https://hub.docker.com/r/zabbix/zabbix-agent2)|
|Сервер (MySQL)|[zabbix/zabbix-server-mysql](https://hub.docker.com/r/zabbix/zabbix-server-mysql/)|
|Сервер (PostgreSQL)|[zabbix/zabbix-server-pgsql](https://hub.docker.com/r/zabbix/zabbix-server-pgsql/)|
|Веб-интерфейс (Apache + MySQL)|[zabbix/zabbix-web-apache-mysql](https://hub.docker.com/r/zabbix/zabbix-web-apache-mysql/)|
|Веб-интерфейс (Apache + PostgreSQL)|[zabbix/zabbix-web-apache-pgsql](https://hub.docker.com/r/zabbix/zabbix-web-apache-pgsql/)|
|Веб-интерфейс (Nginx + MySQL)|[zabbix/zabbix-web-nginx-mysql](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql/)|
|Веб-интерфейс (Nginx + PostgreSQL)|[zabbix/zabbix-web-nginx-pgsql](https://hub.docker.com/r/zabbix/zabbix-web-nginx-pgsql/)|
|Прокси (SQLite3)|[zabbix/zabbix-proxy-sqlite3](https://hub.docker.com/r/zabbix/zabbix-proxy-sqlite3/)|
|Прокси (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/)|
|Веб-сервис|[zabbix/zabbix-web-service](https://hub.docker.com/r/zabbix/zabbix-web-service)|
|SNMP трапы|[zabbix/zabbix-snmptraps](https://hub.docker.com/r/zabbix/zabbix-snmptraps/)|

::: noteclassic
Для использования [SNMP трапов](/manual/config/items/itemtypes/snmptrap) контейнер SNMP трапов должен использовать общий том с сервером Zabbix или контейнером прокси (см. [как использовать этот образ \[en\]](https://hub.docker.com/r/zabbix/zabbix-snmptraps#how-to-use-this-image) на Docker Hub и [пример](#развёртывание-zabbix-сервера-postgresql-с-snmp-трапами) ниже).
:::

Все образы компонентов Zabbix на Docker Hub основаны на последних мажорных версиях [поддерживаемых операционных систем](#теги-образов).
Эти образы автоматически пересобираются при обновлении базовых образов ОС.

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

[comment]: # ({a7a01d95-e498c2aa})
#### Теги образов

Каждый образ поддерживает теги для выбора базовой операционной системы и версии Zabbix:

```default
zabbix/<образ>:<ос>-<версия>
```

Поддерживаемые значения `<ос>`:

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

Поддерживаемые значения `<версия>`:

-   `latest` — Последняя стабильная версия Zabbix на Alpine Linux
-   `<os>-latest` — Последняя стабильная версия Zabbix на выбранной ОС
-   `<os>-trunk` — Последняя (еженощная) сборка разработчиков на выбранной ОС
-   `<os>-X.X-latest` — Последний минорный релиз Zabbix конкретной мажорной версии Zabbix на выбранной ОС
-   `<os>-X.X.*` — Конкретный минорный релиз Zabbix на выбранной ОС

Примеры:

```bash
# Последний стабильный Zabbix прокси (SQLite3) на Alpine Linux:
docker pull zabbix/zabbix-proxy-sqlite3:latest

# Последний стабильный Zabbix прокси (SQLite3) на Ubuntu:
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-latest

# Последняя (ночная) разрабатываемая сборка Zabbix сервера (MySQL) на Ubuntu:
docker pull zabbix/zabbix-server-mysql:ubuntu-trunk

# Последний минорный релиз версии 7.0 Zabbix сервера (MySQL) на Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-7.0-latest

# Версия 7.0.1 Zabbix сервера (MySQL) на Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-7.0.1
```

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

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

Docker Compose — это самый быстрый способ развёртывания Zabbix.
Он считывает конфигурационный файл (файл Compose) и выполняет всю настройку — загрузку образов Docker, создание внутренней сети между контейнерами, настройку хранилища, инициализацию базы данных и запуск всего в правильном порядке.

В [официальном репозитории Dockerfile для Zabbix](https://github.com/zabbix/zabbix-docker) представлены готовые к использованию файлы Docker Compose и система конфигурации на основе `.env`-файлов, поддерживающая различные операционные системы, базы данных и конфигурацию компонентов Zabbix. 

1\. Склонируйте репозиторий, перейдите в него и переключитесь на версию 7.0:

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

2\. (Необязательно) Настройте развёртывание с помощью [переменных окружения](#переменные-окружения).
Для настройки по умолчанию этот шаг можно пропустить.

3\. Разверните конфигурацию по умолчанию — Zabbix сервер, веб-интерфейс (работающий на Nginx) и внутреннюю базу данных (MySQL или PostgreSQL), каждый компонент которой будет работать в отдельном контейнере на Alpine Linux.

```bash
# С базой данных MySQL:
docker compose -f ./compose.yaml up -d

# С базой данных PostgreSQL:
docker compose -f ./compose_pgsql.yaml up -d
```

После запуска контейнеров (обычно в течение 1–3 минут) запускается Zabbix сервер, и веб-интерфейс становится доступен по адресу `http://localhost`.

::: noteclassic
Используйте `docker compose ps` для проверки состояния контейнеров.
Все контейнеры (за исключением контейнера `zabbix-docker-server-db-init-1`) должны иметь состояние `Up`.
Если какие-либо показывают `Exited`, проверьте их журнал командой `docker logs -f <имя-контейнера>`.
:::

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

[comment]: # ({c9a11d44-0be3c140})
#### Переменные окружения

И поведение Docker Compose, и конфигурацию компонентов Zabbix можно настроить с помощью переменных окружения.

**Переменные уровня Compose** (определённые в [файле `.env` \[en\]](https://github.com/zabbix/zabbix-docker/blob/7.0/.env)) управляют тем, какие образы Docker, порты и диапазоны IP сетей используются.
Можно использовать эти переменные непосредственно перед командой `docker compose` или отредактировать файл `.env`.

Например, следующая команда развёртывает законченную многоконтейнерную инсталляцию Zabbix, используя образы на базе Ubuntu (вместо умолчабельного Alpine Linux) и выставляя веб-интерфейс через Nginx на пользовательских портах HTTP (8282) и HTTPS (8443):

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

**Переменные на уровне компонента** (определённые в [файле`env_vars/.env_<компонент>` \[en\]](https://github.com/zabbix/zabbix-docker/blob/7.0/env_vars/) files) управляют конфигурацией компонента Zabbix.
Отредактируйте соответствующий файл `.env_<компонент>` перед выполнением команды `docker compose`.

Например, можно настроить количество пассивных поллеров Zabbix сервера и параметры кэширования, а также сконфигурировать часовой пояс веб-интерфейса, отредактировав следующие переменные:

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

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

::: noteclassic
Переменные окружения на уровне компонентов соответствуют параметрам конфигурации компонентов Zabbix, используя другой стиль именования (например, `ZBX_STARTPOLLERS` соответствует [`StartPollers`](/manual/appendix/config/zabbix_server#startpollers)).
Некоторые переменные являются специфичными для Docker, а некоторые параметры конфигурации изменить нельзя (например, `PIDFile` и `LogType`).
При использовании переменных окружения, пожалуйста, обратитесь к разделу *Переменные окружения* в описании каждого компонента [образа Docker \[en\]](#доступные-образы-docker) на Docker Hub.
:::

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

[comment]: # ({15680aeb-7d10f7dc})
#### Тома

Docker Compose сохраняет постоянные данные в каталоге `zbx_env/`, созданном вместе с файлом Compose.
Этот каталог сохраняет данные компонентов при перезапуске и обновлении контейнера.

Содержимое `zbx_env/` предопределено для образа каждого компонента. Например:

-   `zbx_env/etc/` — используется [контейнером веб-интерфейса Zabbix \[en\]](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql#allowed-volumes-for-the-zabbix-web-interface-container)
-   `zbx_env/usr/` and `zbx_env/var/` — используется [контейнером Zabbix сервера \[en\]](https://hub.docker.com/r/zabbix/zabbix-server-mysql#allowed-volumes-for-the-zabbix-server-container)

Для получения более подробной информации о каждом томе смотрите раздел *Allowed volumes \[en\]* в описании каждого компонента [образа Docker](#доступные-образы-docker) на Docker Hub.

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

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

Репозиторий Zabbix Dockerfiles также предоставляет [Makefile](https://github.com/zabbix/zabbix-docker/blob/7.0/Makefile) в качестве сокращения для распространённых задач Docker Compose.
Вместо использования полной команды `docker compose` вы можете использовать более короткие команды `make` (запустите `make help`, чтобы увидеть доступные параметры):

```bash
# Развёртывание по умолчанию (Zabbix сервер, веб-интерфейс, MySQL, всё на Alpine Linux)
make up

# Пользовательское развёртывание (Zabbix сервер, веб-интерфейс с Nginx на пользовательских портах, PostgreSQL, всё на Ubuntu)
make up \
  OS=ubuntu \
  DB=pgsql \
  ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
  ZABBIX_WEB_NGINX_HTTPS_PORT=8443
```

::: noteimportant
При остановке или удалении контейнеров всегда указывайте тот же тип базы данных, который был развёрнут (например, `make down DB=pgsql`).
:::

По умолчанию команда `make up` запускает только минимальный набор служб (Zabbix сервер, веб-интерфейс и базу данных).
Это позволяет сделать настройку максимально простой и избежать запуска компонентов, которые могут быть не нужны.
Для включения дополнительных компонентов можно использовать следующие [профили Compose \[en\]](https://docs.docker.com/compose/how-tos/profiles/):

```bash
# Развёртывание по умолчанию + Zabbix агент, Java gateway, веб-сервис и SNMP трапы:
make up COMPOSE_PROFILES=full

# COMPOSE_PROFILES=full + Zabbix прокси (MySQL и SQLite3):
make up COMPOSE_PROFILES=all
```

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

[comment]: # ({ec9e0e44-0b4b68c7})
### Docker (ручное развёртывание)

Используйте ручное развёртывание, если вам нужно развёртывать Zabbix поэтапно, запускать отдельные компоненты, интегрировать их с существующей средой или использовать альтернативную среду выполнения контейнеров, такую ​​как Podman.

Например, для развёртывания прокси-сервера Zabbix выполните следующую команду:

```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) не должен запускаться в контейнерах как процесс с `PID1`/`init`.
:::

Эта команда:

-   Загружает [образ Docker](#доступные-образы-docker) `zabbix/zabbix-proxy-sqlite3:alpine-7.0-latest`.

-   Создаёт и запускает контейнер `zabbix-proxy-sqlite3` на базе этого образа Docker (с флагами [`--init` \[en\]](https://docs.docker.com/reference/cli/docker/container/run/#init) и [`-d` \[en\]](https://docs.docker.com/reference/cli/docker/container/run/#detach)).

-   Настраивает параметр [`Server`](/manual/appendix/config/zabbix_proxy#server) прокси-сервера Zabbix посредством переменной окружения `ZBX_SERVER_HOST`.
    Этот параметр указывает IP-адрес Zabbix сервера, с которого прокси будет забирать данные конфигурации и на который он будет отсылать собранные данные.
    Обратите внимание, что остальные переменные, требуемые для работы прокси в активном режиме, используют значения по умолчанию и могут быть опущены.

::: noteclassic
Переменные окружения соответствуют параметрам конфигурации компонентов Zabbix, используя другой стиль именования (например, `ZBX_SERVER_HOST` соответствует [`Server`](/manual/appendix/config/zabbix_proxy#server)).
Некоторые переменные являются специфичными для Docker, а некоторые параметры конфигурации изменить нельзя (например, `PIDFile` и `LogType`).
При использовании переменных окружения, пожалуйста, обратитесь к разделу *Environment variables \[en\]* в описании каждого компонента [образа Docker](#доступные-образы-docker) на Docker Hub.
:::

-   Подключает место хранения, управляемое Docker'ом (например, `/var/lib/docker/volumes/zabbix-proxy-data/`), к каталогу `/var/lib/zabbix` контейнера, чтобы данные Zabbix прокси хранились постоянно, даже если контейнер будет удалён.

::: noteclassic
Для получения более подробной информации о каждом томе смотрите раздел *Allowed volumes \[en\]* в описании каждого компонента [образа Docker](#доступные-образы-docker) на Docker Hub.
:::

После развёртывания контейнера Zabbix прокси вы можете [добавить прокси](/manual/distributed_monitoring/proxies#настройка) в веб-интерфейсе вашего Zabbix и [настроить узлы сети](/manual/config/hosts/host#настройка) на мониторинг этим прокси.

Приведённые ниже примеры охватывают три дополнительных сценария развертывания:

-   Zabbix сервер (MySQL) с Java gateway
-   Zabbix сервер (PostgreSQL) с SNMP трапами
-   Zabbix сервер (MySQL) с Java gateway на RHEL 8–10

Для получения дополнительных примеров, пожалуйста, обратитесь к описанию каждого компонента [образа Docker \[en\]](#доступные-образы-docker) на Docker Hub.

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

[comment]: # ({a807fe94-492bd3ba})
#### Развёртывание Zabbix сервера (MySQL) с Java gateway

В этом примере показано, как развернуть сервер Zabbix с бэкендом MySQL, Java gateway для [мониторинга JMX](/manual/config/items/itemtypes/jmx_monitoring) и веб-интерфейс на основе Nginx.

1\. Создайте выделенную сеть Docker, чтобы все контейнеры компонентов Zabbix могли взаимодействовать друг с другом по имени контейнера:

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

2\. Запустите пустой контейнер сервера MySQL (замените `zabbix_pwd` и `root_pwd` на надёжные пароли и используйте эти значения в последующих шагах):

```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\. Следите за логами MySQL и дождитесь, пока MySQL будет готов к соединениям (для выхода из логов используйте `Ctrl+C`):

```bash
docker logs -f mysql-server

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

4\. Запустите контейнер 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\. Включите `log_bin_trust_function_creators` в контейнере сервера MySQL.
Это временно ослабляет ограничения безопасности для хранимых функций; данная настройка будет отключена на последующих шагах.
Это позволяет пользователю базы данных Zabbix создавать хранимые функции без привилегии `SUPER`, которая требуется MySQL при включении [бинарного журнала \[en\]](https://dev.mysql.com/doc/refman/8.0/en/stored-programs-logging.html) (по умолчанию, начиная с MySQL 8.0).
Выполните следующую команду:

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

6\. Запустите контейнер Zabbix сервера и свяжите его с контейнерами Java Gateway и сервера MySQL:

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

7\. Следите за логами Zabbix сервера и дождитесь, пока он завершит инициализацию схемы базы данных (для выхода из логов используйте `Ctrl+C`):

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

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

8\. Отключите `log_bin_trust_function_creators` в контейнере сервера MySQL.
Это усиливает ограничение безопасности, которое не позволяет пользователям, не имеющим привилегий SUPER, создавать хранимые функции.
Выполните следующую команду:

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

9\. Запустите контейнер веб-интерфейса Zabbix и свяжите его с контейнерами Zabbix сервера и сервера 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
```

После запуска контейнеров запускается Zabbix сервер, и веб-интерфейс становится доступен по адресу `http://localhost`.

::: noteclassic
Для проверки состояния контейнера используйте `docker ps`.
Все контейнеры должны иметь состояние `Up`.
Если какие-либо показывают `Exited`, проверьте их журналы на предмет ошибок командой `docker logs -f <имя-контейнера>`.
:::

#### Развёртывание Zabbix сервера (PostgreSQL) с SNMP трапами

В этом примере показано, как развернуть Zabbix сервер с бэкендом PostgreSQL, [SNMP-трапы](/manual/config/items/itemtypes/snmptrap) и веб-интерфейс на основе Nginx.

1\. Создайте выделенную сеть Docker, чтобы все контейнеры компонентов Zabbix могли взаимодействовать друг с другом по имени контейнера:

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

2\. Запустите пустой контейнер сервера PostgreSQL (замените `zabbix_pwd` на надёжный пароль и используйте это значение в последующих шагах):

```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\. Запустите контейнер для Zabbix SNMP-трапов:

```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\. Запустите контейнер Zabbix сервера, свяжите его с контейнером сервера PostgreSQL и контейнером 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 \
  -d zabbix/zabbix-server-pgsql:alpine-7.0-latest
```

5\. Следите за логами Zabbix сервера и дождитесь, пока он завершит инициализацию схемы базы данных (для выхода из логов используйте `Ctrl+C`):

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

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

6\. Запустите контейнер веб-интерфейса Zabbix и свяжите его с контейнерами Zabbix сервера и сервера PostgreSQL:

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

После запуска контейнеров запускается Zabbix сервер, и веб-интерфейс становится доступен по адресу `http://localhost`.

::: noteclassic
Для проверки состояния контейнера используйте `docker ps`.
Все контейнеры должны иметь состояние `Up`.
Если какие-либо показывают `Exited`, проверьте их журналы на предмет ошибок командой `docker logs -f <имя-контейнера>`.
:::

#### Развёртывание Zabbix сервера (MySQL) с Java gateway на RHEL 8–10

В этом примере показано, как развернуть сервер Zabbix с бэкендом MySQL, Java gateway для [мониторинга JMX](/manual/config/items/itemtypes/jmx_monitoring) и веб-интерфейс на основе Nginx, всё это работает под управлением Red Hat Enterprise Linux 8, 9 или 10.

В Red Hat Enterprise Linux рекомендуемой средой выполнения контейнеров является Podman вместо Docker.
Podman работает аналогично Docker, но не требует фоновой службы, работающей от имени root, что делает его более подходящим для сред Red Hat.

1\. Создайте новый под с именем `zabbix` и откройте порты для веб-интерфейса Zabbix и траппера Zabbix сервера:

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

2\. (Необязательно) Запустите контейнер агента Zabbix в расположении пода `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\. Создайте каталог `./mysql/` на хосте RHEL:

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

4\. Запустите пустой контейнер сервера MySQL (замените `zabbix_pwd` и `root_pwd` на надёжные пароли и используйте эти значения в последующих шагах):

```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\. Следите за логами MySQL и дождитесь, пока MySQL будет готов к соединениям (для выхода из логов используйте `Ctrl+C`):

```bash
podman logs -f mysql-server

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

6\. Запустите контейнер 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\. Включите `log_bin_trust_function_creators` в контейнере сервера MySQL.
Это временно ослабляет ограничения безопасности для хранимых функций; данная настройка будет отключена на последующих шагах.
Это позволяет пользователю базы данных Zabbix создавать хранимые функции без привилегии `SUPER`, которая требуется MySQL при включении [бинарного журнала \[en\]](https://dev.mysql.com/doc/refman/8.0/en/stored-programs-logging.html) (по умолчанию, начиная с MySQL 8.0).
Выполните следующую команду:

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

8\. Запустите контейнер Zabbix сервера  и свяжите его с контейнерами Java Gateway и сервера MySQL:

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

9\. Следите за логами Zabbix сервера и дождитесь, пока он завершит инициализацию схемы базы данных (для выхода из логов используйте `Ctrl+C`):

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

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

10\. Отключите `log_bin_trust_function_creators` в контейнере сервера MySQL.
Это усиливает ограничение безопасности, которое не позволяет пользователям, не имеющим привилегий SUPER, создавать хранимые функции.
Выполните следующую команду:

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

11\. Запустите контейнер веб-интерфейса Zabbix и свяжите его с контейнерами Zabbix сервера и сервера MySQL:

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

::: noteclassic
Под `zabbix` пробрасывает порт `80/TCP` (HTTP) на хост-машине на порт `8080/TCP` контейнера `zabbix-web-mysql`.
:::

После запуска контейнеров запускается Zabbix сервер, и веб-интерфейс становится доступен по адресу `http://localhost`.

::: noteclassic
Для проверки состояния контейнера используйте `docker ps`.
Все контейнеры должны иметь состояние `Up`.
Если какие-либо показывают `Exited`, проверьте их журналы на предмет ошибок командой `docker logs -f <имя-контейнера>`.
:::

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