Self-host Zabbix
Enterprise-grade infrastructure monitoring covering agents, SNMP, IPMI, JMX and agentless checks, with templates, network auto-discovery, escalation-aware alerting and long-term trend storage. It is a server, a database, a PHP frontend and agents — not a single container you start and forget.
Key facts
Zabbix is the pick when you genuinely need enterprise monitoring: SNMP, IPMI and JMX alongside agents, templates, network auto-discovery, escalation chains, proxies for remote sites and long-term trend storage. It earns all of that at scale, and only at scale. For a handful of servers it is cost without payoff — Beszel gives you the graphs in one command, Uptime Kuma covers endpoints, and neither asks you to stand up a database server, a PHP frontend and a web server before the first chart appears.
What you need
- Any VPS with at least 4096 MB of RAM
- A domain you control — most self-hosted setups need HTTPS in front of them
- About the better part of a day
Install
Run these commands on your server:
# Zabbix — upstream ships packages from its own apt repo, not a one-liner container.
sudo apt install -y mysql-server
. /etc/os-release && wget https://repo.zabbix.com/zabbix/7.4/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest+ubuntu${VERSION_ID}_all.deb
sudo dpkg -i zabbix-release_latest+ubuntu${VERSION_ID}_all.deb && sudo apt update
sudo apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
sudo mysql -e "create database zabbix character set utf8mb4 collate utf8mb4_bin; create user zabbix@localhost identified by 'CHANGEME'; grant all privileges on zabbix.* to zabbix@localhost;"
zcat /usr/share/zabbix/sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
# set DBPassword in /etc/zabbix/zabbix_server.conf, then uncomment the listen
# and server_name lines in /etc/zabbix/nginx.conf before starting anything
sudo systemctl enable --now zabbix-server zabbix-agent nginx
sudo systemctl restart "php*-fpm" # unit name tracks whatever PHP your distro ships
# → http://SERVER_IP:8080 for the frontend setup wizardWhat you take on
Zabbix is the heaviest thing in this category by a wide margin, and the weight is structural rather than incidental:
An alternative to
Head-to-head
More in Monitoring
Common questions
Is Zabbix overkill for a handful of servers?
Usually, yes. It wants a database server, a PHP frontend, a web server and an agent on every host before it shows you a single graph, and its payoff — templates, network auto-discovery, escalation chains, proxies for remote sites — only appears at scale. For three boxes, Beszel or Netdata gets you there in one command.
Can I run Zabbix in Docker?
Yes — upstream publishes official images and Compose files, and the documentation has a whole section on container installs. It is not the easier path, though: the components stay split across separate server, frontend, database and agent images, so you trade package management for orchestration rather than avoiding the complexity.
Which database does Zabbix need?
MySQL, MariaDB, Percona Server or PostgreSQL — and you pick at install time, since the package name encodes it (zabbix-server-mysql versus zabbix-server-pgsql). One constraint catches people out: the Zabbix server and a Zabbix proxy cannot share a database, so give them separate names if they land on the same host.
How much RAM does a Zabbix server need?
More than a container-sized uptime checker, and most of it goes to the database. Upstream's smallest published sizing example is 2 CPU cores and 8 GiB of memory for roughly a thousand monitored metrics. A lab install watching a few hosts runs comfortably in far less, but size it against your metric count, not against Uptime Kuma.