LibreNMS in Docker?

Hallo zusammen,

hat jemand von euch LibreNMS in einem Docker-Container installiert? Ich würde das gerne machen. Ich habe die empfohlene YAML-Compose-Datei gefunden, aber da ich kein YAML-Experte bin, bin ich mir nicht sicher, was für das QNAP usw. geändert werden muss.

Danke!

Kannst du die YAML-Datei posten?

Vor allem Netzwerk- und gemeinsame Ordner müssten für WNAP angepasst werden.

name: librenms

services:
  db:
    image: mariadb:10
    container_name: librenms_db
    command:
      - "mysqld"
      - "--innodb-file-per-table=1"
      - "--lower-case-table-names=0"
      - "--character-set-server=utf8mb4"
      - "--collation-server=utf8mb4_unicode_ci"
    volumes:
      - "./db:/var/lib/mysql"
    environment:
      - "TZ=${TZ}"
      - "MARIADB_RANDOM_ROOT_PASSWORD=yes"
      - "MYSQL_DATABASE=${MYSQL_DATABASE}"
      - "MYSQL_USER=${MYSQL_USER}"
      - "MYSQL_PASSWORD=${MYSQL_PASSWORD}"
    restart: always

  redis:
    image: redis:7.2-alpine
    container_name: librenms_redis
    environment:
      - "TZ=${TZ}"
    restart: always

  msmtpd:
    image: crazymax/msmtpd:latest
    container_name: librenms_msmtpd
    env_file:
      - "./msmtpd.env"
    restart: always

  librenms:
    image: librenms/librenms:latest
    container_name: librenms
    hostname: librenms
    cap_add:
      - NET_ADMIN
      - NET_RAW
    ports:
      - target: 8000
        published: 8000
        protocol: tcp
    depends_on:
      - db
      - redis
      - msmtpd
    volumes:
      - "./librenms:/data"
    env_file:
      - "./librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
    restart: always

  dispatcher:
    image: librenms/librenms:latest
    container_name: librenms_dispatcher
    hostname: librenms-dispatcher
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    volumes:
      - "./librenms:/data"
    env_file:
      - "./librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
      - "DISPATCHER_NODE_ID=dispatcher1"
      - "SIDECAR_DISPATCHER=1"
    restart: always

  syslogng:
    image: librenms/librenms:latest
    container_name: librenms_syslogng
    hostname: librenms-syslogng
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    ports:
      - target: 514
        published: 514
        protocol: tcp
      - target: 514
        published: 514
        protocol: udp
    volumes:
      - "./librenms:/data"
    env_file:
      - "./librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
      - "SIDECAR_SYSLOGNG=1"
    restart: always

  snmptrapd:
    image: librenms/librenms:latest
    container_name: librenms_snmptrapd
    hostname: librenms-snmptrapd
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    ports:
      - target: 162
        published: 162
        protocol: tcp
      - target: 162
        published: 162
        protocol: udp
    volumes:
      - "./librenms:/data"
    env_file:
      - "./librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
      - "SIDECAR_SNMPTRAPD=1"
    restart: always

Auf QTS würden Sie Ihre Share-Deklarationen mit /share/sharename/subfolder machen.

Ich mache das so (httpd-Container als Beispiel):


    volumes:
    - '/share/Web/webstage1:/usr/local/apache2/htdocs'

In diesem Fall habe ich einen Ordner in meinem Share ‘Web’ namens ‘webstage1’.

Dieser wird innerhalb des Containers als /usr/local/apache2/htdocs eingebunden.

Wenn Sie das Verzeichnis schreibgeschützt machen möchten (z.B. Dateien, die der Container NICHT bearbeiten soll), deklarieren Sie dies am Ende mit :ro.


    volumes:
    - '/share/Web/webstage1:/usr/local/apache2/htdocs:ro'

Das ist also der Ordner, der „außerhalb“ des QNAP-Docker-Dateisystems liegt. In meinem Fall würde ich ihn also unter /share/Container/LibreNMS haben. Richtig?

Muss ich nun MariaDB installieren und muss ich alle Passwörter, die Datenbank usw. einrichten?

???

Das würdest du für alle Volumes machen.

Die Datenbank sollte Teil des Compose-Pakets sein. Das Einzige, was du anpassen musst, sind die Volumes und das Netzwerk (zum Beispiel, wenn du kein NAT, sondern Bridging möchtest) sowie alle gewünschten Änderungen an Benutzernamen und Passwörtern.

OK. Am Ende habe ich diese Compose-Datei erstellt:

name: librenms

services:
  db:
    image: mariadb:10
    container_name: librenms_db
    command:
      - "mysqld"
      - "--innodb-file-per-table=1"
      - "--lower-case-table-names=0"
      - "--character-set-server=utf8mb4"
      - "--collation-server=utf8mb4_unicode_ci"
    volumes:
      - "/share/Container/LibreNMS/db:/var/lib/mysql"
    environment:
      - "TZ=${TZ}"
      - "MARIADB_RANDOM_ROOT_PASSWORD=yes"
      - "MYSQL_DATABASE=${MYSQL_DATABASE}"
      - "MYSQL_USER=${MYSQL_USER}"
      - "MYSQL_PASSWORD=${MYSQL_PASSWORD}"
    restart: always

  redis:
    image: redis:7.2-alpine
    container_name: librenms_redis
    environment:
      - "TZ=${TZ}"
    restart: always

  msmtpd:
    image: crazymax/msmtpd:latest
    container_name: librenms_msmtpd
    env_file:
      - "/share/Container/LibreNMS/msmtpd.env"
    restart: always

  librenms:
    image: librenms/librenms:latest
    container_name: librenms
    hostname: librenms
    cap_add:
      - NET_ADMIN
      - NET_RAW
    ports:
      - target: 8000
        published: 8000
        protocol: tcp
    depends_on:
      - db
      - redis
      - msmtpd
    volumes:
      - "/share/Container/LibreNMS:/data"
    env_file:
      - "/share/Container/LibreNMS/librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
    restart: always

  dispatcher:
    image: librenms/librenms:latest
    container_name: librenms_dispatcher
    hostname: librenms-dispatcher
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    volumes:
      - "/share/Container/LibreNMS:/data"
    env_file:
      - "/share/Container/LibreNMS/librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
      - "DISPATCHER_NODE_ID=dispatcher1"
      - "SIDECAR_DISPATCHER=1"
    restart: always

  syslogng:
    image: librenms/librenms:latest
    container_name: librenms_syslogng
    hostname: librenms-syslogng
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    ports:
      - target: 514
        published: 514
        protocol: tcp
      - target: 514
        published: 514
        protocol: udp
    volumes:
      - "/share/Container/LibreNMS:/data"
    env_file:
      - "/share/Container/LibreNMS/librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
      - "SIDECAR_SYSLOGNG=1"
    restart: always

  snmptrapd:
    image: librenms/librenms:latest
    container_name: librenms_snmptrapd
    hostname: librenms-snmptrapd
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    ports:
      - target: 162
        published: 162
        protocol: tcp
      - target: 162
        published: 162
        protocol: udp
    volumes:
      - "/share/Container/LibreNMS:/data"
    env_file:
      - "/share/Container/LibreNMS/librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
      - "SIDECAR_SNMPTRAPD=1"
    restart: always
    cap_add:
      - NET_ADMIN
      - NET_RAW
    ports:
      - target: 8000
        published: 8000
        protocol: tcp
    depends_on:
      - db
      - redis
      - msmtpd
    volumes:
      - "/share/Container/LibreNMS:/data"
    env_file:
      - "/share/Container/LibreNMS/librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
    restart: always

  dispatcher:
    image: librenms/librenms:latest
    container_name: librenms_dispatcher
    hostname: librenms-dispatcher
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    volumes:
      - "/share/Container/LibreNMS:/data"
    env_file:
      - "/share/Container/LibreNMS/librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
      - "DISPATCHER_NODE_ID=dispatcher1"
      - "SIDECAR_DISPATCHER=1"
    restart: always

  syslogng:
    image: librenms/librenms:latest
    container_name: librenms_syslogng
    hostname: librenms-syslogng
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    ports:
      - target: 514
        published: 514
        protocol: tcp
      - target: 514
        published: 514
        protocol: udp
    volumes:
      - "./librenms:/data"
    env_file:
      - "./librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
      - "SIDECAR_SYSLOGNG=1"
    restart: always

  snmptrapd:
    image: librenms/librenms:latest
    container_name: librenms_snmptrapd
    hostname: librenms-snmptrapd
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    ports:
      - target: 162
        published: 162
        protocol: tcp
      - target: 162
        published: 162
        protocol: udp
    volumes:
      - "/share/Container/LibreNMS:/data"
    env_file:
      - "/share/Container/LibreNMS/librenms.env"
    environment:
      - "TZ=${TZ}"
      - "PUID=${PUID}"
      - "PGID=${PGID}"
      - "DB_HOST=db"
      - "DB_NAME=${MYSQL_DATABASE}"
      - "DB_USER=${MYSQL_USER}"
      - "DB_PASSWORD=${MYSQL_PASSWORD}"
      - "DB_TIMEOUT=60"
      - "SIDECAR_SNMPTRAPD=1"
    restart: always

Aber es treten Fehler auf. Im GitHub-Repository gibt es eine .env-Datei mit folgendem Inhalt:

TZ=Europe/Paris
PUID=1000
PGID=1000

MYSQL_DATABASE=librenms
MYSQL_USER=librenms
MYSQL_PASSWORD=asupersecretpassword

Bei diesen Variablen treten bei mir Fehler auf. Ich nehme an, ich sollte diese Werte stattdessen direkt in die Compose-Datei eintragen?

Außerdem gibt es dort zwei weitere Dateien:

librenms.env

MEMORY_LIMIT=256M
MAX_INPUT_VARS=1000
UPLOAD_MAX_SIZE=16M
OPCACHE_MEM_SIZE=128
REAL_IP_FROM=0.0.0.0/32
REAL_IP_HEADER=X-Forwarded-For
LOG_IP_VAR=remote_addr

CACHE_DRIVER=redis
SESSION_DRIVER=redis
REDIS_HOST=redis

LIBRENMS_SNMP_COMMUNITY=librenmsdocker

LIBRENMS_WEATHERMAP=false
LIBRENMS_WEATHERMAP_SCHEDULE=*/5 * * * *

und msmtpd.env

# https://github.com/crazy-max/docker-msmtpd
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_TLS=on
SMTP_STARTTLS=on
SMTP_TLS_CHECKCERT=on
SMTP_AUTH=on
SMTP_USER=foo
SMTP_PASSWORD=bar
SMTP_FROM=foo@gmail.com

Muss ich diese Dateien in den Ordner /share/Container/LibreNMS legen, bevor ich die App baue? Ja, ich weiß, dass ich die Werte anpassen muss.

Ich habe sie, glaube ich, noch nie benutzt

Aber ich denke, du kannst sie an einen Benutzer/eine Gruppe des NAS binden

id admin (wäre sowieso der Standard), falls du möchtest

Würde die PUID und GUID von admin ausgeben. Wenn du den Container mit anderen Berechtigungen ausführen möchtest, prüfe die Werte für den Benutzer, mit dem du das ausführen willst.

Siehe auch

Ich glaube, du hast meine Frage vielleicht missverstanden..

Ich sollte in der Lage sein, beliebige Benutzernamen/Passwörter zu erstellen. Für den Container spielt das NAS keine Rolle. Für die .env-Datei kann ich diese also im Compose-Skript eintragen.

Es geht darum, was ich mit den Dateien librenms.env und msmtpd.env machen soll.

Keine Ahnung, ich habe noch nie einen Container mit Umgebungsvariablen erstellt.

Die Container, die ich verwendet habe, passten alle ins Compose-Fenster und hatten Konfigurationsdateien in den Freigaben.

Sorry

OK. Nun, lassen Sie mich sehen, was ich tun kann! :smiley:

OK, also ContainerStation gibt hier in der Compose-Datei einen Fehler bei der Zeile „cap_add:“ aus. Weißt du, wofür das ist?

      - "DB_PASSWORD=xxxxx"
      - "DB_TIMEOUT=60"
      - "SIDECAR_SNMPTRAPD=1"
    restart: always
    cap_add:
      - NET_ADMIN
      - NET_RAW
    ports:
      - target: 8000
        published: 8000
        protocol: tcp

Hier ist ein schneller Google-Fund

Wenn das einen Fehler auslöst, ist es vielleicht in der Docker-Version von QNAP nicht implementiert?

Ja, vielleicht ist es nicht implementiert? Das ist seltsam.

Ich habe darüber nachgedacht, folgendes auszuprobieren:

CAP_NET_ADMIN
CAP_NET_RAW

direkt in der Compose-Datei. Oder würde das definitiv nicht funktionieren?

Was passiert, wenn du es weglässt?

Ansonsten kannst du im Compose-Handbuch nachsehen

Also gab es einen großen Fehler in meiner Compose-Datei. Ich hatte versehentlich am Ende eine Menge Sachen dupliziert. Diese cap_add:-Befehle waren in Ordnung. Sie wurden an anderen Stellen der Datei ohne Probleme akzeptiert. Irgendwie habe ich Sachen mehr als einmal kopiert und eingefügt.

Nun müssen diese .env-Dateien im angegebenen Verzeichnis vorhanden sein, BEVOR du versuchst, deinen YAML-Code zu validieren. Wenn sie fehlen, erhältst du einen Fehler.

Mit allem an Ort und Stelle und korrekt gebaut, habe ich jetzt erfolgreich die Anwendung erstellt, aber es wurden 7 Container erzeugt, jeder mit eigener IP-Adresse. Alles verwendet den IP-Bereich, den QNAP im Network and Virtual Switch bereitstellt. Jetzt muss ich herausfinden, was ich damit mache. Soll ich sie in mein Hauptnetzwerk integrieren oder einfach so lassen? Bisher konnte ich keine Webseiten für LibreNMS oder ähnliches erreichen. Also steht noch mehr Recherche an. Aber die gute Nachricht ist, dass es läuft…

Grrr. Das scheint ziemlich komplex zu sein…

Die App stürzt ständig ab und startet neu. Ich bekomme hier einen Fehler…

Erstelle LibreNMS daily.sh Cron-Task mit den folgenden Periodenfeldern: 15 0 * * *
Erstelle LibreNMS Cron artisan schedule:run
Behebe Crontab-Berechtigungen…
chmod: Ändere Berechtigungen von ‘/var/spool/cron/crontabs/librenms’: Ungültige Adresse

Ich vermute, QNAP mag den Pfadnamen /var nicht. Vielleicht muss ich das auf einen externen Pfad abbilden? Ich kann nicht in eine Shell gehen und prüfen, ob er zugänglich ist, da die App zu schnell abstürzt und neu startet.

Ich werde versuchen, /var extern zuzuordnen…