Zabbix Installation mittels Docker Compose

a diagram of a computer network

Ob für schnelle Tests oder den dauerhaften produktiven Einsatz: Mit Docker Compose lässt sich Zabbix flexibel, modular und wartbar installieren. In diesem Beitrag zeigen wir, wie Sie Zabbix mit minimalem Aufwand für Testzwecke einrichten oder eine skalierbare, wartungsfreundliche Umgebung für den langfristigen Betrieb schaffen können.

Docker Compose

version: '3.5'
services:
  mysql-server:
    image: mysql:8.0
    networks:
      - zbx_net
    command:
      - mysqld
      - --character-set-server=utf8
      - --collation-server=utf8_bin
      - --default-authentication-plugin=mysql_native_password
    environment:
      - MYSQL_USER=${MYSQL_USER:-zabbix}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD:-defaultpassword}
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-rootpassword}
      - ZBX_JAVAGATEWAY=${ZBX_JAVAGATEWAY:-zabbix-java-gateway}
    ports:
      - "3306:3306"
    volumes:
      - zabbix_mysql_data:/var/lib/mysql:rw
    restart: always

  zabbix-server-mysql:
    image: zabbix/zabbix-server-mysql:alpine-latest
    networks:
      - zbx_net
    extra_hosts:
      - "host.docker.internal:host-gateway"
    ports:
      - "10051:10051"
    volumes:
      - zabbix_alertscripts:/usr/lib/zabbix/alertscripts:ro
      - zabbix_externalscripts:/usr/lib/zabbix/externalscripts:ro
      - zabbix_export:/var/lib/zabbix/export:rw
      - zabbix_modules:/var/lib/zabbix/modules:ro
      - zabbix_enc:/var/lib/zabbix/enc:ro
      - zabbix_ssh_keys:/var/lib/zabbix/ssh_keys:ro
      - zabbix_mibs:/var/lib/zabbix/mibs:ro
      - zabbix_snmptraps:/var/lib/zabbix/snmptraps:rw
    environment:
      - DB_SERVER_HOST=${DB_SERVER_HOST:-mysql-server}
      - MYSQL_DATABASE=${MYSQL_DATABASE:-zabbixdb}
      - MYSQL_USER=${MYSQL_USER:-zabbix}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD:-defaultpassword}
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-rootpassword}
      - ZBX_JAVAGATEWAY=${ZBX_JAVAGATEWAY:-zabbix-java-gateway}
    depends_on:
      - mysql-server
    restart: always

  zabbix-web-nginx-mysql:
    image: zabbix/zabbix-web-nginx-mysql:alpine-latest
    networks:
      - zbx_net
    ports:
      - "10053:8080"
      - "10054:8443"
    volumes:
      - zabbix_nginx_ssl:/etc/ssl/nginx:ro
      - zabbix_nginx_modules:/usr/share/zabbix/modules/:ro
    environment:
      - ZBX_SERVER_HOST=${ZBX_SERVER_HOST:-zabbix-server-mysql}
      - DB_SERVER_HOST=${DB_SERVER_HOST:-mysql-server}
      - MYSQL_DATABASE=${MYSQL_DATABASE:-zabbixdb}
      - MYSQL_USER=${MYSQL_USER:-zabbix}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD:-defaultpassword}
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-rootpassword}
    depends_on:
      - mysql-server
      - zabbix-server-mysql
    restart: always

  zabbix-java-gateway:
    image: zabbix/zabbix-java-gateway:alpine-6.0-latest
    networks:
      - zbx_net
    ports:
      - "10052:10052"
    restart: always

networks:
  zbx_net:
    driver: bridge

volumes:
  zabbix_mysql_data:
  zabbix_alertscripts:
  zabbix_externalscripts:
  zabbix_export:
  zabbix_modules:
  zabbix_enc:
  zabbix_ssh_keys:
  zabbix_mibs:
  zabbix_snmptraps:
  zabbix_nginx_ssl:
  zabbix_nginx_modules:

Enviroment

# MySQL configurations
MYSQL_USER=zabbix
MYSQL_PASSWORD=strongpassword123
MYSQL_ROOT_PASSWORD=supersecretrootpassword

# Zabbix configurations
DB_SERVER_HOST=mysql-server
MYSQL_DATABASE=zabbixdb
ZBX_JAVAGATEWAY=zabbix-java-gateway
ZBX_SERVER_HOST=zabbix-server-mysql

Mit dieser docker-compose Datei setzt du eine komplette Zabbix-Umgebung auf, die aus mehreren Docker-Containern besteht. Hier ist eine Schritt-für-Schritt-Erklärung, was die Konfiguration bewirkt:

  1. MySQL-Server Container:
    • Du nutzt das mysql:8.0 Image, um die Datenbank für Zabbix bereitzustellen.
    • Die Netzwerkkonfiguration erfolgt über zbx_net, damit alle Dienste miteinander kommunizieren können.
    • Die MySQL-Datenbank wird mit UTF-8 konfiguriert, um internationale Zeichensätze zu unterstützen.
    • Über Umgebungsvariablen wie MYSQL_USER und MYSQL_PASSWORD definierst du den Benutzer, das Passwort sowie das Root-Passwort für die Datenbank.
    • Die Datenbankdaten werden in einem Volume (zabbix_mysql_data) gespeichert, damit die Daten auch nach einem Neustart des Containers erhalten bleiben.
  2. Zabbix-Server mit MySQL:
    • Hier verwendest du das zabbix/zabbix-server-mysql Image. Dieser Container ist der Kern deiner Zabbix-Installation.
    • Über die extra_hosts Einträge stellst du sicher, dass der Zabbix-Server im Netzwerk korrekt angesprochen werden kann.
    • Dieser Service kommuniziert mit dem MySQL-Server, weshalb du die Umgebungsvariablen wie DB_SERVER_HOST, MYSQL_DATABASE usw. definierst.
    • Außerdem gibt es Volumes, die für spezielle Verzeichnisse wie alertscripts, externalscripts und andere verwendet werden, um benutzerdefinierte Skripte und Erweiterungen flexibel zu nutzen.
    • depends_on sorgt dafür, dass der MySQL-Server zuerst gestartet wird, bevor der Zabbix-Server initialisiert.
  3. Zabbix Web Frontend (Nginx):
    • Das Web-Interface wird über zabbix/zabbix-web-nginx-mysql bereitgestellt und macht es dir leicht, Zabbix über einen Browser zu bedienen.
    • Ports 8080 und 8443 sind für den Zugriff via HTTP und HTTPS verfügbar.
    • Wiederum sind die Umgebungsvariablen für die Datenbankkonfiguration erforderlich, damit das Web-Interface korrekt funktioniert.
    • Es gibt ebenfalls Volumes für SSL-Zertifikate (zabbix_nginx_ssl) und Module.
  4. Zabbix Java Gateway:
    • Dieser Container (zabbix/zabbix-java-gateway) erweitert Zabbix um die Möglichkeit, Java-Anwendungen zu überwachen.
    • Du konfigurierst ihn mit dem zbx_net Netzwerk und öffnest Port 10052.
  5. Netzwerk und Volumes:
    • Die Dienste sind alle über das Netzwerk zbx_net verbunden, was die Kommunikation zwischen den Containern ermöglicht.
    • Die verschiedenen Volumes sorgen dafür, dass wichtige Daten und Konfigurationen auch bei einem Neustart der Container erhalten bleiben.

🤞 1x pro Monat unsere News, Tipps und Tutorials gebündelt direkt in dein Postfach!

Wir senden keinen Spam! Erfahre mehr in unserer Datenschutzerklärung.


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.