NA9D
19. November 2025 um 02:47
1
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.
NA9D
19. November 2025 um 22:57
3
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'
NA9D
20. November 2025 um 01:16
5
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.
NA9D
22. November 2025 um 00:23
7
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
NA9D
22. November 2025 um 00:53
9
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
NA9D
22. November 2025 um 01:07
11
OK. Nun, lassen Sie mich sehen, was ich tun kann!
NA9D
22. November 2025 um 01:16
12
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
NA9D:
cap_add:
Hier ist ein schneller Google-Fund
Wenn das einen Fehler auslöst, ist es vielleicht in der Docker-Version von QNAP nicht implementiert?
NA9D
22. November 2025 um 04:08
14
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
NA9D
22. November 2025 um 15:57
16
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…
NA9D
22. November 2025 um 17:23
17
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…