Áú»¢¶Ä²©

This is the documentation page for an unsupported version of Áú»¢¶Ä²©.
Is this not what you were looking for? Switch to the current version or choose one from the drop-down menu.

5 Installation from containers

Docker

Áú»¢¶Ä²© provides images for each Áú»¢¶Ä²© component as portable and self-sufficient containers to speed up deployment and update procedure.

Áú»¢¶Ä²© components come with MySQL and PostgreSQL database support, Apache2 and Nginx web server support. These images are separated into different images.

Docker base images

Áú»¢¶Ä²© components are provided on Ubuntu, Alpine Linux and CentOS base images:

Image Version
3.12
20.04 (focal)
8

All images are configured to rebuild latest images if base images are updated.

Docker file sources

Everyone can follow Docker file changes using the Áú»¢¶Ä²© on . You can fork the project or make your own images based on official Docker files.

Structure

All Áú»¢¶Ä²© components are available in the following Docker repositories:

  • Áú»¢¶Ä²© agent -
  • Áú»¢¶Ä²© server
    • Áú»¢¶Ä²© server with MySQL database support -
    • Áú»¢¶Ä²© server with PostgreSQL database support -
  • Áú»¢¶Ä²© web-interface
    • Áú»¢¶Ä²© web-interface based on Apache2 web server with MySQL database support -
    • Áú»¢¶Ä²© web-interface based on Apache2 web server with PostgreSQL database support -
    • Áú»¢¶Ä²© web-interface based on Nginx web server with MySQL database support -
    • Áú»¢¶Ä²© web-interface based on Nginx web server with PostgreSQL database support -
  • Áú»¢¶Ä²© proxy
    • Áú»¢¶Ä²© proxy with SQLite3 database support -
    • Áú»¢¶Ä²© proxy with MySQL database support -
  • Áú»¢¶Ä²© Java Gateway -

Additionally there is SNMP trap support. It is provided as additional repository () based on Ubuntu Trusty only. It could be linked with Áú»¢¶Ä²© server and Áú»¢¶Ä²© proxy.

Versions

Each repository of Áú»¢¶Ä²© components contains the following tags:

  • latest - latest stable version of a Áú»¢¶Ä²© component based on Alpine Linux image
  • alpine-latest - latest stable version of a Áú»¢¶Ä²© component based on Alpine Linux image
  • ubuntu-latest - latest stable version of a Áú»¢¶Ä²© component based on Ubuntu image
  • alpine-5.2-latest - latest minor version of a Áú»¢¶Ä²© 5.2 component based on Alpine Linux image
  • ubuntu-5.2-latest - latest minor version of a Áú»¢¶Ä²© 5.2 component based on Ubuntu image
  • alpine-5.2.* - different minor versions of a Áú»¢¶Ä²© 5.2 component based on Alpine Linux image, where * is the minor version of Áú»¢¶Ä²© component
  • ubuntu-5.2.* - different minor versions of a Áú»¢¶Ä²© 5.2 component based on Ubuntu image, where * is the minor version of Áú»¢¶Ä²© component

Usage

Environment variables

All Áú»¢¶Ä²© component images provide environment variables to control configuration. These environment variables are listed in each component repository. These environment variables are options from Áú»¢¶Ä²© configuration files, but with different naming method. For example, ZBX_LOGSLOWQUERIES is equal to LogSlowQueries from Áú»¢¶Ä²© server and Áú»¢¶Ä²© proxy configuration files.

Some of configuration options are not allowed to change. For example, PIDFile and LogType.

Some of components have specific environment variables, which do not exist in official Áú»¢¶Ä²© configuration files:

Variable Components Description
DB_SERVER_HOST Server
Proxy
Web interface
This variable is IP or DNS name of MySQL or PostgreSQL server.
By default, value is mysql-server or postgres-server for MySQL or PostgreSQL respectively
DB_SERVER_PORT Server
Proxy
Web interface
This variable is port of MySQL or PostgreSQL server.
By default, value is '3306' or '5432' respectively.
MYSQL_USER Server
Proxy
Web-interface
MySQL database user.
By default, value is 'zabbix'.
MYSQL_PASSWORD Server
Proxy
Web interface
MySQL database password.
By default, value is 'zabbix'.
MYSQL_DATABASE Server
Proxy
Web interface
Áú»¢¶Ä²© database name.
By default, value is 'zabbix' for Áú»¢¶Ä²© server and 'zabbix_proxy' for Áú»¢¶Ä²© proxy.
POSTGRES_USER Server
Web interface
PostgreSQL database user.
By default, value is 'zabbix'.
POSTGRES_PASSWORD Server
Web interface
PostgreSQL database password.
By default, value is 'zabbix'.
POSTGRES_DB Server
Web interface
Áú»¢¶Ä²© database name.
By default, value is 'zabbix' for Áú»¢¶Ä²© server and 'zabbix_proxy' for Áú»¢¶Ä²© proxy.
PHP_TZ Web-interface Timezone in PHP format. Full list of supported timezones are available on .
By default, value is 'Europe/Riga'.
ZBX_SERVER_NAME Web interface Visible Áú»¢¶Ä²© installation name in right top corner of the web interface.
By default, value is 'Áú»¢¶Ä²© Docker'
ZBX_JAVAGATEWAY_ENABLE Server
Proxy
Enables communication with Áú»¢¶Ä²© Java gateway to collect Java related checks.
By default, value is "false"
ZBX_ENABLE_SNMP_TRAPS Server
Proxy
Enables SNMP trap feature. It requires zabbix-snmptraps instance and shared volume /var/lib/zabbix/snmptraps to Áú»¢¶Ä²© server or Áú»¢¶Ä²© proxy.
Volumes

The images allow to use some mount points. These mount points are different and depend on Áú»¢¶Ä²© component type:

Volume Description
Áú»¢¶Ä²© agent
/etc/zabbix/zabbix_agentd.d The volume allows to include *.conf files and extend Áú»¢¶Ä²© agent using the UserParameter feature
/var/lib/zabbix/modules The volume allows to load additional modules and extend Áú»¢¶Ä²© agent using the LoadModule feature
/var/lib/zabbix/enc The volume is used to store TLS-related files. These file names are specified using ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE and ZBX_TLSPSKFILE environment variables
Áú»¢¶Ä²© server
/usr/lib/zabbix/alertscripts The volume is used for custom alert scripts. It is the AlertScriptsPath parameter in zabbix_server.conf
/usr/lib/zabbix/externalscripts The volume is used by external checks. It is the ExternalScripts parameter in zabbix_server.conf
/var/lib/zabbix/modules The volume allows to load additional modules and extend Áú»¢¶Ä²© server using the LoadModule feature
/var/lib/zabbix/enc The volume is used to store TLS related files. These file names are specified using ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE and ZBX_TLSPSKFILE environment variables
/var/lib/zabbix/ssl/certs The volume is used as location of SSL client certificate files for client authentication. It is the SSLCertLocation parameter in zabbix_server.conf
/var/lib/zabbix/ssl/keys The volume is used as location of SSL private key files for client authentication. It is the SSLKeyLocation parameter in zabbix_server.conf
/var/lib/zabbix/ssl/ssl_ca The volume is used as location of certificate authority (CA) files for SSL server certificate verification. It is the SSLCALocation parameter in zabbix_server.conf
/var/lib/zabbix/snmptraps The volume is used as location of snmptraps.log file. It could be shared by zabbix-snmptraps container and inherited using the volumes_from Docker option while creating a new instance of Áú»¢¶Ä²© server. SNMP trap processing feature could be enabled by using shared volume and switching the ZBX_ENABLE_SNMP_TRAPS environment variable to 'true'
/var/lib/zabbix/mibs The volume allows to add new MIB files. It does not support subdirectories, all MIBs must be placed in /var/lib/zabbix/mibs
Áú»¢¶Ä²© proxy
/usr/lib/zabbix/externalscripts The volume is used by external checks. It is the ExternalScripts parameter in zabbix_proxy.conf
/var/lib/zabbix/modules The volume allows to load additional modules and extend Áú»¢¶Ä²© server using the LoadModule feature
/var/lib/zabbix/enc The volume is used to store TLS related files. These file names are specified using ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE and ZBX_TLSPSKFILE environment variables
/var/lib/zabbix/ssl/certs The volume is used as location of SSL client certificate files for client authentication. It is the SSLCertLocation parameter in zabbix_proxy.conf
/var/lib/zabbix/ssl/keys The volume is used as location of SSL private key files for client authentication. It is the SSLKeyLocation parameter in zabbix_proxy.conf
/var/lib/zabbix/ssl/ssl_ca The volume is used as location of certificate authority (CA) files for SSL server certificate verification. It is the SSLCALocation parameter in zabbix_proxy.conf
/var/lib/zabbix/snmptraps The volume is used as location of snmptraps.log file. It could be shared by the zabbix-snmptraps container and inherited using the volumes_from Docker option while creating a new instance of Áú»¢¶Ä²© server. SNMP trap processing feature could be enabled by using shared volume and switching the ZBX_ENABLE_SNMP_TRAPS environment variable to 'true'
/var/lib/zabbix/mibs The volume allows to add new MIB files. It does not support subdirectories, all MIBs must be placed in /var/lib/zabbix/mibs
Áú»¢¶Ä²© web interface based on Apache2 web server
/etc/ssl/apache2 The volume allows to enable HTTPS for Áú»¢¶Ä²© web interface. The volume must contain the two ssl.crt and ssl.key files prepared for Apache2 SSL connections
Áú»¢¶Ä²© web interface based on Nginx web server
/etc/ssl/nginx The volume allows to enable HTTPS for Áú»¢¶Ä²© web interface. The volume must contain the two ssl.crt, ssl.key files and dhparam.pem prepared for Nginx SSL connections
Áú»¢¶Ä²© snmptraps
/var/lib/zabbix/snmptraps The volume contains the snmptraps.log log file named with received SNMP traps
/var/lib/zabbix/mibs The volume allows to add new MIB files. It does not support subdirectories, all MIBs must be placed in /var/lib/zabbix/mibs

For additional information use Áú»¢¶Ä²© official repositories in Docker Hub.

Usage examples

** Example 1 **

The example demonstrates how to run Áú»¢¶Ä²© server with MySQL database support, Áú»¢¶Ä²© web interface based on the Nginx web server and Áú»¢¶Ä²© Java gateway.

1. Create network dedicated for Áú»¢¶Ä²© component containers:

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

2. Start empty MySQL server instance

# 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 \
             -d mysql:8.0 \
             --restart unless-stopped \
             --character-set-server=utf8 --collation-server=utf8_bin \
             --default-authentication-plugin=mysql_native_password

3. Start Áú»¢¶Ä²© Java gateway instance

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

4. Start Áú»¢¶Ä²© server instance and link the instance with created MySQL server instance

# 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-5.2-latest

Áú»¢¶Ä²© server instance exposes 10051/TCP port (Áú»¢¶Ä²© trapper) to host machine.

5. Start Áú»¢¶Ä²© web interface and link the instance with created MySQL server and Áú»¢¶Ä²© server instances

# 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-5.2-latest

Áú»¢¶Ä²© web interface instance exposes 80/TCP port (HTTP) to host machine.

** Example 2 **

The example demonstrates how to run Áú»¢¶Ä²© server with PostgreSQL database support, Áú»¢¶Ä²© web interface based on the Nginx web server and SNMP trap feature.

1. Create network dedicated for Áú»¢¶Ä²© component containers:

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

2. Start empty PostgreSQL server instance

# 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. Start Áú»¢¶Ä²© snmptraps instance

# 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-5.2-latest

Áú»¢¶Ä²© snmptrap instance exposes the 162/UDP port (SNMP traps) to host machine.

4. Start Áú»¢¶Ä²© server instance and link the instance with created PostgreSQL server instance

# 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-5.2-latest

Áú»¢¶Ä²© server instance exposes the 10051/TCP port (Áú»¢¶Ä²© trapper) to host machine.

5. Start Áú»¢¶Ä²© web interface and link the instance with created PostgreSQL server and Áú»¢¶Ä²© server instances

# 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-5.2-latest

Áú»¢¶Ä²© web interface instance exposes the 443/TCP port (HTTPS) to host machine.
Directory /etc/ssl/nginx must contain certificate with required name.

** Example 3 **

The example demonstrates how to run Áú»¢¶Ä²© server with MySQL database support, Áú»¢¶Ä²© web interface based on the Nginx web server and Áú»¢¶Ä²© Java gateway using podman on Red Hat 8.

1. Create new pod with name zabbix and exposed ports (web-interface, Áú»¢¶Ä²© server trapper):

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

2. (optional) Start Áú»¢¶Ä²© agent container in zabbix pod location:

podman run --name zabbix-agent \
           -eZBX_SERVER_HOST="127.0.0.1,localhost" \
           --restart=always \
           --pod=zabbix \
           -d registry.connect.redhat.com/zabbix/zabbix-agent-50:latest

3. Create ./mysql/ directory on host and start Oracle MySQL server 8.0:

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=utf8 --collation-server=utf8_bin \
             --default-authentication-plugin=mysql_native_password

3. Start Áú»¢¶Ä²© server container:

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

4. Start Áú»¢¶Ä²© Java Gateway container:

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

5. Start Áú»¢¶Ä²© web-interface container:

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

Pod zabbix exposes 80/TCP port (HTTP) to host machine from 8080/TCP of zabbix-web-mysql container.

Docker Compose

Áú»¢¶Ä²© provides compose files also for defining and running multi-container Áú»¢¶Ä²© components in Docker. These compose files are available in Áú»¢¶Ä²© docker official repository on github.com: . These compose files are added as examples, they are overloaded. For example, they contain proxies with MySQL and SQLite3 support.

There are a few different versions of compose files:

File name Description
docker-compose_v3_alpine_mysql_latest.yaml The compose file runs the latest version of Áú»¢¶Ä²© 5.2 components on Alpine Linux with MySQL database support.
docker-compose_v3_alpine_mysql_local.yaml The compose file locally builds the latest version of Áú»¢¶Ä²© 5.2 and runs Áú»¢¶Ä²© components on Alpine Linux with MySQL database support.
docker-compose_v3_alpine_pgsql_latest.yaml The compose file runs the latest version of Áú»¢¶Ä²© 5.2 components on Alpine Linux with PostgreSQL database support.
docker-compose_v3_alpine_pgsql_local.yaml The compose file locally builds the latest version of Áú»¢¶Ä²© 5.2 and runs Áú»¢¶Ä²© components on Alpine Linux with PostgreSQL database support.
docker-compose_v3_centos_mysql_latest.yaml The compose file runs the latest version of Áú»¢¶Ä²© 5.2 components on CentOS 8 with MySQL database support.
docker-compose_v3_centos_mysql_local.yaml The compose file locally builds the latest version of Áú»¢¶Ä²© 5.2 and runs Áú»¢¶Ä²© components on CentOS 8 with MySQL database support.
docker-compose_v3_centos_pgsql_latest.yaml The compose file runs the latest version of Áú»¢¶Ä²© 5.2 components on CentOS 8 with PostgreSQL database support.
docker-compose_v3_centos_pgsql_local.yaml The compose file locally builds the latest version of Áú»¢¶Ä²© 5.2 and runs Áú»¢¶Ä²© components on CentOS 8 with PostgreSQL database support.
docker-compose_v3_ubuntu_mysql_latest.yaml The compose file runs the latest version of Áú»¢¶Ä²© 5.2 components on Ubuntu 20.04 with MySQL database support.
docker-compose_v3_ubuntu_mysql_local.yaml The compose file locally builds the latest version of Áú»¢¶Ä²© 5.2 and runs Áú»¢¶Ä²© components on Ubuntu 20.04 with MySQL database support.
docker-compose_v3_ubuntu_pgsql_latest.yaml The compose file runs the latest version of Áú»¢¶Ä²© 5.2 components on Ubuntu 20.04 with PostgreSQL database support.
docker-compose_v3_ubuntu_pgsql_local.yaml The compose file locally builds the latest version of Áú»¢¶Ä²© 5.2 and runs Áú»¢¶Ä²© components on Ubuntu 20.04 with PostgreSQL database support.

Available Docker compose files support version 3 of Docker Compose.

Storage

Compose files are configured to support local storage on a host machine. Docker Compose will create a zbx_env directory in the folder with the compose file when you run Áú»¢¶Ä²© components using the compose file. The directory will contain the same structure as described above in the Volumes section and directory for database storage.

There are also volumes in read-only mode for /etc/localtime and /etc/timezone files.

Environment files

In the same directory with compose files on github.com you can find files with default environment variables for each component in compose file. These environment files are named like .env_<type of component>.

Examples

** Example 1 **

# git checkout 5.2
       # docker-compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d

The command will download latest Áú»¢¶Ä²© 5.2 images for each Áú»¢¶Ä²© component and run them in detach mode.

Do not forget to download .env_<type of component> files from github.com official Áú»¢¶Ä²© repository with compose files.

** Example 2 **

# git checkout 5.2
       # docker-compose -f ./docker-compose_v3_ubuntu_mysql_local.yaml up -d

The command will download base image Ubuntu 20.04 (focal), then build Áú»¢¶Ä²© 5.2 components locally and run them in detach mode.