Zabbix has a reputation for being a pain to install. Honestly, most of that reputation comes from guides written for an older Ubuntu that get copy-pasted onto a newer one, and then something small breaks halfway through. A schema import that dies on line 2441. An Apache that refuses to start. A frontend that loads but swears the server isn’t running.
So this post does it properly, on a fresh Ubuntu 26.04 LTS box, start to finish. Zabbix server, a MySQL 8.4 database, the PHP web frontend behind Apache, and Zabbix agent 2 monitoring the server itself. Every command below was run on that machine and every output is what it actually printed, including the two errors you’re likely to hit and how to get past them.
Which Zabbix version to install on Ubuntu 26.04
Quick thing to sort out before typing anything. If you go to the Zabbix download page and pick the newest version, you’ll be looking at Zabbix 8.0 LTS. The catch is that on Ubuntu 26.04, the 8.0 repository package doesn’t give you a stable build yet. Here’s what apt offered after installing the 8.0 release package on this test server:
apt-cache policy zabbix-server-mysql
zabbix-server-mysql:
Installed: (none)
Candidate: 2:8.0.0~rc1-1+ubuntu26.04
Version table:
2:8.0.0~rc1-1+ubuntu26.04 500
500 https://repo.zabbix.com/zabbix/8.0/unstable/ubuntu resolute/main amd64 Packages
2:8.0.0~beta2-1+ubuntu26.04 500
500 https://repo.zabbix.com/zabbix/8.0/unstable/ubuntu resolute/main amd64 Packages
...
1:7.0.22+dfsg-1 500
500 http://pk.archive.ubuntu.com/ubuntu resolute/universe amd64 Packages
Notice the path: 8.0/unstable. That’s a release candidate. Fine for a lab, not something I’d point at production servers.
That leaves three real options:
- Zabbix 7.4 from the official Zabbix repo. Stable, current, and it has proper packages for Ubuntu 26.04 (codename
resolute). This is what the guide uses. - Zabbix 7.0 LTS from Ubuntu’s own universe repo. It works, but it’s Debian’s repackaged build and it lags behind upstream fixes. The Zabbix team doesn’t publish 7.0 packages for 26.04 at all.
- Zabbix 8.0 once it goes stable. The steps in this post carry straight over. You’d just swap
7.4for8.0in the repo URL. Upgrading from 7.4 to 8.0 later is a package upgrade plus an automatic database migration, so starting on 7.4 doesn’t box you in.
What you’re actually installing
“Install Zabbix” really means four pieces that talk to each other:
- Zabbix server (
zabbix_server). The brain. Polls agents, receives data, evaluates triggers, sends alerts. Listens on TCP 10051. - Database (MySQL here). Holds the configuration plus every collected value. This is the part that grows, and the part that ends up deciding how fast Zabbix feels.
- Web frontend (PHP). The UI you click around in. It reads and writes the same database and checks in with the server process. Served by Apache on port 80, with PHP running as PHP-FPM.
- Zabbix agent 2. Runs on each monitored host, including the Zabbix server itself. Listens on TCP 10050.
Everything goes on one box in this guide, which is how most people start and is totally fine up to a few hundred hosts. Splitting the database onto its own server comes later, if ever.
Prerequisites
The test machine for this post:
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 26.04 LTS
Release: 26.04
Codename: resolute
uname -r
7.0.0-27-generic
nproc
2
free -h
total used free shared buff/cache available
Mem: 3.3Gi 1.1Gi 945Mi 11Mi 1.4Gi 2.1Gi
Swap: 3.8Gi 0B 3.8Gi
2 vCPUs and around 3 GB of RAM is plenty for learning and for small environments. You’ll also need:
- A user with sudo rights. If you’re connecting remotely, set up key-based SSH first, it saves a lot of typing.
- Outbound HTTPS to
repo.zabbix.com. - Nothing else already sitting on port 80. If this box runs another site, read the FAQ at the end first.
Step 1: Add the Zabbix 7.4 repository
Zabbix ships a tiny .deb that drops the repo definition and signing key in place. Grab the one built for Ubuntu 26.04:
wget https://repo.zabbix.com/zabbix/7.4/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.4+ubuntu26.04_all.deb
2026-10-04 22:33:11 URL:https://repo.zabbix.com/zabbix/7.4/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.4+ubuntu26.04_all.deb [7984/7984] -> "zabbix-release_latest_7.4+ubuntu26.04_all.deb" [1]
sudo dpkg -i zabbix-release_latest_7.4+ubuntu26.04_all.deb
Selecting previously unselected package zabbix-release.
Preparing to unpack zabbix-release_latest_7.4+ubuntu26.04_all.deb ...
Unpacking zabbix-release (1:7.4-4+ubuntu26.04) ...
Setting up zabbix-release (1:7.4-4+ubuntu26.04) ...
sudo apt update
...
Get:7 https://repo.zabbix.com/zabbix/7.4/stable/ubuntu resolute InRelease [3,941 B]
Get:13 https://repo.zabbix.com/zabbix/7.4/stable/ubuntu resolute/main amd64 Packages [24.1 kB]
Now the check that most guides skip. Ubuntu 26.04 has its own zabbix-server-mysql package in universe, so make sure apt is going to pull from Zabbix and not from Ubuntu:
apt-cache policy zabbix-server-mysql
zabbix-server-mysql:
Installed: (none)
Candidate: 1:7.4.15-1+ubuntu26.04
Version table:
1:7.4.15-1+ubuntu26.04 500
500 https://repo.zabbix.com/zabbix/7.4/stable/ubuntu resolute/main amd64 Packages
Candidate is 7.4.15 from repo.zabbix.com. That’s what you want. If you see 7.0.22+dfsg as the candidate instead, the repo didn’t get added and you should go back and look at the dpkg output.
Step 2: Install the MySQL database server
Ubuntu 26.04 ships MySQL 8.4 LTS, which Zabbix 7.4 supports out of the box. No third-party repo needed:
sudo apt install -y mysql-server
mysql --version
mysql Ver 8.4.11-0ubuntu0.26.04.1 for Linux on x86_64 ((Ubuntu))
systemctl status mysql --no-pager | head -5
● mysql.service - MySQL Community Server
Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled; preset: enabled)
Active: active (running) since Sun 2026-10-04 22:33:56 PKT; 41s ago
MySQL on Ubuntu uses socket authentication for root, so sudo mysql gets you in without a password. If you want a refresher on MySQL basics first, there’s an older walkthrough on installing MySQL on Linux too. MariaDB works as well if you prefer it; the SQL in the next steps is identical.
Step 3: Install Zabbix server, frontend and agent
One command pulls in the server, the PHP frontend, the Apache config, the SQL schema files and agent 2:
sudo apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent2
...
0 upgraded, 47 newly installed, 0 to remove and 364 not upgraded.
...
Setting up zabbix-sql-scripts (1:7.4.15-1+ubuntu26.04)...
Setting up zabbix-agent2 (1:7.4.15-1+ubuntu26.04)...
Created symlink '/etc/systemd/system/multi-user.target.wants/zabbix-agent2.service' → '/usr/lib/systemd/system/zabbix-agent2.service'.
Setting up php8.5-mysql (8.5.4-0ubuntu1.3)...
Setting up php8.5-gd (8.5.4-0ubuntu1.3)...
Setting up php8.5-mbstring (8.5.4-0ubuntu1.3)...
Setting up php8.5-bcmath (8.5.4-0ubuntu1.3)...
Setting up zabbix-server-mysql (1:7.4.15-1+ubuntu26.04)...
Setting up zabbix-frontend-php (1:7.4.15-1+ubuntu26.04)...
Setting up php8.5-fpm (8.5.4-0ubuntu1.3)...
Setting up apache2 (2.4.66-2ubuntu2.4)...
Setting up zabbix-apache-conf (1:7.4.15-1+ubuntu26.04)...
Confirm what landed:
zabbix_server -V | head -1
zabbix_server (Zabbix) 7.4.15
php -v | head -1
PHP 8.5.4 (cli) (built: Sep 2 2026 14:42:18) (NTS)
apache2 -v | head -1
Server version: Apache/2.4.66 (Ubuntu)
Worth noticing in that install log: it’s php8.5-fpm, not the old libapache2-mod-php. The Zabbix packages now run the frontend in its own PHP-FPM pool with its own socket, /var/run/php/zabbix.sock, and Apache hands PHP requests to it. That design is cleaner, and it’s also the reason for the Apache error in step 7. Hold that thought.
About agent plugins: if you’ve seen guides install zabbix-agent2-plugin-mysql or similar, skip it here. Those plugin packages aren’t published for 26.04 in the 7.4 repo yet, and you don’t need them for a working install:
sudo apt install -y zabbix-agent2-plugin-mysql
E: Unable to locate package zabbix-agent2-plugin-mysql
Step 4: Create the Zabbix database and user
Open the MySQL shell:
sudo mysql
Then create the database, the user, and flip one setting the schema import needs:
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'Str0ng-Zbx-Pass!';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;
Use your own password, obviously. A couple of things in there matter more than they look:
utf8mb4_binis not optional. Zabbix checks the collation on startup and the frontend complains loudly if it’s wrong. Fixing it after the fact means converting 200+ tables. Get it right now.log_bin_trust_function_creators = 1is there because the Zabbix schema creates triggers, and MySQL 8.4 has binary logging on by default. Without this flag, the import in the next step blows up. You’ll turn it back off right after.
Quick sanity check that it all took:
sudo mysql -e "SHOW DATABASES LIKE 'zabbix'; SELECT user,host,plugin FROM mysql.user WHERE user='zabbix'; SHOW GLOBAL VARIABLES LIKE 'log_bin_trust%';"
Database (zabbix)
zabbix
user host plugin
zabbix localhost caching_sha2_password
Variable_name Value
log_bin_trust_function_creators ON
If you want more background on MySQL users and grants in general, see creating a MySQL user and granting permissions.
Step 5: Import the initial schema and data
The schema ships compressed in the zabbix-sql-scripts package:
ls -l /usr/share/zabbix/sql-scripts/mysql/
total 4428
drwxr-xr-x 2 root root 4096 Oct 4 22:35 option-patches
-rw-r--r-- 1 root root 202776 Sep 22 18:08 proxy.sql
-rw-r--r-- 1 root root 4324879 Sep 22 18:09 server.sql.gz
Pipe it into the new database as the zabbix user. It’ll prompt for the password you set in step 4:
zcat /usr/share/zabbix/sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
Enter password:
Then it sits there with no output. That’s normal. On this 2-core VM it took 46 seconds. Don’t Ctrl+C it thinking it hung; a half-imported schema is more annoying to clean up than waiting a minute.
Once it returns, switch the trust flag back off. It was only needed for the import:
sudo mysql -e "set global log_bin_trust_function_creators = 0;"
And confirm the import really finished:
sudo mysql -e "SELECT COUNT(*) AS tables FROM information_schema.tables WHERE table_schema='zabbix'; SELECT mandatory,optional FROM zabbix.dbversion; SELECT username FROM zabbix.users;"
tables
207
mandatory optional
7040000 7040011
username
Admin
guest
207 tables, a 7.4 schema version, and the default Admin account exists. Good.
If the import fails with ERROR 1419
This is the single most common Zabbix-on-MySQL failure, so I reproduced it on purpose with a throwaway database and the trust flag left off:
sudo mysql -e "SHOW GLOBAL VARIABLES LIKE 'log_bin';"
Variable_name Value
log_bin ON
zcat /usr/share/zabbix/sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zbxtest
ERROR 1419 (HY000) at line 2441: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
Line 2441 is where the schema starts creating triggers. Everything before it got imported, everything after didn’t. The fix: drop the database, recreate it (same create database line as step 4), set log_bin_trust_function_creators = 1, and run the import again from scratch. Don’t try to resume it.
Step 6: Point the Zabbix server at the database
The server config already has DBName and DBUser set to zabbix. The only thing missing is the password:
sudo nano /etc/zabbix/zabbix_server.conf
Find the commented-out DBPassword line (it’s around line 124) and set it:
DBPassword=Str0ng-Zbx-Pass!
Check the result:
grep -nE '^DB' /etc/zabbix/zabbix_server.conf
100:DBName=zabbix
116:DBUser=zabbix
124:DBPassword=Str0ng-Zbx-Pass!
DBHost stays commented out, which means localhost over the Unix socket. That’s the fastest option when the database lives on the same box. If nano isn’t your thing, any editor works.
Step 7: Enable proxy_fcgi so Apache actually starts
Here’s where a lot of people get stuck on Ubuntu 26.04. Restart everything the way most guides tell you to, and Apache falls over:
sudo systemctl restart zabbix-server zabbix-agent2 apache2 php8.5-fpm
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xeu apache2.service" for details.
apache2ctl configtest tells you exactly why:
sudo apache2ctl configtest
AH00526: Syntax error on line 7 of /etc/apache2/conf-enabled/zabbix.conf:
Invalid command 'ProxyTimeout', perhaps misspelled or defined by a module not included in the server configuration
Remember the PHP-FPM socket from step 3? The zabbix.conf that ships with zabbix-apache-conf uses ProxyTimeout and a SetHandler "proxy:unix:/var/run/php/zabbix.sock|fcgi://localhost" line to send PHP to that socket. Both need Apache’s proxy modules, and a fresh Apache install on Ubuntu doesn’t enable them:
a2query -m proxy_fcgi
No module matches proxy_fcgi
One command fixes it, and it pulls in mod_proxy as a dependency automatically:
sudo a2enmod proxy_fcgi
Considering dependency proxy for proxy_fcgi:
Enabling module proxy.
Enabling module proxy_fcgi.
To activate the new configuration, you need to run:
systemctl restart apache2
sudo apache2ctl configtest
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
sudo systemctl restart apache2 && systemctl is-active apache2
active
The AH00558 line is just a warning about the hostname and doesn’t stop anything. If it bugs you, add ServerName your.server.name to /etc/apache2/apache2.conf.
Now the frontend answers:
curl -sI http://localhost/zabbix/
HTTP/1.1 302 Found
Date: Sun, 04 Oct 2026 17:37:59 GMT
Server: Apache/2.4.66 (Ubuntu)
Location: setup.php
Content-Type: text/html; charset=UTF-8
A redirect to setup.php is exactly right. That’s the web installer waiting for you. (If you’d rather run the frontend behind nginx, install zabbix-nginx-conf instead of zabbix-apache-conf. The nginx vs Apache comparison covers the tradeoffs, though for a Zabbix UI either is fine.)
Step 8: Start and enable the services
Restart the server and agent so they pick up the new config, and enable everything so it survives a reboot:
sudo systemctl restart zabbix-server zabbix-agent2 apache2 php8.5-fpm
sudo systemctl enable zabbix-server zabbix-agent2 apache2 php8.5-fpm
Synchronizing state of zabbix-server.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable zabbix-server
...
Created symlink '/etc/systemd/system/multi-user.target.wants/zabbix-server.service' → '/usr/lib/systemd/system/zabbix-server.service'.
Notice that only zabbix-server got a new symlink. The agent, Apache and PHP-FPM were already enabled by their packages; the server deliberately isn’t, because it can’t start until you’ve given it a database. If systemd is still a bit of a black box, the systemd service management guide explains what enable is actually doing there.
Check the server log to make sure it connected to MySQL:
sudo grep -E "Starting Zabbix Server|current database version|server #0 started" /var/log/zabbix/zabbix_server.log
19847:20261004:223742.263 Starting Zabbix Server. Zabbix 7.4.15 (revision bd350f540cd).
19847:20261004:223742.341 current database version (mandatory/optional): 07040000/07040011
19847:20261004:223742.419 server #0 started [main process]
If the database password were wrong, you’d see an access denied error in this exact spot instead.
Step 9: Open the firewall ports
If UFW is active on your server, let in the web UI and the two Zabbix ports:
sudo ufw allow 80/tcp
Rules updated
Rules updated (v6)
sudo ufw allow 10050/tcp
Rules updated
Rules updated (v6)
sudo ufw allow 10051/tcp
Rules updated
Rules updated (v6)
Port 10051 matters once remote agents start sending active checks to this server. 10050 matters if another Zabbix server or proxy needs to poll this box. And please don’t open 3306; MySQL only needs to listen on localhost here, and by default it does. The Linux server hardening checklist goes further on locking a box like this down.
Step 10: Run the Zabbix web setup wizard
Open http://your-server-ip/zabbix in a browser. You’ll land on the welcome screen. Pick a language and hit Next step.
Check of pre-requisites. Every row should say OK. The Zabbix PHP-FPM pool already sets memory_limit, post_max_size, max_execution_time and friends to what Zabbix wants, so there’s nothing to tweak in php.ini on a fresh install.

Configure DB connection. Database type MySQL, host localhost, port 0 (means default), database name zabbix, user zabbix, and the password from step 4. Leave credential storage on plain text unless you already run HashiCorp Vault or CyberArk.

Settings. Give the server a name (it shows up in the top-left of the UI and in browser tabs, handy when you run more than one). Then look closely at the time zone.

See how it says System: (UTC+00:00) UTC? This server’s clock is actually set to Asia/Karachi:
timedatectl | grep "Time zone"
Time zone: Asia/Karachi (PKT, +0500)
“System” here means PHP’s idea of the system time zone, and PHP-FPM has no date.timezone set, so it falls back to UTC. Pick your real zone from the dropdown rather than leaving it on System, or graphs and problem timestamps for every user without a personal time zone will be off by a few hours. Each user can still override it in their profile later.
Pre-installation summary is a read-back of everything you entered. Click through, and on the final screen you should get this:

The wizard wrote its settings to /etc/zabbix/web/zabbix.conf.php, readable only by the web server user since it contains the DB password:
ls -l /etc/zabbix/web/zabbix.conf.php
-rw------- 1 www-data www-data 1985 Oct 4 22:40 /etc/zabbix/web/zabbix.conf.php
Step 11: Log in and change the default password
Click Finish and sign in with the default credentials:
- Username:
Admin(capital A, it’s case-sensitive) - Password:
zabbix
Before you do anything else, change that password. Go to User settings > Profile > Change password. Everyone on the internet knows Admin/zabbix, and a Zabbix server can run scripts on every host it monitors, so it’s a juicy target. If the UI will ever be reachable from outside your LAN, put it behind HTTPS too. The Let’s Encrypt and Certbot guide walks through getting a certificate, and certbot --apache handles this exact setup.
Troubleshooting the first few minutes
The server log is full of “became not supported”
Right after the first start, zabbix_server.log looks alarming:
sudo tail -n 8 /var/log/zabbix/zabbix_server.log
19904:20261004:223758.301 item "Zabbix server:zabbix[process,report writer,avg,busy]" became not supported: No "report writer" processes started.
19904:20261004:223759.313 item "Zabbix server:zabbix[process,report manager,avg,busy]" became not supported: No "report manager" processes started.
19967:20261004:223804.246 resuming Zabbix agent checks on host "Zabbix server": connection restored
19904:20261004:223828.354 item "Zabbix server:zabbix[connector_queue]" became not supported: connector is not initialized: please check "StartConnectors" configuration parameter
19904:20261004:223841.394 item "Zabbix server:zabbix[process,ipmi poller,avg,busy]" became not supported: No "ipmi poller" processes started.
19904:20261004:223842.404 item "Zabbix server:zabbix[process,java poller,avg,busy]" became not supported: No "java poller" processes started.
Ignore it. The “Zabbix server health” template tries to measure every kind of internal process, including ones that are off by default (Java pollers, IPMI pollers, report writers, connectors). Those items just get marked unsupported. The line that actually matters is connection restored: the server reached its own agent. You’ll see the “11 not supported” count on the dashboard for the same reason.
“Zabbix server is not running” banner in the UI
The frontend talks to the server on port 10051. If you see this banner, check in this order: systemctl status zabbix-server, then the server log for a database error, then ss -tlnp | grep 10051. Nine times out of ten it’s a typo in DBPassword. The journalctl commands guide helps if the service is crash-looping and you need the full history.
Apache won’t start or PHP files download instead of running
That’s step 7. sudo a2enmod proxy_fcgi, then restart Apache. Also check that php8.5-fpm is running, because if the socket at /var/run/php/zabbix.sock doesn’t exist, Apache returns a 503.
Setup confirmation
Time to prove the whole stack is up, from the services down to real data showing in the UI.
All five services running, and all five set to start on boot:
systemctl is-active zabbix-server zabbix-agent2 mysql apache2 php8.5-fpm
active
active
active
active
active
systemctl is-enabled zabbix-server zabbix-agent2 mysql apache2 php8.5-fpm
enabled
enabled
enabled
enabled
enabled
The server process with its workers:
systemctl status zabbix-server --no-pager
● zabbix-server.service - Zabbix Server
Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; enabled; preset: enabled)
Active: active (running) since Sun 2026-10-04 22:37:42 PKT; 3min 59s ago
Invocation: b776d2a7fa5a4b01a7399b0df5a4ca19
Main PID: 19847 (zabbix_server)
Tasks: 77 (limit: 1582)
Memory: 77.2M (peak: 78.3M)
CPU: 2.539s
CGroup: /system.slice/zabbix-server.service
├─19847 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
├─19851 "/usr/sbin/zabbix_server: ha manager"
├─19853 "/usr/sbin/zabbix_server: service manager #1 [processed 0 events, ...]"
Every port listening where it should. MySQL on localhost only, the rest on all interfaces (the zabbix_server line is trimmed, it lists about fifty worker PIDs):
sudo ss -tlnp | grep -E ':10050|:10051|:80 |:3306 '
LISTEN 127.0.0.1:3306 users:(("mysqld",pid=6044,fd=24))
LISTEN 0.0.0.0:10051 users:(("zabbix_server",pid=19974,fd=10),...)
LISTEN *:80 users:(("apache2",pid=20063,fd=4),...)
LISTEN *:10050 users:(("zabbix_agent2",pid=19868,fd=7))
Not sure how to read that? The ss command guide breaks the columns down.
The agent answers its own test checks:
zabbix_agent2 -t agent.ping
agent.ping [s|1]
zabbix_agent2 -t system.uptime
system.uptime [s|3548]
And the frontend API responds with the right version, which proves Apache, PHP-FPM and the database connection all work together:
curl -s -X POST -H 'Content-Type: application/json-rpc'
-d '{"jsonrpc":"2.0","method":"apiinfo.version","params":{},"id":1}'
http://localhost/zabbix/api_jsonrpc.php
{"jsonrpc":"2.0","result":"7.4.15","id":1}
Now the UI. After logging in, the Global view dashboard shows Zabbix server is running: Yes, server and frontend both on 7.4.15, one host available, and live CPU and memory numbers already coming in:

Under Data collection > Hosts, the built-in “Zabbix server” host has a green ZBX badge. Green means the server is successfully polling agent 2 on 127.0.0.1:10050, with 128 items and 73 triggers from the “Linux by Zabbix agent” and “Zabbix server health” templates:

For the record, the whole stack idles at about 2 GB of RAM used on this 3.3 GB VM, and the fresh database takes 211 MB on disk:
free -h
total used free shared buff/cache available
Mem: 3.3Gi 2.0Gi 203Mi 37Mi 1.3Gi 1.3Gi
sudo du -sh /var/lib/mysql/zabbix
211M /var/lib/mysql/zabbix
That 211 MB is the number to keep an eye on. It’s mostly empty history tables right now, and it will grow with every host and item you add. Monitoring your Zabbix server’s own disk is exactly the kind of thing the Linux system monitoring guide is about, just from the command line side.
Frequently asked questions
Can I install Zabbix 8.0 LTS on Ubuntu 26.04 instead?
As of this writing, only as a release candidate. The 8.0 release package for Ubuntu 26.04 points apt at repo.zabbix.com/zabbix/8.0/unstable, and the newest server build there is 8.0.0~rc1. Once 8.0 goes stable, the steps in this post work as-is with 7.4 swapped for 8.0 in the repo URL. If you install 7.4 now, you can upgrade later by installing the 8.0 release package and running apt upgrade; the server migrates the database schema on first start.
Should I use MySQL or PostgreSQL for Zabbix?
Either works well. MySQL (or MariaDB) is what most guides and most Zabbix installs use, so help is easier to find. PostgreSQL is a strong choice if you plan to add the TimescaleDB extension for history compression on a large install. For a first server or anything under a few hundred hosts, pick whichever database you already know how to back up and restore. That counts for more than the engine.
How much RAM and CPU does a Zabbix server need?
For learning or a small network, 2 vCPUs and 2 to 4 GB of RAM is fine. This test server ran the full stack with about 2 GB used. As you grow, the database is what needs resources first, mostly RAM for the InnoDB buffer pool and fast disk for history writes. The Zabbix server process itself stays fairly light.
What’s the default Zabbix username and password?
Admin and zabbix. The username is case-sensitive, so admin in lowercase won’t work. Change the password immediately after the first login.
Can I run the Zabbix frontend on a server that already hosts other websites?
Yes. The zabbix-apache-conf package doesn’t take over the default site; it adds an Alias /zabbix in /etc/apache2/conf-enabled/zabbix.conf, so Zabbix lives at /zabbix on whatever virtual hosts Apache already serves. PHP runs in its own FPM pool, so it doesn’t collide with other PHP apps either. If you’d rather give Zabbix its own hostname, move that config into a dedicated virtual host.
Is Zabbix agent or agent 2 better?
Agent 2 for new installs. It’s written in Go, supports plugins for things like Docker, MySQL and PostgreSQL, and handles concurrent checks better. The classic agent is still supported and lighter, which can matter on tiny or very old systems. Both speak the same protocol on port 10050, so the server doesn’t care which one a host runs.
How does Zabbix compare to Nagios?
Nagios is check-and-alert at its core: a check runs, it’s OK or it isn’t. Zabbix stores every value it collects, so you get graphs, trends and history out of the box, plus templates, auto-discovery and a full web UI for configuration. If you’ve run Nagios before (there’s an older guide to installing Nagios Core on Ubuntu here), Zabbix will feel heavier to set up, and then a lot less fiddly to live with.

