Установка из контейнеров
Обзор
На этой странице описано, как развернуть Zabbix с помощью Docker или Docker Compose.
Docker Compose — самый быстрый способ развернуть Zabbix. Он считывает файл конфигурации и автоматически запускает все контейнеры, из которых состоит полноценная установка Zabbix, в правильном порядке.
Docker (ручное развертывание) позволяет добиться того же результата, развертывая каждый компонент шаг за шагом, что может подойти пользователям, уже управляющим существующей средой Docker.
Начиная с Zabbix 6.0, детерминированные триггеры необходимо создавать во время установки.
Если для MySQL/MariaDB включено бинарное журналирование, для этого требуются привилегии суперпользователя или установка переменной/параметра конфигурации log_bin_trust_function_creators = 1.
Инструкции по установке этой переменной см. в разделе Скрипты создания базы данных.
Обратите внимание, что при выполнении из консоли переменная будет установлена только временно и будет сброшена при перезапуске Docker.
В этом случае оставьте SQL-службу работающей, остановите только службу zabbix-server, выполнив docker compose down zabbix-server, а затем docker compose up -d zabbix-server.
В качестве альтернативы вы можете задать эту переменную в файле конфигурации.
Предварительные требования
Перед началом убедитесь, что Docker установлен в вашей системе. Если это не так, следуйте руководству по установке Docker.
Для некоторых компонентов Zabbix требуется, чтобы на узле сети, где запущен Docker, были открыты определённые порты (например, 10051/TCP для сервера Zabbix, 162/UDP для SNMP-ловушек).
Полный список портов, используемых компонентами Zabbix, см. в разделе Требования.
Для сервера Zabbix и агента порт по умолчанию можно изменить, задав переменную окружения ZBX_LISTENPORT в соответствующем контейнере.
Доступные Docker-образы
Zabbix предоставляет Docker-образ для каждого компонента Zabbix; все они опубликованы на Docker Hub. Каждый образ используется для создания контейнера, в котором работает соответствующий компонент.
| Компонент Zabbix | Docker-образ |
|---|---|
| Агент | zabbix/zabbix-agent |
| Агент 2 | zabbix/zabbix-agent2 |
| Сервер (MySQL) | zabbix/zabbix-server-mysql |
| Сервер (PostgreSQL) | zabbix/zabbix-server-pgsql |
| Веб-интерфейс (Apache + MySQL) | zabbix/zabbix-web-apache-mysql |
| Веб-интерфейс (Apache + PostgreSQL) | zabbix/zabbix-web-apache-pgsql |
| Веб-интерфейс (Nginx + MySQL) | zabbix/zabbix-web-nginx-mysql |
| Веб-интерфейс (Nginx + PostgreSQL) | zabbix/zabbix-web-nginx-pgsql |
| Прокси (SQLite3) | zabbix/zabbix-proxy-sqlite3 |
| Прокси (MySQL) | zabbix/zabbix-proxy-mysql |
| Java gateway | zabbix/zabbix-java-gateway |
| Веб-сервис | zabbix/zabbix-web-service |
| SNMP-ловушки | zabbix/zabbix-snmptraps |
Для использования SNMP traps контейнер SNMP-ловушек должен использовать общий том с контейнером сервера или прокси Zabbix (см. how to use this image на Docker Hub и пример ниже).
Все образы компонентов Zabbix на Docker Hub автоматически пересобираются при обновлении их базовых образов.
Теги образов
Каждый образ поддерживает теги для выбора базовой операционной системы и версии Zabbix:
zabbix/<image>:<os>-<version>
Поддерживаемые значения <os>:
alpine- Alpine Linuxubuntu- Ubuntuol- Oracle Linuxltsc2019- Windows 10 LTSC 2019 (только Zabbix агент)ltsc2022- Windows 11 LTSC 2022 (только Zabbix агент)
Поддерживаемые значения <version>:
latest- Последняя стабильная версия на Alpine Linux<os>-latest- Последняя стабильная версия на выбранной ОС<os>-trunk- Последняя разрабатываемая (nightly) сборка на выбранной ОС<os>-X.X-latest- Последний минорный релиз указанной мажорной версии на выбранной ОС<os>-X.X.*- Конкретная минорная версия на выбранной ОС
Примеры:
# Последняя стабильная версия Zabbix прокси (SQLite3) на Alpine Linux:
docker pull zabbix/zabbix-proxy-sqlite3:latest
# Последняя стабильная версия Zabbix прокси (SQLite3) на Ubuntu:
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-latest
# Последняя разрабатываемая (nightly) сборка Zabbix сервер (MySQL) на Ubuntu:
docker pull zabbix/zabbix-server-mysql:ubuntu-trunk
# Последний минорный релиз 8.0 Zabbix сервер (MySQL) на Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-8.0-latest
# Версия 8.0.1 Zabbix сервер (MySQL) на Alpine Linux:
docker pull zabbix/zabbix-server-mysql:alpine-8.0.1
Docker Compose
Docker Compose — это самый быстрый способ развернуть Zabbix. Он считывает файл конфигурации (Compose file) и выполняет всю настройку — загружает Docker-образы, создает внутреннюю сеть между контейнерами, настраивает хранилище, инициализирует базу данных и запускает всё в правильном порядке.
Репозиторий official Zabbix Dockerfiles предоставляет готовые к использованию файлы Docker Compose и систему конфигурации на основе .env, поддерживающую различные операционные системы, серверные части баз данных и конфигурацию компонентов Zabbix.
1. Клонируйте репозиторий, перейдите в него и переключитесь на версию 8.0:
git clone https://github.com/zabbix/zabbix-docker.git
cd zabbix-docker
git checkout 8.0
Если у вас не установлен git, см. руководство по установке Git.
2. (Необязательно) Настройте развертывание с помощью переменных окружения. Этот шаг можно пропустить при использовании настройки по умолчанию.
3. Разверните стандартную установку Zabbix:
# С MySQL в качестве базы данных:
docker compose -f ./compose.yaml up -d
# С PostgreSQL в качестве базы данных:
docker compose -f ./compose_pgsql.yaml up -d
Это запускает сервер Zabbix, веб-интерфейс (работающий на Nginx) и серверную часть базы данных (MySQL или PostgreSQL), каждый в собственном контейнере на Alpine Linux (по умолчанию).
После того как контейнеры будут запущены и начнут работать (обычно в течение 1–3 минут), сервер Zabbix будет запущен, а веб-интерфейс станет доступен по адресу http://localhost.
Вы можете проверить, что всё работает, с помощью следующей команды:
docker compose ps
Все контейнеры должны иметь статус running.
Если у какого-либо из них отображается exited, проверьте его журналы (docker logs <container-name>).
Переменные окружения
Поведение Docker Compose и конфигурацию компонентов Zabbix можно настраивать с помощью переменных окружения.
Переменные уровня Compose (определены в файле .env) управляют тем, какие Docker-образы, порты и диапазоны IP-адресов сети используются.
Вы можете указывать эти переменные непосредственно перед командой docker compose или отредактировать файл .env.
Например, следующая команда разворачивает полную многоконтейнерную установку Zabbix с использованием образа на базе Ubuntu (вместо Alpine Linux по умолчанию) и публикацией веб-интерфейса через Nginx на пользовательских портах HTTP (8282) и HTTPS (8443):
OS=ubuntu \
ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
ZABBIX_WEB_NGINX_HTTPS_PORT=8443 \
docker compose -f ./compose.yaml up -d
Переменные уровня компонентов (определены в файлах env_vars/.env_<component>) управляют конфигурацией компонентов Zabbix.
Перед выполнением команды docker compose отредактируйте соответствующий файл .env_<component>.
Например, вы можете изменить количество пассивных poller-процессов сервера Zabbix и параметры кэша, а также настроить часовой пояс веб-интерфейса, отредактировав следующие переменные:
# env_vars/.env_srv
ZBX_STARTPOLLERS=20
ZBX_CACHESIZE=64M
ZBX_HISTORYCACHESIZE=32M
# env_vars/.env_web
PHP_TZ=Europe/Paris
Переменные окружения уровня компонентов соответствуют параметрам конфигурации компонентов Zabbix, но используют другой стиль именования (например, ZBX_STARTPOLLERS соответствует StartPollers).
Некоторые переменные являются специфичными для Docker, а некоторые параметры конфигурации нельзя изменить (например, PIDFile и LogType).
При использовании переменных окружения обращайтесь к разделу Environment variables в описании Docker image каждого компонента на Docker Hub.
Тома
Docker Compose хранит постоянные данные в каталоге zbx_env/, создаваемом рядом с файлом Compose.
Этот каталог сохраняет данные компонентов при перезапуске и обновлении контейнеров.
Содержимое zbx_env/ заранее определено для образа каждого компонента. Например:
zbx_env/etc/— используется контейнером веб-интерфейса Zabbixzbx_env/usr/иzbx_env/var/— используются контейнером сервера Zabbix
Дополнительную информацию о каждом томе см. в разделе Allowed volumes в описании Docker image каждого компонента на Docker Hub.
Makefile
Репозиторий Dockerfiles Zabbix также предоставляет Makefile как удобный способ выполнения типовых задач Docker Compose.
Вместо использования полной команды docker compose можно применять более короткие команды make (выполните make help, чтобы увидеть доступные варианты):
# Развертывание по умолчанию (сервер 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
При остановке или удалении контейнеров всегда указывайте тот же тип базы данных, который использовался при развертывании (например, make down DB=pgsql).
По умолчанию make up запускает только минимальный набор сервисов (сервер Zabbix, веб-интерфейс и база данных).
Это позволяет сохранить конфигурацию легковесной и избежать запуска компонентов, которые могут не понадобиться.
Чтобы включить дополнительные компоненты, можно использовать следующие профили Compose:
# Развертывание по умолчанию + агент Zabbix, Java gateway, веб-сервис и SNMP traps:
make up COMPOSE_PROFILES=full
# COMPOSE_PROFILES=full + прокси Zabbix (MySQL и SQLite3):
make up COMPOSE_PROFILES=all
Docker (ручное развертывание)
Используйте ручное развертывание, если вы хотите развернуть Zabbix пошагово, запускать отдельные компоненты, интегрировать их с существующей средой или использовать альтернативную среду выполнения контейнеров, такую как Podman.
Например, чтобы развернуть прокси Zabbix, выполните следующую команду:
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-8.0-latest
Эта команда:
-
Загружает Docker image
zabbix/zabbix-proxy-sqlite3:alpine-8.0-latest. -
Создает и запускает контейнер
zabbix-proxy-sqlite3на основе Docker image (с флагами--initи-d). -
Настраивает параметр
Serverпрокси Zabbix через переменную окруженияZBX_SERVER_HOST. Этот параметр указывает IP-адрес сервера Zabbix, от которого прокси будет получать данные конфигурации и на который будет отправлять собранные данные. Обратите внимание, что другие переменные, необходимые для работы активного прокси, используют значения по умолчанию и могут быть опущены.
Переменные окружения соответствуют параметрам конфигурации компонентов Zabbix, используя другой стиль именования (например, ZBX_SERVER_HOST соответствует Server).
Некоторые переменные являются специфичными для Docker, а некоторые параметры конфигурации не могут быть изменены (например, PIDFile и LogType).
При использовании переменных окружения, пожалуйста, обращайтесь к разделу Environment variables в описании Docker image каждого компонента на Docker Hub.
- Подключает место хранения, управляемое Docker (например,
/var/lib/docker/volumes/zabbix-proxy-data/), к каталогу/var/lib/zabbixконтейнера, чтобы данные прокси Zabbix хранились постоянно, даже если контейнер будет удален.
Для получения дополнительной информации о каждом томе смотрите раздел Allowed volumes в описании Docker image каждого компонента на Docker Hub.
После развертывания контейнера прокси Zabbix вы можете перейти к добавлению прокси в веб-интерфейсе Zabbix и настройке узлов сети для мониторинга этим прокси.
Примеры ниже охватывают еще три сценария развертывания:
- сервер Zabbix (MySQL) с Java gateway
- сервер Zabbix (PostgreSQL) с SNMP traps
- сервер Zabbix (MySQL) с Java gateway на RHEL 8
Для получения дополнительных примеров, пожалуйста, обращайтесь к описанию Docker image каждого компонента на Docker Hub.
Развертывание сервера Zabbix (MySQL) с Java gateway
1. Создайте выделенную сеть Docker, чтобы все контейнеры компонентов Zabbix могли обращаться друг к другу по имени контейнера:
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
2. Запустите пустой контейнер сервера MySQL (замените zabbix_pwd и root_pwd на надежные пароли):
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.4-oracle \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=caching_sha2_password \
--innodb-default-row-format=dynamic \
--innodb-strict-mode=OFF
MySQL должен быть полностью инициализирован до запуска контейнера сервера Zabbix на шаге 4, иначе схема Zabbix может загрузиться некорректно.
Чтобы убедиться, что MySQL готов, выполните docker logs mysql-server и продолжайте только после появления /usr/sbin/mysqld: ready for connections.
3. Запустите контейнер Zabbix Java gateway:
docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart unless-stopped \
-d zabbix/zabbix-java-gateway:alpine-8.0-latest
4. Запустите контейнер сервера Zabbix и свяжите его с контейнером сервера MySQL (замените zabbix_pwd и root_pwd на те же пароли, что использовались на шаге 2):
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-8.0-latest
После запуска контейнера сервера Zabbix дождитесь, пока сервер Zabbix завершит инициализацию схемы базы данных.
Чтобы убедиться, что он готов, выполните docker logs zabbix-server-mysql и продолжайте только тогда, когда больше не будете видеть Creating 'zabbix' schema in MySQL.
5. Запустите контейнер веб-интерфейса Zabbix и свяжите его с контейнерами сервера Zabbix и сервера MySQL (замените zabbix_pwd и root_pwd на те же пароли, что использовались на шаге 2):
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-8.0-latest
После запуска контейнеров (обычно в течение 1–3 минут) сервер Zabbix будет запущен, а веб-интерфейс станет доступен по адресу http://localhost.
Развертывание сервера Zabbix (PostgreSQL) с SNMP traps
1. Создайте выделенную сеть Docker, чтобы все контейнеры компонентов Zabbix могли обращаться друг к другу по имени контейнера:
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
2. Запустите пустой контейнер сервера PostgreSQL (замените zabbix_pwd на надежный пароль):
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 traps:
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-8.0-latest
4. Запустите контейнер сервера Zabbix, свяжите его с контейнером сервера PostgreSQL и контейнером SNMP traps (замените zabbix_pwd на тот же пароль, что использовался на шаге 2):
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-8.0-latest
После запуска контейнера сервера Zabbix дождитесь, пока сервер Zabbix завершит инициализацию схемы базы данных.
Чтобы убедиться, что он готов, выполните docker logs zabbix-server-pgsql и продолжайте только тогда, когда больше не будете видеть Creating 'zabbix' schema in PostgreSQL.
5. Запустите контейнер веб-интерфейса Zabbix и свяжите его с контейнерами сервера Zabbix и сервера PostgreSQL (замените zabbix_pwd на тот же пароль, что использовался на шаге 2):
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-8.0-latest
После запуска контейнеров (обычно в течение 1–3 минут) сервер Zabbix будет запущен, а веб-интерфейс станет доступен по адресу http://localhost.
Развертывание сервера Zabbix (MySQL) с Java gateway на RHEL 8
В Red Hat Enterprise Linux 8 рекомендуемой средой выполнения контейнеров является Podman вместо Docker. Podman работает аналогично Docker, но не требует фоновой службы, запущенной от root, что делает его более подходящим для сред Red Hat.
1. Создайте новый pod с именем zabbix и открытыми портами для веб-интерфейса Zabbix и trapper сервера Zabbix:
podman pod create --name zabbix -p 80:8080 -p 10051:10051
2. (Необязательно) Запустите контейнер агента Zabbix в pod zabbix:
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-80:latest
3. Создайте каталог ./mysql/ на узле RHEL:
mkdir -p ./mysql
4. Запустите пустой контейнер сервера MySQL (замените zabbix_pwd и root_pwd на надежные пароли):
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.4 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=caching_sha2_password \
--innodb-default-row-format=dynamic \
--innodb-strict-mode=OFF
MySQL должен быть полностью инициализирован до запуска контейнера сервера Zabbix на шаге 6, иначе схема Zabbix может загрузиться некорректно.
Чтобы убедиться, что MySQL готов, выполните podman logs mysql-server и продолжайте только после появления /usr/sbin/mysqld: ready for connections.
5. Запустите контейнер Zabbix Java gateway:
podman run --name zabbix-java-gateway -t \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-java-gateway-80
6. Запустите контейнер сервера Zabbix (замените zabbix_pwd и root_pwd на те же пароли, что использовались на шаге 4):
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-80
7. Запустите контейнер веб-интерфейса Zabbix (замените zabbix_pwd и root_pwd на те же пароли, что использовались на шаге 4):
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-80
Pod zabbix предоставляет на узел сети порт 80/TCP (HTTP) из порта 8080/TCP контейнера zabbix-web-mysql.