Das Containerprotokoll eines Kunden zeigte, was hinter dem 502 steckte: der Dienst stuerzt in einer Schleife ab. [IP Ranges] Fetching https://ip-ranges.amazonaws.com/ip-ranges.json Uncaught Error: Client network socket disconnected before secure TLS connection was established ... node --abort_on_uncaught_exception ... index.js Starting backend ... [und das immer wieder] Beim Start holt der Proxy Manager IP-Bereiche von AWS und Cloudflare - gebraucht wird das nur fuer Zugriffslisten mit deren Adressbereichen, auf einem internen Server also nie. Der Code faengt Fehler dabei ab, dieser kommt aber asynchron vom TLS-Socket und laeuft am catch vorbei; weil node mit --abort_on_uncaught_exception laeuft, bricht der Prozess ab, s6 startet neu, und nginx davor antwortet durchgehend mit 502. Am Abbild nachgesehen und ausprobiert: - IP_RANGES_FETCH_ENABLED=false verhindert den Abruf; im Protokoll steht dann "IP Ranges fetch is disabled by environment variable", das Backend laeuft. - Scheitert der Abruf sauber (DNS-Fehler, Verbindung abgelehnt), faengt der Code ihn ab und der Dienst laeuft weiter - der Absturz haengt also wirklich an der gekappten TLS-Verbindung. - initTimer() laeuft unabhaengig vom Schalter und versucht es alle sechs Stunden erneut. Das steht als Hinweis samt extra_hosts in der README. Neu: NPM_IP_RANGES_FETCH, Vorgabe false. Und die Fehlermeldung erkennt den Fall selbst - sie zaehlt Startversuche und Ausnahmen im Containerprotokoll und nennt den Schalter, statt den Benutzer weiter auf "startet noch" warten zu lassen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
256 lines
11 KiB
Bash
256 lines
11 KiB
Bash
# =====================================================================
|
|
# Checkmk + NGINX Proxy Manager - zentrale Konfiguration
|
|
# Kopieren nach ".env" und anpassen: cp .env.example .env
|
|
#
|
|
# Diese Datei ist die EINZIGE Quelle der Wahrheit. Sie wird gelesen von
|
|
# * docker-compose.yml / podman-compose (Variablen-Ersetzung)
|
|
# * der systemd-Unit (EnvironmentFile=)
|
|
# * scripts/cmk-manage.sh (source)
|
|
# Das Verwaltungsskript SCHREIBT hier nur hinein (z.B. CMK_IMAGE),
|
|
# es haelt keine zweite Konfiguration.
|
|
#
|
|
# Werte mit Leerzeichen bitte in Anfuehrungszeichen setzen.
|
|
# =====================================================================
|
|
|
|
# ---------------------------------------------------------------------
|
|
# Container-Runtime (leer = automatische Erkennung: docker oder podman)
|
|
# ---------------------------------------------------------------------
|
|
CMK_RUNTIME=
|
|
|
|
# =====================================================================
|
|
# CHECKMK-IMAGE
|
|
# =====================================================================
|
|
# Das ist der einzige Wert, den compose/systemd tatsaechlich verwendet.
|
|
#
|
|
# IMMER VOLLQUALIFIZIERT ANGEBEN (mit Registry-Praefix)!
|
|
# Podman loest kurze Namen ueber "unqualified-search-registries" auf -
|
|
# auf RHEL steht dort registry.access.redhat.com an erster Stelle. Ein
|
|
# kurzer Name wie "checkmk/check-mk-enterprise" wird deshalb dort gesucht
|
|
# und nicht gefunden ("image not known") oder es erscheint eine Abfrage.
|
|
#
|
|
# Beispiele:
|
|
# docker.io/checkmk/check-mk-raw:2.3.0-latest
|
|
# registry.checkmk.com/enterprise/check-mk-enterprise:2.3.0p23
|
|
# localhost/checkmk/check-mk-enterprise:2.3.0p23 (aus Tarball geladen)
|
|
CMK_IMAGE=docker.io/checkmk/check-mk-raw:2.3.0-latest
|
|
|
|
# ---------------------------------------------------------------------
|
|
# Nur fuer den Image-Downloader: scripts/cmk-manage.sh image ...
|
|
# Daraus wird CMK_IMAGE ermittelt und oben automatisch eingetragen.
|
|
# ---------------------------------------------------------------------
|
|
# Edition:
|
|
# raw Docker Hub, frei (bis 2.4)
|
|
# community Docker Hub, frei (ab 2.5, Nachfolger von "raw")
|
|
# enterprise NUR registry.checkmk.com oder Tarball - NICHT auf Docker Hub!
|
|
# pro Docker Hub (ab 2.5, Nachfolger von "enterprise")
|
|
# cloud Docker Hub
|
|
# managed Docker Hub (bis 2.4)
|
|
# ultimate Docker Hub (ab 2.5)
|
|
# ultimatemt Docker Hub (ab 2.5, Nachfolger von "managed")
|
|
CMK_EDITION=raw
|
|
|
|
# Konkrete Version. Fuer den Tarball-Download muss eine exakte Version
|
|
# angegeben werden (z.B. 2.3.0p23), "-latest" funktioniert dort nicht.
|
|
CMK_VERSION=2.3.0-latest
|
|
|
|
# Woher soll das Image geholt werden, wenn es lokal fehlt?
|
|
# auto erst Registry, dann Downloadportal (Vorgabe)
|
|
# registry nur aus der Registry
|
|
# download nur als Tarball vom Downloadportal
|
|
# Hintergrund: Registries halten meist nur die juengsten Patchstaende
|
|
# vor. Eine aeltere Version - etwa die einer zu migrierenden Site -
|
|
# liegt dann nur noch im Downloadportal.
|
|
CMK_IMAGE_SOURCE=auto
|
|
|
|
# --- Bezugsweg 1: private Registry (Enterprise) ----------------------
|
|
# Zugangsdaten aus dem Checkmk-Kundenportal (portal.checkmk.com)
|
|
CMK_REGISTRY=registry.checkmk.com
|
|
CMK_REGISTRY_USER=
|
|
CMK_REGISTRY_PASSWORD=
|
|
|
|
# --- Bezugsweg 2: Image-Tarball vom Download-Portal ------------------
|
|
# Zugangsdaten der Checkmk-Downloadseite. Der Downloader probiert die
|
|
# ueblichen Dateinamen unter <BASEURL>/<version>/ durch; mit
|
|
# CMK_DOWNLOAD_URL laesst sich die vollstaendige URL fest vorgeben.
|
|
CMK_DOWNLOAD_BASEURL=https://download.checkmk.com/checkmk
|
|
CMK_DOWNLOAD_URL=
|
|
CMK_DOWNLOAD_USER=
|
|
CMK_DOWNLOAD_PASSWORD=
|
|
|
|
# =====================================================================
|
|
# CHECKMK-LAUFZEIT
|
|
# =====================================================================
|
|
CMK_CONTAINER_NAME=checkmk
|
|
CMK_HOSTNAME=checkmk
|
|
|
|
# Site, die der Container beim Start automatisch anlegt/startet.
|
|
# Bei einer Migration hier den Namen der importierten Site eintragen!
|
|
CMK_SITE_ID=cmk
|
|
|
|
# Initiales Passwort fuer den Benutzer "cmkadmin" (nur bei Neuanlage relevant)
|
|
CMK_PASSWORD=bitte-aendern
|
|
|
|
# Livestatus via TCP (Port 6557) fuer verteilte Umgebungen: on / off
|
|
CMK_LIVESTATUS_TCP=off
|
|
|
|
# Optionaler SMTP-Relay fuer Benachrichtigungen
|
|
MAIL_RELAY_HOST=
|
|
|
|
# Zeitzone
|
|
TZ=Europe/Berlin
|
|
|
|
# =====================================================================
|
|
# NGINX PROXY MANAGER (HTTPS: Let's Encrypt ODER selbstsigniert)
|
|
# =====================================================================
|
|
# Ebenfalls vollqualifiziert - siehe Hinweis oben zu Podman!
|
|
# Soll der Proxy-Manager-Container ueberhaupt betrieben werden?
|
|
# on = wird gebaut und gestartet (Vorgabe)
|
|
# off = wird weder angelegt noch gestartet - sinnvoll, wenn die
|
|
# HTTPS-Terminierung ein bereits vorhandener NGINX auf einem
|
|
# anderen System uebernimmt. Der leitet dann auf Port 5000 weiter.
|
|
# Die Daten unter ./data/npm bleiben beim Abschalten erhalten.
|
|
# Umschalten ueber das Menue oder: ./scripts/cmk-manage.sh npm-enable off
|
|
NPM_ENABLED=on
|
|
|
|
NPM_IMAGE=docker.io/jc21/nginx-proxy-manager:2
|
|
NPM_CONTAINER_NAME=nginx-proxy-manager
|
|
NPM_DISABLE_IPV6=true
|
|
|
|
# Erstes Administratorkonto.
|
|
# WICHTIG: Ohne diese beiden Werte zeigt der Proxy Manager beim ersten
|
|
# Aufruf einen Einrichtungsassistenten im Browser - die frueher ueblichen
|
|
# Standardzugangsdaten admin@example.com/changeme gibt es seit 2.15 NICHT
|
|
# mehr. Mit den Werten legt der Container das Konto beim ERSTEN Start
|
|
# selbst an (nur bei leerer Datenbank) und die REST-API ist sofort
|
|
# nutzbar - damit funktioniert "cmk-manage.sh proxy ...".
|
|
# Ist das Konto bereits von Hand angelegt, hier dessen Daten eintragen.
|
|
NPM_ADMIN_EMAIL=admin@example.com
|
|
NPM_ADMIN_PASSWORD=bitte-aendern-mindestens-8-zeichen
|
|
|
|
# Port der Adminoberflaeche. Vorgabe im Image ist fest 81; ein abweichender
|
|
# Port wird ueber einen zusaetzlichen nginx-Server bereitgestellt.
|
|
# NICHT von Hand aendern - dabei muss die nginx-Zusatzdatei mitgezogen werden:
|
|
# ./scripts/cmk-manage.sh npm-port 10443
|
|
# oder im Menue unter "Einstellungen".
|
|
NPM_ADMIN_PORT=81
|
|
|
|
# Unter welchem Namen die Schnittstelle des Proxy Managers angesprochen
|
|
# wird. Wichtig nur in Netzen mit Zwangsproxy: no_proxy vergleicht NAMEN,
|
|
# nicht Adressen - steht dort nur "localhost", laeuft eine Anfrage an
|
|
# 127.0.0.1 trotzdem ueber den Proxy. Dann hier auf localhost stellen.
|
|
NPM_API_HOST=127.0.0.1
|
|
|
|
# Holt der Proxy Manager beim Start IP-Bereiche von AWS und Cloudflare?
|
|
# Gebraucht wird das nur fuer Zugriffslisten mit deren Adressbereichen.
|
|
# Vorgabe hier: false. In Netzen, die TLS aufbrechen oder Verbindungen
|
|
# kappen, stirbt der Dienst sonst an einer unbehandelten Ausnahme und
|
|
# startet endlos neu - sichtbar nur als "502 Bad Gateway".
|
|
NPM_IP_RANGES_FETCH=false
|
|
|
|
# =====================================================================
|
|
# TERMINAL-BROWSER (lokale Bedienung des Proxy Managers)
|
|
# Fuer den Fall, dass Port 81 von aussen nicht erreichbar ist.
|
|
# Aufruf: ./scripts/cmk-manage.sh browser
|
|
# =====================================================================
|
|
# Vorgaben fuer "cmk-manage.sh proxy add" (Proxy-Host fuer Checkmk)
|
|
PROXY_DOMAIN=
|
|
PROXY_FORWARD_HOST=127.0.0.1
|
|
PROXY_FORWARD_PORT=5000
|
|
|
|
# Startseite des Browsers. Leer = automatisch aus NPM_ADMIN_PORT abgeleitet.
|
|
NPM_ADMIN_URL=
|
|
|
|
# Vorgabe-Engine: browsh | carbonyl | links | w3m | lynx | shell
|
|
# ACHTUNG: nur browsh und carbonyl koennen JavaScript und damit die
|
|
# Oberflaeche des Proxy Managers darstellen.
|
|
BROWSER_ENGINE=browsh
|
|
|
|
# Images der Engines (vollqualifiziert - siehe Podman-Hinweis oben)
|
|
BROWSH_IMAGE=docker.io/browsh/browsh:v1.8.3
|
|
CARBONYL_IMAGE=docker.io/fathyb/carbonyl:latest
|
|
|
|
# Selbst gebautes Werkzeug-Image (Textbrowser, curl, jq, openssl).
|
|
# Leer lassen - das Skript waehlt automatisch den zur Runtime passenden
|
|
# Namen (Podman braucht das Praefix "localhost/", Docker darf es nicht haben).
|
|
BROWSER_TOOLS_IMAGE=
|
|
|
|
# =====================================================================
|
|
# PFADE (relativ zum Projektverzeichnis)
|
|
# Ausschliesslich Bind-Mounts - keine Docker/Podman-Volumes!
|
|
# =====================================================================
|
|
CMK_DATA_DIR=./data/checkmk/sites
|
|
NPM_DATA_DIR=./data/npm/data
|
|
NPM_LE_DIR=./data/npm/letsencrypt
|
|
|
|
# Ablage fuer MANUELLE Backups und Migrations-Bundles.
|
|
# Geplante Jobs bringen ihr eigenes Zielverzeichnis mit (backup-jobs.conf).
|
|
BACKUP_DIR=./backups
|
|
|
|
# Sollen die Backup-Jobs automatisch per cron laufen?
|
|
# Umschalten ueber das Menue oder: ./scripts/cmk-manage.sh job auto on
|
|
BACKUP_AUTO=off
|
|
IMAGE_DIR=./images
|
|
|
|
# =====================================================================
|
|
# SELBSTSIGNIERTES ZERTIFIKAT (Vorgaben fuer "cmk-manage.sh cert")
|
|
# =====================================================================
|
|
CERT_DOMAIN=checkmk.example.local
|
|
CERT_DAYS=3650
|
|
CERT_COUNTRY=DE
|
|
CERT_ORG="Beispiel GmbH"
|
|
|
|
# ---------------------------------------------------------------------
|
|
# Firewall: was von aussen erreichbar sein muss
|
|
#
|
|
# Diese Werte oeffnen nichts von selbst - sie sagen "cmk-manage.sh
|
|
# firewall", welche Ports dieser Aufbau braucht.
|
|
# ---------------------------------------------------------------------
|
|
|
|
# Rolle im verteilten Monitoring:
|
|
# single - eigenstaendige Site (Vorgabe)
|
|
# central - Zentrale; baut die Verbindungen selbst auf, braucht
|
|
# eingehend nichts zusaetzlich
|
|
# remote - Remote-Site; die Zentrale fragt hier Livestatus (6557) ab,
|
|
# dazu muss CMK_LIVESTATUS_TCP=on gesetzt sein
|
|
FW_ROLE=single
|
|
|
|
# Event Console: Syslog annehmen - off, udp, tcp oder beide (Port 514)
|
|
FW_EC_SYSLOG=off
|
|
|
|
# Event Console: SNMP-Traps annehmen (Port 162/udp)
|
|
FW_EC_SNMPTRAP=off
|
|
|
|
# Event Console: Status und Ereignisse ueber TCP (Port 6558)
|
|
FW_EC_TCP=off
|
|
|
|
# Laeuft auf diesem Host ein Checkmk-Agent, der im Pull-Betrieb
|
|
# abgefragt wird? (Port 6556/tcp)
|
|
FW_AGENT=off
|
|
|
|
# Weitere Ports, die mitgeprueft werden sollen - durch Komma getrennt,
|
|
# Beschreibung nach dem Gleichheitszeichen. Ohne Protokoll gilt tcp.
|
|
# Enthaelt eine Beschreibung Leerzeichen, gehoert der ganze Wert in
|
|
# Anfuehrungszeichen (das erledigt "cmk-manage.sh config set" selbst).
|
|
# FW_EXTRA_PORTS=3000/tcp=Grafana,5667/tcp=NSCA,514/udp=Syslog
|
|
FW_EXTRA_PORTS=
|
|
|
|
# ---------------------------------------------------------------------
|
|
# Von aussen geliefertes Zertifikat
|
|
#
|
|
# Wird das Zertifikat von einer fremden Stelle in ein Verzeichnis
|
|
# gelegt und beim Erneuern dort ersetzt (gleicher Dateiname, neuer
|
|
# Inhalt), dann zeigt der Proxy Manager auf diese Dateien, statt sie zu
|
|
# kopieren. Das Verzeichnis wird schreibgeschuetzt als /certs in den
|
|
# Container gehaengt - nach einer Aenderung ist ein "up" noetig.
|
|
#
|
|
# cmk-manage.sh cert external --domain kunde.example.com
|
|
# ---------------------------------------------------------------------
|
|
CERT_EXTERNAL_DIR=./data/npm/external-certs
|
|
CERT_EXTERNAL_FULLCHAIN=fullchain.pem
|
|
CERT_EXTERNAL_KEY=privkey.pem
|
|
|
|
# Taeglich nachsehen, ob die Datei ausgetauscht wurde, und nginx dann
|
|
# neu laden. Ohne das liefert nginx bis zum naechsten Neustart weiter
|
|
# das alte Zertifikat.
|
|
CERT_EXTERNAL_WATCH=off
|