Installation and initial configuration of the Zabbix 6 monitoring server on Ubuntu Server

The Zabbix server is used to collect and analyze information about the status of network nodes. In this article the process of installing and deploying a web interface to manage it will be considered. We will use MariaDB/MySQL as the database server. The version of the operating system that was used to write the instructions is 20.04 LTS (also tested on 22.04), the version of Zabbix being installed is 6.

Server preparation

  • Time
  • Firewall

The web server installing

  • MariaDB
  • nginx

Zabbix server installing

  • Installation
  • Database setup
  • Setting up zabbix
  • Starting zabbix-server
  • Setting up nginx
  • Installing the Management Service

Setting Zabbix agent up on the server

Other instructions for Zabbix

Server preparation

Before installing Zabbix, we carry out preparatory procedures.

 To start let’s do this

1. Accurate time

To get up-to-date information, it is necessary that the server has the accurate time.

To do this, first set the precise time zone:

 timedatectl set-timezone europe/berlin

* In this example, Berlin time is set.

Then install and start the time synchronization service:

apt install chrony

systemctl enable chrony

systemctl start chrony

2. Firewall settings

For the access to Zabbix server,open the following ports:

iptables -I INPUT -p tcp –match multiport –dports 80,443 -j ACCEPT

iptables -I INPUT -p tcp –match multiport –dports 10050,10051 -j ACCEPT

iptables -I INPUT -p udp –match multiport –dports 10050,10051 -j ACCEPT

* where 80 is the port for http requests (web interface); 443 – for https requests (web interface); 10050 – ports for receiving information from zabbix agents.

To save the rules, use

apt install iptables-persistent

netfilter persistent save

3. Update the list of packages in the repository:

apt update

If our system is clean and critical services are not running on it, it is worth updating the installed packages:

apt upgrade

System preparation is completed.

Web server installation

The Zabbix server will be managed through a web interface. To do this, you need to install and configure a web server, DB and PHP.


In this tutorial, we will use the MariaDB database server. Zabbix version 6 requires MariaDB version 10.05.00 and higher. But a too recent version may also not be supported by the zabbix server. It is necessary to clarify the system requirements on the official page.

The Ubuntu repository may not contain the required version of the MariaDB, so we will connect the developer’s repository. To do this, follow the link and select our version of the operating system, the latest stable and supported release of MariaDB and the geolocation of the repository, for example:

Below you will see instructions for adding a repository and installing a MariaDB

sudo apt-get install apt-transport-https curl
sudo curl -o /etc/apt/trusted.gpg.d/mariadb_release_signing_key.asc ‘’
sudo sh -c “echo ‘deb focal main’ >>/etc/apt/sources.list”

Update the package cache:

apt update

Install MariaDB:

apt install mariadb-server

We allow database server autostart and start MariaDB:

systemctl enable mariadb

systemctl start mariadb

Set a password for the DB superuser:

mysqladmin -u root password

* after entering the command, the system will require you to enter the password twice.

Web server

We will use the NGINX web server.

To install it, enter the command:

apt install nginx

Start nginx and allow it to autostart:

systemctl enable nginx

systemctl start nginx

We open a web browser and follow the link http://<server IP address>/ – we should see a welcome window:


VPS Linux

VPS hosting with KVM virtualization

Remote access/control

Ready solution

KVM virtualization

24 hours a day support


The zabbix interface is developed in PHP. Оur web server must process scripts written in it. Zabbix version 6 requires PHP version 7.2 or higher.

Install php and necessary components:

apt install php php-fpm php-mysql php-pear php-cgi php-common php-ldap php-mbstring php-snmp php-gd php-xml php-bcmath

To configure php, open the file:

vi /etc/php/7.4/fpm/php.ini

* where 7.4 is the PHP version. In your case it might be a different version. You can check with the php -v command.

Edit the following parameters:

date.timezone = “Europe/Berlin”

max_execution_time = 300

post_max_size = 16M

max_input_time = 300

max_input_vars = 10000

* Where:

date.timezone – time zone. In our example, Moscow time is set.

max_execution_time – allowed script execution time. If the script takes longer to run, the system will abort it.

post_max_size – the maximum amount of data transfer using the POST method.

max_input_time – is the time in seconds that PHP should take to parse GET and POST inputs.

max_input_vars – limited number of input variables that can be passed to the server in one request.

Allow php-fpm to run and restart it:

systemctl enable php7.4-fpm

systemctl restart php7.4-fpm


In order for NGINX to process PHP, open the configuration file:

vi /etc/nginx/sites-enabled/default

In the location section, add the index parameter:

index index.php;

Inside the server section, add the following:

      location ~ \.php$ {

              set $root_path /var/www/html;

                 fastcgi_buffer_size 32k;

                 fastcgi_buffers 4 32k;

                 fastcgi_pass unix:/run/php/php7.4-fpm.sock;

                 fastcgi_index index.php;

                 fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;

                 include fastcgi_params;

              fastcgi_param DOCUMENT_ROOT $root_path;


* where /var/www/html is the root path for storing scripts; /run/php/php7.4-fpm.sock is the path to the php-fpm socket file (the exact location of the file can be found in the configuration file /etc/php/7.4/fpm/pool.d/www.conf).

Checking nginx settings:

nginx -t

And reload it:

systemctl restart nginx

Create index.php with the following content:

vi /var/www/html/index.php

<?php phpinfo(); ?>

Open a web browser and follow the link http://<server IP address>/ – now we should see a summary of PHP and its settings.

The web server is ready to work with Zabbix Web.

Installing and configuring the Zabbix server

Let’s move on to installing the Zabbix server itself.


First, let’s install the repository of the latest version of Zabbix. To do this, go to the page and go to the section with the latest package version – then go to ubuntu/pool/main/z/zabbix-release/ – copy the link to the latest release version:

Please note that you need to copy the link to the file for your version of Ubuntu – in our example it is 20.04. You can view your version of the operating system with the command:

cat /etc/os-release | grep VERSION_ID

Download the repository file with the command:


Install it:

dpkg -i zabbix-release_*.deb

Update package lists:

apt update

Install the server by entering the command:

apt install zabbix-server-mysql zabbix-frontend-php zabbix-get zabbix-sql-scripts

Database setup

We enter the shell for entering sql commands:

mysql -uroot -p

We create a database:


* we have created a zabbix database.

Create a user to connect and work with the created database:

> GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost IDENTIFIED BY ‘zabbixpassword’;

* in this example, we have created a zabbix user with access to the zabbix database and the password zabbixpassword.

Exit the sql shell:

> \q

As part of zabbix, there is a ready-made schema for the MySQL / MariaDB or postgreSQL DB. In our case, we need MySQL.

To apply the scheme, go to the directory:

cd /usr/share/zabbix-sql-scripts/mysql

In previous versions of Zabbix, the path to the database dump was /usr/share/doc/zabbix-sql-scripts/mysql. If we could not find the desired directory with the dump, you can try to search with the command:

find / -type f -iname server.sql.gz

Unpack the archive with the database dump:

gunzip server.sql.gz

Restoring the base of their dump:

mysql -u root -p zabbix <server.sql

* after entering the command, the system will ask for a password. You must enter the password that we set after installing MariaDB.

Setting up zabbix

Open the zabbix configuration file

vi /etc/zabbix/zabbix_server.conf

We add a line


* we configure the serverl to connect to the database with the password zabbixpassword, which was set when creating the database for zabbix.

And check the following lines:



* the database and username must be zabbix (as we created in MariaDB).

Create a directory to include configuration files (for some reason, it may not be created during installation):

mkdir /etc/zabbix/zabbix_server.conf.d

Starting zabbix-server

We allow autostart of the monitoring server

systemctl enable zabbix-server

After we start the zabbix server itself

systemctl start zabbix-server

Setting up nginx

When installing zabbix-web, the files are copied to the /usr/share/zabbix directory. Our web server works with the /var/www/html directory.

To change it, open nginx config file:

vi /etc/nginx/sites-enabled/default

Edit the root and set $root_path parameters:

root /usr/share/zabbix

location ~ \.php$ {

  set $root_path /usr/share/zabbix;


Restart nginx

systemctl restart nginx

Completion of Zabbix server installation

Open a browser and navigate to http://<server IP address>/ – the Zabbix Web installation page will open.

Select the desired installation language and click on Next Step

If the list of languages does not contain the one we need, set the locales:

dpkg-reconfigure locales

And restart the PHP handler, in our case:

systemctl restart php7.4-fpm

Reload the installation page and select the desired language.

In the next window, we carefully look at the results of checking our web server – on the right we should see everything OK. If this is not the case, check the settings and fix the warnings and errors, then restart the F5 page to re-check the settings.

When all the results are OK, click on Next Step

In the next window, we leave the database connection settings as they are – we additionally enter the password that was set when creating the zabbix user. Then click Next Step:

Enter the password for the Zabbix user

* in our case, the password was zabbixpassword;

In the next window, leave everything as it is:

… and click Next Step.

In the last window, we check the settings and click Next Step.

Installation is completed – click Finish

In the window that opens, enter the Admin login and the password zabbix (by default).

Zabbix agent

As an example, let’s install zabbix agent on our server. We will also set up an encrypted connection between the server and the agent.

Installing and connecting the agent

As we have already installed the repository, the agent is installed with the command:

apt install zabbix agent

Let’s open the configuration file:

vi /etc/zabbix/zabbix_agentd.conf

Edit the following option:


* in this example, we specify the Zabbix server to the agent – we can specify its name or IP address.

We allow autostart of the agent and restart it:

systemctl enable zabbix-agent

systemctl restart zabbix-agent

Go to the server control panel. Open Monitoring – Hosts. We should see a single Zabbix Server node.

And on the right should be the ZBX availability status:

The agent is up and running.

Enable Encryption

To secure data transfer between the server and the agent, set up encryption using the PSK key.

On the agent, open the configuration file:

vi /etc/zabbix/zabbix_agentd.conf

Change 4 options:



TLSPSKIdentity=PSK 001


Generate the key:

openssl rand -hex 32 > /etc/zabbix/agent_key.psk

Let’s see its contents:

cat /etc/zabbix/agent_key.psk

Save because we will need it.

Restarting the agent:

systemctl restart zabbix-agent

Go to the Zabbix web control panel. In the list of Hosts click on our server with the agent installed.

Go to the Encryption tab. We select the connection with PKS, check the box for PSK only, enter the identifier (which was set when configuring the agent in the TLSPSKIdentity parameter), enter the key itself, which was generated in the agent console.

Click Update to apply the settings.

After a couple of minutes, our connection state with the agent should be something like this:

Encryption is set.