1 Im ersten Teil der Serie habe ich erklärt, warum ich bei Zabbix gelandet bin. Jetzt wird installiert. Ziel dieses Artikels ist ein Zabbix-Server, der am Ende so läuft wie meiner: PostgreSQL als Datenbank, nginx als Webserver, HTTPS mit Let’s Encrypt, eine Firewall davor und die Telegram-Anbindung vorbereitet. Ich installiere auf einem kleinen Hetzner-VPS mit 2 Kernen, 4 GB RAM und 40 GB Platte. Das reicht locker für 50 bis 100 Hosts. Das Betriebssystem ist Ubuntu 24.04 LTS, die Befehle funktionieren identisch auf Ubuntu 26.04 und mit minimalen Anpassungen auf Debian 12 und 13. Zabbix im Homelab, die Serie:Zabbix vs. Uptime Kuma vs. CheckmkZabbix installieren auf Ubuntu (dieser Artikel)Zabbix Agent 2 installieren (erscheint in Kürze)Telegram-Benachrichtigungen (erscheint in Kürze)Dashboard bauen (erscheint in Kürze)UniFi per SNMP (erscheint in Kürze)Zabbix Proxy (erscheint in Kürze)Proxmox überwachen (erscheint in Kürze)Websites und SSL (erscheint in Kürze) Welche Version? Zabbix hat zwei Schienen: LTS-Versionen mit fünf Jahren Support (7.0, demnächst 8.0) und Zwischenversionen mit kurzem Support (7.2, 7.4). Ich nutze 7.4, weil sie die neuesten Dashboard-Widgets und Templates mitbringt. Wer einmal installieren und dann in Ruhe lassen will, nimmt 7.0 LTS. Die Befehle unten sind für 7.4, die Versionsnummer in der Repository-URL ist die einzige Stelle, die man ändern muss. Ein Hinweis zu 8.0: Zum Zeitpunkt, an dem ich das schreibe, gibt es 8.0 nur als Release Candidate. Ich habe es kurz ausprobiert und wieder entfernt. Für Monitoring will ich keine Vorabversion. Voraussetzungen Ein frisches Ubuntu 24.04 oder 26.04, root oder sudo Ein DNS-Name, der auf den Server zeigt (für das Zertifikat), bei mir zabbix.example.de Port 80 und 443 müssen von außen erreichbar sein, zumindest für die Zertifikatsausstellung Schritt 1: Repository einbinden Zabbix liefert eigene Pakete, die Ubuntu-eigenen sind veraltet. wget https://repo.zabbix.com/zabbix/7.4/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.4+ubuntu24.04_all.deb sudo dpkg -i zabbix-release_latest_7.4+ubuntu24.04_all.deb sudo apt update Für Ubuntu 26.04 heißt die Datei zabbix-release_latest_7.4+ubuntu26.04_all.deb, für Debian 12 zabbix-release_latest_7.4+debian12_all.deb. Die Dateinamen stehen unter https://repo.zabbix.com/zabbix/7.4/release/. Schritt 2: PostgreSQL installieren Zabbix kann MySQL oder PostgreSQL. Ich nehme PostgreSQL, weil es mit den großen History-Tabellen besser umgeht und weil die Zabbix-Entwickler selbst darauf setzen. Ubuntu 24.04 bringt PostgreSQL 16 mit, das ist offiziell unterstützt. Ich habe 18 im Einsatz, das läuft ebenfalls, wird aber von Zabbix 7.4 nicht offiziell freigegeben. sudo apt install postgresql Datenbank und Benutzer anlegen. Das Passwort merken, es kommt gleich in zwei Konfigurationsdateien. sudo -u postgres psql -c "CREATE USER zabbix WITH PASSWORD 'hier-ein-langes-passwort';" sudo -u postgres createdb -O zabbix zabbix Schritt 3: Zabbix-Pakete installieren sudo apt install zabbix-server-pgsql zabbix-frontend-php php-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2 Das installiert den Server, das Web-Frontend, die nginx-Konfiguration, PHP-FPM und den Agent 2 für den Server selbst. Den Agent braucht man, damit Zabbix sich selbst überwacht. Jetzt das Datenbankschema einspielen. Das dauert eine Minute. zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix Falls das mit einem Berechtigungsfehler scheitert, weil der Systembenutzer zabbix keinen Peer-Login auf die Datenbank hat, geht es über TCP: zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | PGPASSWORD='hier-ein-langes-passwort' psql -h 127.0.0.1 -U zabbix zabbix Schritt 4: Server konfigurieren In /etc/zabbix/zabbix_server.conf zwei Zeilen setzen: DBHost=127.0.0.1 DBPassword=hier-ein-langes-passwort Die Zeile DBPassword ist auskommentiert, das # muss weg. Alles andere kann auf Standard bleiben. Wer später viele SNMP-Geräte hat, erhöht StartPollers und StartDiscoverers, aber nicht jetzt. Schritt 5: nginx und PHP Die Paketinstallation legt /etc/zabbix/nginx.conf an, aber alles ist auskommentiert. Zwei Zeilen aktivieren: listen 80; server_name zabbix.example.de; Die nginx-Default-Site weg, sonst konkurrieren zwei Server um Port 80: sudo rm /etc/nginx/sites-enabled/default Zeitzone für PHP, sonst zeigt das Frontend alle Zeiten in UTC. Ans Ende von /etc/zabbix/php-fpm.conf: php_value[date.timezone] = Europe/Berlin Dienste starten und beim Boot aktivieren. Die PHP-Version im Dienstnamen anpassen (php8.3-fpm auf Ubuntu 24.04, php8.5-fpm auf 26.04): sudo systemctl enable --now zabbix-server zabbix-agent2 nginx php8.3-fpm sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.3-fpm Jetzt http://zabbix.example.de aufrufen. Es erscheint der Setup-Wizard des Frontends: Sprache, Voraussetzungen-Check, Datenbankverbindung (Host 127.0.0.1, Port 5432, Datenbank zabbix, Benutzer zabbix, das Passwort), Servername, Zeitzone, Theme. Am Ende schreibt der Wizard /etc/zabbix/web/zabbix.conf.php. Der Zabbix Default Login ist Admin mit Passwort zabbix. Das große A ist wichtig. Dieses Passwort ändern wir in Schritt 7, bevor der Server von außen erreichbar wird. Nach dem Login landet man auf dem Standard-Dashboard. Der Server überwacht sich bereits selbst. Hostnamen, Domains und IP-Adressen sind unkenntlich gemacht. Schritt 6: HTTPS mit Let’s Encrypt Ein Monitoring-Login ohne TLS ins Internet zu stellen, geht nicht. Certbot holt das Zertifikat, nginx bekommt einen HTTPS-Block. sudo apt install certbot sudo certbot certonly --webroot -w /var/www/html -d zabbix.example.de Dafür muss nginx eine Location für die ACME-Challenge haben. Ich lege eine eigene Datei /etc/nginx/conf.d/zabbix-http.conf an, die HTTP nur noch für Certbot bedient und alles andere auf HTTPS umleitet: server { listen 80 default_server; server_name zabbix.example.de; location /.well-known/acme-challenge/ { root /var/www/html; } location / { return 301 https://zabbix.example.de$request_uri; } } In /etc/zabbix/nginx.conf wird aus listen 80;: listen 443 ssl; http2 on; ssl_certificate /etc/letsencrypt/live/zabbix.example.de/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/zabbix.example.de/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; add_header Strict-Transport-Security "max-age=31536000" always; Wichtig: Erst das Zertifikat holen, dann die HTTPS-Konfiguration aktivieren. Umgekehrt startet nginx nicht, weil die Zertifikatsdateien fehlen. Genau diesen Fehler habe ich beim ersten Versuch gemacht. sudo nginx -t && sudo systemctl reload nginx Certbot richtet einen Timer für die Verlängerung ein. Damit nginx das neue Zertifikat auch lädt, ein Hook: echo -e '#!/bin/sh\nsystemctl reload nginx' | sudo tee /etc/letsencrypt/renewal-hooks/deploy/nginx.sh sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/nginx.sh Schritt 7: Admin-Passwort und Firewall Im Frontend unter Users → Users → Admin ein eigenes Passwort setzen. Zabbix sperrt nach fünf Fehlversuchen für 30 Sekunden, mehr Schutz gibt es nicht. Wer den Server öffentlich betreibt, sollte zusätzlich die Zwei-Faktor-Authentifizierung aktivieren (Users → Authentication → MFA settings, TOTP). Die Firewall. Ich nutze nftables, weil es auf Ubuntu ohnehin da ist. /etc/nftables.conf: flush ruleset table inet filter { chain input { type filter hook input priority 0; policy drop; iif lo accept ct state established,related accept tcp dport { 22, 80, 443, 10051 } accept ip protocol icmp accept icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, nd-neighbor-solicit, nd-neighbor-advert } accept } chain forward { type filter hook forward priority 0; policy drop; } chain output { type filter hook output priority 0; policy accept; } } Port 10051 ist der Server-Port, auf dem sich aktive Agents und Proxys melden. Der muss offen sein, wenn Agents außerhalb des eigenen Netzes stehen. Port 10050 (Agent) bleibt zu, der Server fragt seinen eigenen Agent über localhost. sudo systemctl enable --now nftables sudo nft -f /etc/nftables.conf Bei mir ist SSH zusätzlich auf Tailscale beschränkt, deshalb fehlt Port 22 in meiner echten Konfiguration. Wer kein VPN hat, lässt 22 drin. Schritt 8: Funktionskontrolle Drei Dinge prüfen: sudo systemctl status zabbix-server sudo tail -n 20 /var/log/zabbix/zabbix_server.log Im Log sollte „server #0 started“ stehen und keine Zeile mit „cannot“. Im Frontend unter Monitoring → Hosts muss „Zabbix server“ mit grünem ZBX-Symbol stehen. Ist es rot oder grau, erreicht der Server seinen eigenen Agent nicht, meist weil der Agent nicht gestartet ist. Die API funktioniert, wenn folgender Aufruf die Version liefert: curl -s -H 'Content-Type: application/json-rpc' \ -d '{"jsonrpc":"2.0","method":"apiinfo.version","params":[],"id":1}' \ https://zabbix.example.de/api_jsonrpc.php Die API wird in den nächsten Teilen wichtig. Ich habe praktisch alles, was ich in Zabbix gebaut habe, über die API gemacht, weil Klicken bei 60 Hosts keinen Spaß macht. Stolpersteine, die mir passiert sind nginx startet nach dem Reboot nicht. Wenn nginx auf eine IP bindet, die beim Boot noch nicht existiert (bei mir die Tailscale-IP), scheitert der Start. Lösung: net.ipv4.ip_nonlocal_bind = 1 in /etc/sysctl.d/90-nginx.conf und ein systemd-Drop-in mit After=tailscaled.service. Die Datenbankversion wird nicht unterstützt. Zabbix 7.4 meckert bei PostgreSQL 18 im Log, läuft aber. Wer auf Nummer sicher gehen will, bleibt bei PostgreSQL 16. Das Frontend zeigt „Zabbix server is not running“. Fast immer ein Datenbankproblem. DBPassword in der Serverkonfiguration prüfen und ob PostgreSQL auf 127.0.0.1 lauscht. Zu viele Meldungen am ersten Tag. Das Linux-Template meldet jede Paketänderung, jeden Neustart eines Dienstes und jede Platte über 80 Prozent. Das ist gewollt, aber man muss es zähmen. Dazu später in der Serie. Was jetzt fehlt Der Server läuft, überwacht sich selbst und ist von außen erreichbar. Nützlich wird er erst mit Hosts. Im nächsten Teil installieren wir den Zabbix Agent 2 auf Ubuntu, Debian, Proxmox und in Docker, inklusive verschlüsselter Verbindung über das Internet. Vorheriger Beitrag flexi Xtreme L im Test: 8-m-Rollleine mit Soft-Stop-Dämpfer – gut für den Hund, schlecht fürs Zupfen You may also like Was ist Wazuh? Das Open-Source-SIEM im Homelab und wie es Zabbix ergänzt Oktober 25, 2026 Ist der Weiße Schäferhund intelligent? Meine Hündin hat nachts an der Wohnungstür... Oktober 24, 2026 Zabbix vs. Uptime Kuma vs. Checkmk: Welches Monitoring passt ins Homelab? Oktober 23, 2026 Überwachungskamera mit Akku und Daueraufnahme: Was AOV kann – und was die... Oktober 22, 2026 Blutohr beim Hund: Helis Geschichte, Behandlung und was ich heute anders machen... Oktober 21, 2026 Pi-hole-Update schließt Root-Lücke: Manipulierte PID-Datei schmuggelt Befehle ein Oktober 20, 2026 Hinterlasse einen Kommentar Cancel Reply Save my name, email, and website in this browser for the next time I comment.