In 2021 had ik al eens een blog gedeeld over mijn bloed-zweet-en-tranen werkzaamheden om Zabbix online werkend te krijgen. Die containers hebben niet echt (goed) gedraaid, ik heb niets met de inrichting gedaan en omdat ik 2025 met het goede voornemen ben gestart om elke week 1 uur met Zabbix aan de slag te gaan, ga ik in dit blog stap-voor-stap doorlopen wat je moet doen. Want online kon ik (niet heel snel) een handleiding vinden om dat te doen. Dan doe ik het niet alleen voor jou, de lezer, maar ook voor mezelf als ik later eens wat moet herstellen of een vergelijkbare installatie op een andere server (of op mijn laptop) uit moet voeren.
Waarom Zabbix draaien?
Ik ben met dit artikel gestart op 17 februari 2025, inmiddels zijn we 10 november 2025. Tijd om dit af te maken!
Voorwaarden:
Je hebt een VPS of ander type omgeving waar je Docker containers kunt draaien. Je kunt met SSH verbinden met die omgeving, zodat je in de terminal alle statements uit kunt voeren. Mijn VPS draait op AlmaLinux. Mocht je ook jouw systeem om willen zetten naar AlmaLinux, mogelijk dat mijn blogpost over de update je daarbij kan helpen. Je hebt een Plesk beheeromgeving, waarin "Docker" al beschikbaar is en je kunt daar via phpmyadmin (of andere tool) MariaDB databases aanmaken.
Stap 1: begin met een schone omgeving.
Ik had nog een paar containers en images van de vorige keer. De containers kon ik via de interface in Plesk verwijderen, images hadden mogelijk ook gekund, maar heb ik via de SSH-terminal uitgevoerd;
docker images
docker rmi -f [imagename]:[tag]
Stap 2: maak een MariaDB database aan op jouw VPS
Je zou dit mogelijk ook met een eigen Docker container kunnen doen. Maar mogelijk wil ik zelf ook nog een losse site draaien die nog iets met de data van Zabbix gaat doen. En dan is het "handig" dat je er bij kunt. Maak een database met de naam zabbix aan. Ik heb ook een gebruiker zabbix aangemaakt met een moeilijk wachtwoord.
Stap 3: installeer de images/containers
Pak de pagina van Zabbix erbij over Docker containers.
We beginnen met het aanmaken van de zabbix-server container.
docker pull zabbix/zabbix-server-mysql:latest
Hierna ga je in Plesk naar Docker en daar maak je een nieuwe container aan op basis van deze zabbix/zabbix-server-mysql.
Vervolgens kom je in het scherm waar je de omgevingsvariabelen in kunt stellen. Bepaalde waardes zijn al ingevuld, zo zie ik dat ZBX_VERSION op 7.4.5 staat, inderdaad de meest recente versie, cool!
Voor "mijn configuratie" heb ik onderstaande toegevoegd, waarschijnlijk zul je voor jouw configuratie dit ook moeten doen:
ZBX_DB_NAME staat op dummy_db_name, aangepast naar zabbixDB_SERVER_HOST, toegevoegd en ingesteld op het IP van de server waar we de database aangemaakt hebben.
MYSQL_USER zabbix
MYSQL_PASSWORD het-moeilijk-te-raden-wachtwoord
MYSQL_DATABASE zabbix
Mocht je willen weten welke eigenschappen er nog meer zijn, op deze pagina kun je dat bekijken.
Na het bevestigen start de container op. Ik heb phpmyadmin open, dus ik kan zien dat de tabellen aangemaakt worden, dat gaat goed. Maar daarna krijg ik een foutmelding:
Unable to start Zabbix server due to unsupported MariaDB database version (10.04.34).
Must be at least (10.05.00).
Use of supported database version is highly recommended.
Override by setting AllowUnsupportedDBVersions=1 in Zabbix server configuration file at your own risk.
Nu heb ik ooit eerder bij een omgeving MariaDB geupdate, maar toen liep alles in de soep. Plesk maakt namelijk ook gebruik van MariaDB en die kon er toen niet mee om gaan. Enige optie was toen om een back-up terug te zetten.
Dus ik heb deze instelling maar toegevoegd aan de omgevingsvariabelen:
ZBX_ALLOWUNSUPPORTEDDBVERSIONS 1
Hiermee start de container zonder problemen op, dus we hebben een "Zabbix Server"!
Tijd voor de web-interface om er wat mee te doen.
docker pull zabbix/zabbix-web-apache-mysql:latest
Hierna ga je in Plesk naar Docker en daar maak je een nieuwe container aan op basis van deze zabbix/zabbix-web-apache-mysql.
Vervolgens kom je in het scherm waar je de omgevingsvariabelen in kunt stellen. Bepaalde waardes zijn al ingevuld.
Voor "mijn configuratie" heb ik onderstaande toegevoegd, waarschijnlijk zul je voor jouw configuratie dit ook moeten doen:
MYSQL_USER zabbix
MYSQL_PASSWORD het-moeilijk-te-raden-wachtwoord
MYSQL_DATABASE zabbix
ZBX_SERVER_HOST IP van de server waar we de database aangemaakt hebben
ZBX_SERVER_NAME een naam (deze verschijnt rechts in je inlogscherm, anders zie je daar iets van "docker" staan)
Ook heb ik "automatic portmapping" uitgeschakeld. Anders krijg je elke keer als je de container herstart een nieuwe poort toegewezen, dat is heel onhandig. We moeten namelijk in nginx instellen dat een bepaalde domeinnaam (zabbix.server.nl) doorverwijst naar localhost:poort. Die poort moet dus een vaste waarde zijn. Ik heb 8080 laten doorverwijzen naar 32773 en 8443 naar 32772. Mocht je nog meer willen instellen (zoals die ZBX_SERVER_NAME), de informatie kun je hier vinden.
De container start op, alleen kan ik er nu nog niet bij. Je kunt het testen door in je SSH sessie een curl http://localhost:32773 uit te voeren, je zou dan het inlogscherm moeten zien.
Stap 4: maak de zabbix-web-apache-mysql container bereikbaar vanaf het internet
De boel draait, maar je kunt er nog niets mee. Maak in Plesk een nieuw subdomein aan, bijvoorbeeld zabbix.jouwdomein.nl.
Ga vervolgens in Plesk naar Hosting & DNS, dan naar Apache & nginx. Haal het vinkje weg bij proxy mode en sla de instellingen op. Ga daarna nogmaals naar deze instellingen en voeg het onderstaande toe in het veld additional nginx directives en sla dit op:
location /{
proxy_pass http://127.0.0.1:32773;
proxy_http_version 1.1;
}
Als je nu in je browser naar jouw subdomein gaat zou je het inlogscherm moeten zien. Als dat niet het geval is, zul je zelf moeten onderzoeken wat er aan de hand is.
Vervolgens log je in (met de standaard-credentials, dus username Admin en wachtwoord zabbix). Alleen, ik kreeg daarna een 404-pagina te zien, dat kwam doordat er een .php pagina aangeroepen werd.
Het duurde even, maar na verloop van tijd begon bij mij een lampje te branden. Omdat standaard PHP actief is op het door jou aangemaakte subdomein, worden verzoeken naar PHP-pagina's eerst door die module afgevangen en bereikt het nooit nginx. Ga in je Plesk dashboard naar PHP (onder Dev Tools) en haal het vinkje weg bij PHP Support. Nu zal het wel goed gaan!
Stap 5: maak vanuit je zabbix-web-apache-mysql container verbinding met je zabbix-server-mysql container
Hierna kan ik succesvol inloggen. Na het meteen aanpassen van gebruikersnaam/wachtwoord (direct doen!), zie ik dat er geen verbinding gemaakt kan worden met de Zabbix Server. Dat was eigenlijk ook wel te verwachten.
Bij stap 3 had ik ZBX_SERVER_HOST ingesteld op het IP van de server, maar het moet het "interne IP" zijn van de zabbix-server-mysql container. In SSH doe je een docker ps waarmee je alle draaiende containers kunt zien. Het gaat ons om de zabbix-server-mysql. Het eerste veld is het CONTAINER ID, die heb je nodig. Want vervolgens voer je uit docker inspect CONTAINER ID
Je ziet in de JSON die aangeleverd wordt een veld "IPAddress". In mijn geval is dat 172.17.0.3
Dat is dus het IP-adres wat je moet invullen bij ZBX_SERVER_HOST. En als je dat gedaan hebt (mogelijk herstart van de container) is het klaar: in je web-interface kun je nu ook verbinding maken met de Zabbix Server!
Stap 6: we zijn de agent vergeten
Alles draait nu, maar we zien wel een "problem", namelijk dat er geen verbinding met de Zabbix Agent gemaakt kan worden. Wat klopt, want we hebben alleen de server en de web-interface geïnstalleerd.
docker pull zabbix/zabbix-agent:latest
Ook hier heb je weer de omgevingsvariabelen (alle beschikbare waardes kun je hier bekijken), het enige wat we hoeven te doen is het IP van de Zabbix Server toe te voegen:
ZBX_SERVER_HOST 172.17.0.3
Nu hebben we het IP-adres van de agent-container nodig. In SSH doe je een docker ps waarmee je alle draaiende containers kunt zien. Het gaat ons om de zabbix-agent. Het eerste veld is het CONTAINER ID, die heb je nodig. Want vervolgens voer je uit docker inspect CONTAINER ID
Het veld IPAddress noteer je, hierna ga je in de web-interface bij de Zabbix Server, naar de eigenschappen van de host. Het ip-adres van de agent stel je in op dit ip-adres. Hierna kan het eventjes duren, maar daarna zou het problem van "geen agent" opgelost moeten zijn. Is dat niet het geval, dan zul je hier verder in moeten duiken.
Stap 7: nu begint het echte werk...
Nu wordt het tijd om alles in te richten, templates, hosts, items, triggers, dashboards, acties, media en wat al niet meer. Het is trouwens wel goed om op deze manier te starten, want de instantie die we bij TRES gebruiken is ooit opgezet met Zabbix 5. Die is wel steeds meer geüpgrade, maar ik zie hier nu allemaal templates in, maar ook allemaal mediatypes waarvan ik me niet kan herinneren dat ik die in onze omgeving heb gezien. We hebben een custom Telegram-implementatie gemaakt, maar is hier al "kant en klaar aanwezig". En daarbij wordt ook verwezen naar de online GIT repository. Ook daar staan de media-types en de uitleg. Iets om goed in de gaten te houden, want wijzigingen en nieuwe media-types zul je hier dus terug kunnen vinden.