Files
docker-podman-installation-…/.env.example
T
duffyduckandClaude Opus 5 4456f8c3ea Extern geliefertes Zertifikat verwenden, statt es zu kopieren
Liefert eine fremde Stelle das Zertifikat in ein Verzeichnis und
ersetzt es dort beim Erneuern - gleicher Dateiname, neuer Inhalt -,
passt der uebliche Weg nicht: der Proxy Manager kopiert hochgeladene
Zertifikate nach /data/custom_ssl/npm-<id>/ und bekommt von einer
ersetzten Datei nichts mit.

Das Verzeichnis wird deshalb schreibgeschuetzt als /certs in den
Container gehaengt (neuer Mount in der compose-Datei, Vorgabe
./data/npm/external-certs), und "cert external" ersetzt die beiden
Dateien unter custom_ssl durch Verweise darauf. Am Abbild
jc21/nginx-proxy-manager:2 nachgemessen: nginx liefert danach das
externe Zertifikat, und ein Austausch der Datei wirkt - allerdings erst
nach einem Neuladen.

Genau das ist der Haken, und er ist belegt: ohne Neuladen liefert nginx
weiterhin das alte Zertifikat. Dafuer gibt es

  cert external --refresh      vergleicht den SHA256-Fingerabdruck mit
                               dem zuletzt gesehenen und laedt nur bei
                               Aenderung neu
  cert external --watch on     traegt das als taeglichen cron-Eintrag ein

Vor dem Umstellen wird geprueft, ob beide Dateien lesbar sind, ob
Zertifikat und Schluessel zusammengehoeren (Vergleich der oeffentlichen
Schluessel - das faengt auch EC-Schluessel) und wie lange es noch gilt.
Beide Faelle sind durchgespielt: ein fremder Schluessel wird abgelehnt,
ein in fuenf Tagen ablaufendes Zertifikat gemeldet.

"cert external --off --id N" nimmt es zurueck und legt wieder eigene
Kopien an. In der Oberflaeche ist aus dem Menuepunkt "Zertifikat" ein
kleines Menue geworden.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-20 22:05:20 +02:00

243 lines
10 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
# =====================================================================
# 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