Terminal-Browser, konfigurierbarer Admin-Port und Einstellungsmenue
Der NGINX Proxy Manager laesst sich jetzt auch dann einrichten, wenn
seine Oberflaeche auf Port 81 aus dem Netz nicht erreichbar ist.
browser
Terminal-Browser in einem eigenen Container, gestartet mit
"run --rm -it --network host" - damit erreicht er 127.0.0.1 genau wie
der Proxy Manager selbst. Engines: browsh und carbonyl (rendern einen
echten Browser und koennen JavaScript, das die Adminoberflaeche
benoetigt) sowie links2/w3m/lynx und eine Shell mit curl/jq/openssl
fuer Diagnose. Werkzeug-Image unter containers/browser/.
Bewusst kein Compose-Dienst: ein Browser ist interaktiv, und
podman-compose behandelt Profile unzuverlaessig.
npm-port
Port der Adminoberflaeche frei waehlbar. Das Image bindet fest auf 81
("listen 81 default;"), eine Umgebungsvariable dafuer gibt es in 2.15.1
noch nicht. Ein abweichender Port wird deshalb ueber den nginx-
Erweiterungspunkt /data/nginx/custom/http.conf bereitgestellt. Nur der
markierte Block wird verwaltet, eigene Eintraege bleiben erhalten.
Port 81 lauscht weiterhin lokal und ist per Firewall zu sperren.
config
Alle Werte der .env sind menuegefuehrt bzw. ueber config get/set
aenderbar - der Editor bleibt als Menuepunkt erhalten. Geprueft wird
beim Setzen: Portbereich und Kollisionen, Site-Namen, vollqualifizierte
Image-Namen, installierte Runtime, Zahlen- und URL-Felder.
Fehlerbehebungen
- ui_*-Funktionen initialisieren sich selbst; eine von aussen gesetzte
UI_BIN fuehrte unter "set -u" zum Abbruch.
- Eine nicht installierte CMK_RUNTIME machte das gesamte Werkzeug
unbenutzbar, auch den Aufruf zum Korrigieren. Jetzt wird gewarnt und
selbst gesucht.
- env_set setzt Werte mit Leerzeichen in Anfuehrungszeichen und laesst
optional leere Werte zu.
README auf 22 Kapitel erweitert: Kapitel 11 (Terminal-Browser inkl.
NPM-API als Fallback fuer den Zertifikats-Upload), Kapitel 12 (Admin-Port)
und Abschnitt 14.3 (Einstellungsmenue).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+105
-22
@@ -1,6 +1,15 @@
|
||||
# =====================================================================
|
||||
# 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.
|
||||
# =====================================================================
|
||||
|
||||
# ---------------------------------------------------------------------
|
||||
@@ -8,17 +17,60 @@
|
||||
# ---------------------------------------------------------------------
|
||||
CMK_RUNTIME=
|
||||
|
||||
# ---------------------------------------------------------------------
|
||||
# Checkmk
|
||||
# ---------------------------------------------------------------------
|
||||
# Raw Edition (frei): checkmk/check-mk-raw
|
||||
# Enterprise (Subskription): checkmk/check-mk-enterprise
|
||||
CMK_IMAGE_REPO=checkmk/check-mk-raw
|
||||
# =====================================================================
|
||||
# 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
|
||||
|
||||
# WICHTIG bei Migration: Die Version MUSS zur Version der Quell-Site passen,
|
||||
# sonst schlaegt "omd restore" fehl. Beispiele: 2.3.0-latest, 2.3.0p23, 2.2.0p39
|
||||
CMK_IMAGE_TAG=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
|
||||
|
||||
# --- 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
|
||||
|
||||
@@ -38,28 +90,59 @@ MAIL_RELAY_HOST=
|
||||
# Zeitzone
|
||||
TZ=Europe/Berlin
|
||||
|
||||
# ---------------------------------------------------------------------
|
||||
# NGINX Proxy Manager (HTTPS-Terminierung, Let's Encrypt ODER self-signed)
|
||||
# ---------------------------------------------------------------------
|
||||
NPM_IMAGE=jc21/nginx-proxy-manager:2
|
||||
# =====================================================================
|
||||
# NGINX PROXY MANAGER (HTTPS: Let's Encrypt ODER selbstsigniert)
|
||||
# =====================================================================
|
||||
# Ebenfalls vollqualifiziert - siehe Hinweis oben zu Podman!
|
||||
NPM_IMAGE=docker.io/jc21/nginx-proxy-manager:2
|
||||
NPM_CONTAINER_NAME=nginx-proxy-manager
|
||||
NPM_DISABLE_IPV6=true
|
||||
|
||||
# ---------------------------------------------------------------------
|
||||
# Pfade (relativ zum Projektverzeichnis) - ausschliesslich Bind-Mounts,
|
||||
# keine Docker/Podman-Volumes!
|
||||
# ---------------------------------------------------------------------
|
||||
# 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
|
||||
# =====================================================================
|
||||
# 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 Backups / Migrations-Bundles (Host-Pfad)
|
||||
# Ablage fuer Backups / Migrations-Bundles und heruntergeladene Images
|
||||
BACKUP_DIR=./backups
|
||||
IMAGE_DIR=./images
|
||||
|
||||
# ---------------------------------------------------------------------
|
||||
# Self-signed Zertifikat (Vorgaben fuer scripts/cmk-manage.sh cert)
|
||||
# ---------------------------------------------------------------------
|
||||
# =====================================================================
|
||||
# SELBSTSIGNIERTES ZERTIFIKAT (Vorgaben fuer "cmk-manage.sh cert")
|
||||
# =====================================================================
|
||||
CERT_DOMAIN=checkmk.example.local
|
||||
CERT_DAYS=3650
|
||||
CERT_COUNTRY=DE
|
||||
CERT_ORG="Beispiel GmbH" # Werte mit Leerzeichen bitte in Anfuehrungszeichen
|
||||
CERT_ORG="Beispiel GmbH"
|
||||
|
||||
@@ -11,3 +11,5 @@ backups/*
|
||||
!backups/.gitkeep
|
||||
*.tar.gz
|
||||
*.log
|
||||
images/*
|
||||
!images/.gitkeep
|
||||
|
||||
@@ -17,18 +17,21 @@ werden müssen.
|
||||
5. [Installation auf RHEL/Rocky/Alma/Fedora (Podman)](#5-installation-auf-rhelrockyalmafedora-podman)
|
||||
6. [Autostart nach einem Neustart des Hosts (Podman)](#6-autostart-nach-einem-neustart-des-hosts-podman)
|
||||
7. [Konfiguration (`.env`)](#7-konfiguration-env)
|
||||
8. [Erststart](#8-erststart)
|
||||
9. [HTTPS einrichten – Let's Encrypt oder selbstsigniert](#9-https-einrichten--lets-encrypt-oder-selbstsigniert)
|
||||
10. [Firewall](#10-firewall)
|
||||
11. [Verwaltung: `cmk-manage.sh` (CLI und ncurses-Oberfläche)](#11-verwaltung-cmk-managesh)
|
||||
12. [Backup](#12-backup)
|
||||
13. [Restore](#13-restore)
|
||||
14. [Migration einer Direktinstallation (`migrate_creator.sh`)](#14-migration-einer-direktinstallation-migrate_creatorsh)
|
||||
15. [Mehrere Sites in einem Container](#15-mehrere-sites-in-einem-container)
|
||||
16. [Checkmk aktualisieren](#16-checkmk-aktualisieren)
|
||||
17. [Fehlersuche](#17-fehlersuche)
|
||||
18. [Sicherheitshinweise](#18-sicherheitshinweise)
|
||||
19. [Deinstallation](#19-deinstallation)
|
||||
8. [Checkmk-Image beschaffen (Raw, Enterprise & Co.)](#8-checkmk-image-beschaffen-raw-enterprise--co)
|
||||
9. [Erststart](#9-erststart)
|
||||
10. [HTTPS einrichten – Let's Encrypt oder selbstsigniert](#10-https-einrichten--lets-encrypt-oder-selbstsigniert)
|
||||
11. [Proxy Manager lokal einrichten (Terminal-Browser)](#11-proxy-manager-lokal-einrichten-terminal-browser)
|
||||
12. [Adminoberfläche auf einen anderen Port legen](#12-adminoberfläche-auf-einen-anderen-port-legen)
|
||||
13. [Firewall](#13-firewall)
|
||||
14. [Verwaltung: `cmk-manage.sh` (CLI und ncurses-Oberfläche)](#14-verwaltung-cmk-managesh)
|
||||
15. [Backup](#15-backup)
|
||||
16. [Restore](#16-restore)
|
||||
17. [Migration einer Direktinstallation (`migrate_creator.sh`)](#17-migration-einer-direktinstallation-migrate_creatorsh)
|
||||
18. [Mehrere Sites in einem Container](#18-mehrere-sites-in-einem-container)
|
||||
19. [Checkmk aktualisieren](#19-checkmk-aktualisieren)
|
||||
20. [Fehlersuche](#20-fehlersuche)
|
||||
21. [Sicherheitshinweise](#21-sicherheitshinweise)
|
||||
22. [Deinstallation](#22-deinstallation)
|
||||
|
||||
---
|
||||
|
||||
@@ -83,6 +86,10 @@ werden müssen.
|
||||
│ └── lib/
|
||||
│ └── common.sh # gemeinsame Funktionen + TUI-Helfer
|
||||
│
|
||||
├── containers/
|
||||
│ └── browser/
|
||||
│ └── Containerfile # Werkzeug-Image: Textbrowser, curl, jq, openssl
|
||||
│
|
||||
├── systemd/
|
||||
│ ├── checkmk-stack.service.example # Compose-basierte Unit (Autostart)
|
||||
│ └── quadlet/
|
||||
@@ -96,7 +103,8 @@ werden müssen.
|
||||
│ ├── letsencrypt/ # -> /etc/letsencrypt (Zertifikate)
|
||||
│ └── custom-certs/ # selbstsignierte Zertifikate zum Hochladen
|
||||
│
|
||||
└── backups/ # Backups und Migrations-Bundles (*.tar.gz)
|
||||
├── backups/ # Backups und Migrations-Bundles (*.tar.gz)
|
||||
└── images/ # heruntergeladene Checkmk-Image-Tarballs
|
||||
```
|
||||
|
||||
---
|
||||
@@ -114,7 +122,7 @@ werden müssen.
|
||||
|---|---|---|
|
||||
| 80/tcp | NGINX Proxy Manager – HTTP, Let's-Encrypt-Challenge | Internet/LAN |
|
||||
| 443/tcp | NGINX Proxy Manager – HTTPS | Internet/LAN |
|
||||
| 81/tcp | NGINX Proxy Manager – **Adminoberfläche** | nur Admin-Netz! |
|
||||
| 81/tcp | NGINX Proxy Manager – **Adminoberfläche** (Vorgabe; per [`npm-port`](#12-adminoberfläche-auf-einen-anderen-port-legen) änderbar) | nur Admin-Netz! |
|
||||
| 5000/tcp | Checkmk Apache (Backend) | **nur localhost** – nicht freigeben |
|
||||
| 8000/tcp | Checkmk Agent-Receiver (TLS-registrierte Agents) | überwachte Hosts |
|
||||
| 6557/tcp | Livestatus (nur bei `CMK_LIVESTATUS_TCP=on`) | verteilte Sites |
|
||||
@@ -151,6 +159,10 @@ Anschließend:
|
||||
|
||||
```bash
|
||||
sudo $EDITOR /opt/checkmk-stack/.env # mindestens CMK_PASSWORD und CMK_SITE_ID
|
||||
|
||||
# Image festlegen (Raw geht ohne Anmeldung, Enterprise siehe Kapitel 8)
|
||||
sudo ./scripts/cmk-manage.sh image pull --edition raw --version 2.3.0-latest
|
||||
|
||||
sudo ./scripts/cmk-manage.sh up
|
||||
sudo ./scripts/cmk-manage.sh status
|
||||
```
|
||||
@@ -158,7 +170,7 @@ sudo ./scripts/cmk-manage.sh status
|
||||
Unter Docker sorgt bereits `restart: unless-stopped` dafür, dass die Container
|
||||
nach einem Reboot wieder starten (der Docker-Daemon startet sie). Die
|
||||
systemd-Unit ist trotzdem sinnvoll, weil sie zusätzlich **alle** Sites startet
|
||||
(siehe [Kapitel 15](#15-mehrere-sites-in-einem-container)).
|
||||
(siehe [Kapitel 18](#18-mehrere-sites-in-einem-container)).
|
||||
|
||||
---
|
||||
|
||||
@@ -195,10 +207,19 @@ Starten:
|
||||
|
||||
```bash
|
||||
sudo $EDITOR /opt/checkmk-stack/.env
|
||||
|
||||
# Image beschaffen - bei Enterprise mit Zugangsdaten, siehe Kapitel 8
|
||||
sudo ./scripts/cmk-manage.sh image pull --edition enterprise --version 2.3.0p23 \
|
||||
--user <benutzer> --password <kennwort>
|
||||
|
||||
sudo ./scripts/cmk-manage.sh up # nutzt automatisch podman-compose
|
||||
sudo ./scripts/cmk-manage.sh status
|
||||
```
|
||||
|
||||
> Auf RHEL unbedingt [Kapitel 8.2](#8-checkmk-image-beschaffen-raw-enterprise--co)
|
||||
> lesen: kurze Image-Namen und `podman import` statt `podman load` sind die
|
||||
> beiden Ursachen fuer „Image unbekannt“.
|
||||
|
||||
### SELinux
|
||||
|
||||
Die Bind-Mounts sind in `docker-compose.yml` mit `:Z` versehen, Podman setzt
|
||||
@@ -330,19 +351,204 @@ Die wichtigsten Schalter:
|
||||
| Variable | Bedeutung |
|
||||
|---|---|
|
||||
| `CMK_RUNTIME` | leer = automatische Erkennung, sonst `docker` oder `podman` |
|
||||
| `CMK_IMAGE_REPO` | `checkmk/check-mk-raw` (frei) oder `checkmk/check-mk-enterprise` |
|
||||
| `CMK_IMAGE_TAG` | **Version** – bei einer Migration muss sie zur Quell-Site passen! |
|
||||
| `CMK_IMAGE` | **das tatsaechlich verwendete Image**, immer vollqualifiziert – siehe [Kapitel 8](#8-checkmk-image-beschaffen-raw-enterprise--co) |
|
||||
| `CMK_EDITION`, `CMK_VERSION` | nur Vorgaben fuer den Image-Downloader |
|
||||
| `CMK_REGISTRY_USER/-PASSWORD` | Anmeldung an `registry.checkmk.com` (Enterprise) |
|
||||
| `CMK_DOWNLOAD_USER/-PASSWORD` | Anmeldung am Checkmk-Downloadportal |
|
||||
| `CMK_SITE_ID` | Site, die der Container anlegt bzw. beim Start hochfährt |
|
||||
| `CMK_PASSWORD` | Startpasswort für den Benutzer `cmkadmin` (nur bei Neuanlage) |
|
||||
| `CMK_LIVESTATUS_TCP` | `on` öffnet Port 6557 für verteilte Überwachung |
|
||||
| `MAIL_RELAY_HOST` | SMTP-Relay für Benachrichtigungen |
|
||||
| `TZ` | Zeitzone, z. B. `Europe/Berlin` |
|
||||
| `NPM_ADMIN_PORT` | Port der Proxy-Manager-Oberfläche (Vorgabe 81) – nur über `npm-port` bzw. das Menü ändern |
|
||||
| `NPM_ADMIN_URL` | Startseite des Terminal-Browsers; leer = automatisch aus `NPM_ADMIN_PORT` |
|
||||
| `BACKUP_DIR` | Ablage für Backups/Bundles (Vorgabe `./backups`) |
|
||||
| `CERT_DOMAIN`, `CERT_DAYS` | Vorgaben für selbstsignierte Zertifikate |
|
||||
|
||||
### 7.1 Wer liest die `.env` – und warum gibt es sie zusätzlich zum Skript?
|
||||
|
||||
Die `.env` ist die **einzige** Konfigurationsdatei. Es gibt bewusst keine zweite
|
||||
Konfiguration im Verwaltungsskript:
|
||||
|
||||
```
|
||||
.env (einzige Quelle der Wahrheit)
|
||||
|
|
||||
+---------------+----------------+------------------+
|
||||
| | | |
|
||||
docker-compose systemd-Unit cmk-manage.sh migrate_creator.sh
|
||||
(Variablen- (EnvironmentFile) (source) (unabhaengig, laeuft
|
||||
ersetzung) auf dem Quellserver)
|
||||
```
|
||||
|
||||
* **Gelesen** wird sie von compose, von der systemd-Unit und vom Skript.
|
||||
* **Geschrieben** wird sie durch das Skript – entweder gezielt
|
||||
(`image …` setzt `CMK_IMAGE`, `import --set-default-site` setzt
|
||||
`CMK_SITE_ID`, `npm-port` setzt `NPM_ADMIN_PORT`) oder über das
|
||||
Einstellungsmenü bzw. `config set` (siehe [Kapitel 14](#14-verwaltung-cmk-managesh)).
|
||||
Ein Editor ist damit nicht mehr nötig, bleibt aber als Menüpunkt erhalten.
|
||||
* Das Skript selbst haelt nur **Rueckfallwerte** fuer den Fall, dass ein
|
||||
Schluessel in der `.env` fehlt (in `scripts/lib/common.sh`, Funktion
|
||||
`load_env`). Es ueberschreibt niemals einen gesetzten Wert.
|
||||
|
||||
Kurz: die `.env` sagt *was* laeuft, das Skript *macht* etwas damit. Doppelt
|
||||
gepflegt werden muss nichts.
|
||||
|
||||
---
|
||||
|
||||
## 8. Erststart
|
||||
## 8. Checkmk-Image beschaffen (Raw, Enterprise & Co.)
|
||||
|
||||
### 8.1 Welche Edition liegt wo?
|
||||
|
||||
Das ist die haeufigste Stolperfalle: **die Enterprise-Edition liegt nicht auf
|
||||
Docker Hub.** Im Namensraum `checkmk` auf Docker Hub gibt es ausschliesslich:
|
||||
|
||||
| Edition (`CMK_EDITION`) | Bezugsquelle | Anmeldung |
|
||||
|---|---|---|
|
||||
| `raw` (bis 2.4) | `docker.io/checkmk/check-mk-raw` | nein |
|
||||
| `community` (ab 2.5, Nachfolger von raw) | `docker.io/checkmk/check-mk-community` | nein |
|
||||
| `cloud` | `docker.io/checkmk/check-mk-cloud` | nein |
|
||||
| `managed` (bis 2.4) | `docker.io/checkmk/check-mk-managed` | nein |
|
||||
| `pro` (ab 2.5, Nachfolger von enterprise) | `docker.io/checkmk/check-mk-pro` | nein |
|
||||
| `ultimate`, `ultimatemt` (ab 2.5) | `docker.io/checkmk/check-mk-ultimate[mt]` | nein |
|
||||
| **`enterprise` (2.0 – 2.4)** | **`registry.checkmk.com/enterprise/check-mk-enterprise`** oder Image-Tarball aus dem Kundenportal | **ja** |
|
||||
| `free` (historisch, bis 2.1) | `docker.io/checkmk/check-mk-free` | nein |
|
||||
|
||||
Ab Checkmk 2.5 wurden die Editionen umbenannt (Raw → Community,
|
||||
Enterprise → Pro, Managed → Ultimate MT); diese Images liegen wieder offen auf
|
||||
Docker Hub. Wer also eine **2.5 oder neuer** einsetzt, nimmt einfach `pro`.
|
||||
Fuer **2.2/2.3/2.4-Enterprise** fuehrt nur der Weg ueber `registry.checkmk.com`
|
||||
oder den Tarball.
|
||||
|
||||
> Frei herunterladbar heisst nicht lizenzfrei – der Lizenzschluessel wird
|
||||
> anschliessend in Checkmk selbst hinterlegt.
|
||||
|
||||
### 8.2 Zwei Podman-Fallstricke (genau die aus der Praxis)
|
||||
|
||||
**1. Kurze Image-Namen.** Podman kennt keine Vorgabe-Registry. Kurze Namen wie
|
||||
`checkmk/check-mk-enterprise:2.3.0p23` werden ueber
|
||||
`unqualified-search-registries` aus `/etc/containers/registries.conf` aufgeloest
|
||||
– auf RHEL steht dort `registry.access.redhat.com` an **erster** Stelle. Podman
|
||||
sucht das Image also bei Red Hat, findet es nicht und meldet
|
||||
`image not known` bzw. fragt interaktiv nach. Deshalb steht in `.env` und
|
||||
`docker-compose.yml` konsequent der **vollqualifizierte** Name:
|
||||
|
||||
```
|
||||
CMK_IMAGE=registry.checkmk.com/enterprise/check-mk-enterprise:2.3.0p23
|
||||
```
|
||||
|
||||
Aktuelle Auflösungsreihenfolge ansehen:
|
||||
|
||||
```bash
|
||||
grep -A3 unqualified-search-registries /etc/containers/registries.conf
|
||||
```
|
||||
|
||||
**2. `import` statt `load`.** Ein heruntergeladener Image-Tarball wird mit
|
||||
**`load`** eingespielt:
|
||||
|
||||
| Kommando | Erwartet | Ergebnis |
|
||||
|---|---|---|
|
||||
| `podman import datei.tar.gz` | ein **Dateisystem**-Archiv (rootfs) | Image **ohne** Entrypoint, ohne Umgebung, ohne Tag → unbrauchbar, „Image unbekannt“ |
|
||||
| `podman load -i datei.tar.gz` | ein **Image**-Archiv (`docker save`/OCI) | vollstaendiges Image inkl. Metadaten und Tag ✔ |
|
||||
|
||||
Ein mit `import` erzeugtes Fehl-Image wieder loswerden:
|
||||
|
||||
```bash
|
||||
podman images | grep '<none>'
|
||||
podman rmi <image-id>
|
||||
```
|
||||
|
||||
`cmk-manage.sh image load` prueft das Archiv vorher auf `manifest.json` bzw.
|
||||
`oci-layout` und weist ein falsches Archiv mit genau diesem Hinweis ab.
|
||||
|
||||
### 8.3 Zugangsdaten in der `.env` hinterlegen
|
||||
|
||||
```bash
|
||||
CMK_EDITION=enterprise
|
||||
CMK_VERSION=2.3.0p23
|
||||
|
||||
# Bezugsweg 1 - private Registry
|
||||
CMK_REGISTRY=registry.checkmk.com
|
||||
CMK_REGISTRY_USER=<benutzer-aus-dem-kundenportal>
|
||||
CMK_REGISTRY_PASSWORD=<kennwort>
|
||||
|
||||
# Bezugsweg 2 - Tarball vom Downloadportal
|
||||
CMK_DOWNLOAD_BASEURL=https://download.checkmk.com/checkmk
|
||||
CMK_DOWNLOAD_USER=<benutzer>
|
||||
CMK_DOWNLOAD_PASSWORD=<kennwort>
|
||||
```
|
||||
|
||||
Die Zugangsdaten stammen aus dem Checkmk-Kundenportal (portal.checkmk.com).
|
||||
Die `.env` sollte deshalb `chmod 600` haben – `install.sh` setzt das.
|
||||
|
||||
### 8.4 Image holen – drei Wege
|
||||
|
||||
**a) Aus einer Registry (empfohlen)**
|
||||
|
||||
```bash
|
||||
# frei verfuegbar, ohne Anmeldung
|
||||
sudo ./scripts/cmk-manage.sh image pull --edition raw --version 2.3.0-latest
|
||||
|
||||
# Enterprise mit Anmeldung an registry.checkmk.com
|
||||
sudo ./scripts/cmk-manage.sh image pull --edition enterprise --version 2.3.0p23 \
|
||||
--user <benutzer> --password <kennwort>
|
||||
```
|
||||
|
||||
**b) Image-Tarball vom Downloadportal (mit Zugangsdaten)**
|
||||
|
||||
```bash
|
||||
sudo ./scripts/cmk-manage.sh image download --edition enterprise --version 2.3.0p23 \
|
||||
--user <benutzer> --password <kennwort>
|
||||
```
|
||||
|
||||
Der Downloader probiert die ueblichen Dateinamen unter
|
||||
`<CMK_DOWNLOAD_BASEURL>/<version>/` durch
|
||||
(`check-mk-enterprise-<version>.docker.tar.gz` und
|
||||
`check-mk-enterprise-docker-<version>.tar.gz`). Falls Checkmk das Schema
|
||||
geaendert hat, laesst sich die vollstaendige URL direkt vorgeben:
|
||||
|
||||
```bash
|
||||
sudo ./scripts/cmk-manage.sh image download \
|
||||
--url 'https://download.checkmk.com/checkmk/2.3.0p23/check-mk-enterprise-2.3.0p23.docker.tar.gz' \
|
||||
--user <benutzer> --password <kennwort>
|
||||
```
|
||||
|
||||
Die Zugangsdaten werden per temporaerer `.netrc`-Datei an `curl` uebergeben und
|
||||
tauchen damit **nicht** in der Prozessliste auf.
|
||||
|
||||
**c) Bereits heruntergeladene Datei einspielen**
|
||||
|
||||
Wer die Datei im Browser aus dem Kundenportal geladen hat:
|
||||
|
||||
```bash
|
||||
sudo ./scripts/cmk-manage.sh image load --file /root/check-mk-enterprise-2.3.0p23.docker.tar.gz
|
||||
```
|
||||
|
||||
In allen drei Faellen ermittelt das Skript den **tatsaechlichen** Image-Namen
|
||||
(bei `load` z. B. `localhost/checkmk/check-mk-enterprise:2.3.0p23`) und traegt
|
||||
ihn als `CMK_IMAGE` in die `.env` ein. Danach:
|
||||
|
||||
```bash
|
||||
sudo ./scripts/cmk-manage.sh up
|
||||
```
|
||||
|
||||
### 8.5 Nachsehen, was gilt
|
||||
|
||||
```bash
|
||||
./scripts/cmk-manage.sh image status # konfiguriertes + lokale Images
|
||||
./scripts/cmk-manage.sh image list # nur lokale Checkmk-Images
|
||||
./scripts/cmk-manage.sh image use localhost/checkmk/check-mk-enterprise:2.3.0p23
|
||||
```
|
||||
|
||||
`image status` warnt ausdruecklich, wenn `CMK_IMAGE` ein kurzer Name ohne
|
||||
Registry ist.
|
||||
|
||||
In der ncurses-Oberflaeche liegt derselbe Ablauf unter dem Menuepunkt
|
||||
**„Checkmk-Image beschaffen/auswaehlen“** (Edition auswaehlen → Version →
|
||||
Zugangsdaten → holen).
|
||||
|
||||
---
|
||||
|
||||
## 9. Erststart
|
||||
|
||||
```bash
|
||||
sudo ./scripts/cmk-manage.sh up
|
||||
@@ -367,15 +573,24 @@ Zugang
|
||||
NGINX Proxy Manager : http://10.0.0.5:81/ (Erstlogin: admin@example.com / changeme)
|
||||
```
|
||||
|
||||
Der Port der Adminoberfläche folgt `NPM_ADMIN_PORT` aus der `.env`; die Ausgabe
|
||||
zeigt immer den tatsächlich eingestellten Wert.
|
||||
|
||||
```
|
||||
```
|
||||
|
||||
Anmeldung an Checkmk: Benutzer `cmkadmin`, Passwort aus `CMK_PASSWORD`.
|
||||
|
||||
---
|
||||
|
||||
## 9. HTTPS einrichten – Let's Encrypt oder selbstsigniert
|
||||
## 10. HTTPS einrichten – Let's Encrypt oder selbstsigniert
|
||||
|
||||
### 9.1 NGINX Proxy Manager vorbereiten
|
||||
|
||||
1. `http://<server>:81` aufrufen
|
||||
1. `http://<server>:81` aufrufen – bzw. den in `NPM_ADMIN_PORT` gesetzten Port
|
||||
(siehe [Kapitel 12](#12-adminoberfläche-auf-einen-anderen-port-legen));
|
||||
ist der Port im Netz gesperrt, hilft der Terminal-Browser aus
|
||||
[Kapitel 11](#11-proxy-manager-lokal-einrichten-terminal-browser)
|
||||
2. Erstanmeldung: **admin@example.com** / **changeme**
|
||||
3. Sofort E-Mail-Adresse und Passwort ändern (wird beim ersten Login erzwungen)
|
||||
|
||||
@@ -458,7 +673,243 @@ Zertifikat erzeugen“*.
|
||||
|
||||
---
|
||||
|
||||
## 10. Firewall
|
||||
## 11. Proxy Manager lokal einrichten (Terminal-Browser)
|
||||
|
||||
Wenn Port 81 aus dem Netz nicht erreichbar ist, muss die Adminoberfläche des
|
||||
NGINX Proxy Managers **auf der Maschine selbst** bedient werden. Dafür startet
|
||||
`cmk-manage.sh browser` einen weiteren Container im Host-Netzwerk – der erreicht
|
||||
`127.0.0.1:81` genauso wie der Proxy Manager selbst.
|
||||
|
||||
```bash
|
||||
sudo ./scripts/cmk-manage.sh browser
|
||||
```
|
||||
|
||||
Das ist bewusst **kein** Dienst in der `docker-compose.yml`: ein Browser ist ein
|
||||
interaktives Programm mit Terminal, kein Hintergrunddienst. Er wird mit
|
||||
`run --rm -it` gestartet und verschwindet beim Beenden wieder rückstandslos.
|
||||
|
||||
### 11.1 Warum kein `lynx`
|
||||
|
||||
Die Adminoberfläche des Proxy Managers ist eine JavaScript-Anwendung. Klassische
|
||||
Textbrowser können sie **nicht** darstellen – man sieht eine leere Seite. Es
|
||||
gibt deshalb zwei Engines, die einen vollwertigen Browser im Terminal rendern:
|
||||
|
||||
| Engine | Basis | JavaScript | Proxy Manager bedienbar |
|
||||
|---|---|---|---|
|
||||
| `browsh` | Firefox | ja | **ja** – Vorgabe, gepflegt |
|
||||
| `carbonyl` | Chromium | ja | **ja** – schönere Darstellung, Stand 2023 |
|
||||
| `links` (links2) | Textbrowser | nein | nein |
|
||||
| `w3m` | Textbrowser | nein | nein |
|
||||
| `lynx` | Textbrowser | nein | nein |
|
||||
| `shell` | Bash + curl/jq/openssl | – | für Diagnose und die API |
|
||||
|
||||
Die Textbrowser sind trotzdem eingebaut, weil sie für schnelle Prüfungen
|
||||
praktisch sind. Wählt man sie, warnt das Skript ausdrücklich.
|
||||
|
||||
### 11.2 Bedienung
|
||||
|
||||
```bash
|
||||
# Vorgabe: browsh auf http://127.0.0.1:81
|
||||
sudo ./scripts/cmk-manage.sh browser
|
||||
|
||||
# andere Engine oder andere Seite
|
||||
sudo ./scripts/cmk-manage.sh browser --engine carbonyl
|
||||
sudo ./scripts/cmk-manage.sh browser --engine links --url http://127.0.0.1:5000/cmk/
|
||||
|
||||
# Shell mit Netzwerkwerkzeugen im Host-Netzwerk
|
||||
sudo ./scripts/cmk-manage.sh browser --engine shell
|
||||
```
|
||||
|
||||
Tastenbelegung in **browsh**:
|
||||
|
||||
| Taste | Wirkung |
|
||||
|---|---|
|
||||
| `Strg+L` | Adresszeile |
|
||||
| `Strg+T` | neuer Tab |
|
||||
| `Strg+W` | Tab schließen |
|
||||
| `Strg+Q` | beenden |
|
||||
|
||||
Beim ersten Aufruf einer Textbrowser- oder `shell`-Engine baut das Skript ein
|
||||
kleines Werkzeug-Image (Debian slim mit links2, w3m, lynx, curl, jq, openssl,
|
||||
rund 170 MB). Vorab bauen – auch ohne Terminal, etwa im Installationsskript:
|
||||
|
||||
```bash
|
||||
sudo ./scripts/cmk-manage.sh browser --build-only
|
||||
```
|
||||
|
||||
`browsh` und `carbonyl` werden dagegen als fertige Images geladen; die Namen
|
||||
stehen in der `.env` (`BROWSH_IMAGE`, `CARBONYL_IMAGE`) und sind
|
||||
vollqualifiziert, damit Podman sie nicht bei `registry.access.redhat.com` sucht.
|
||||
|
||||
In der ncurses-Oberfläche liegt alles unter **„Terminal-Browser (Proxy Manager
|
||||
lokal bedienen)"**.
|
||||
|
||||
### 11.3 Grenze: Datei-Upload
|
||||
|
||||
Ein Terminal-Browser kann keinen Dateiauswahl-Dialog des Betriebssystems
|
||||
öffnen. Für **Let's Encrypt** ist das egal (dort werden nur Formularfelder
|
||||
ausgefüllt), aber das Hochladen eines **selbstsignierten Zertifikats**
|
||||
(*SSL Certificates → Custom*) funktioniert so nicht zuverlässig.
|
||||
|
||||
Für genau diesen Fall führt der Weg über die REST-Schnittstelle des Proxy
|
||||
Managers. Zertifikat wie in [Kapitel 10.4](#10-https-einrichten--lets-encrypt-oder-selbstsigniert)
|
||||
erzeugen, dann:
|
||||
|
||||
```bash
|
||||
NPM=http://127.0.0.1:81
|
||||
CERTDIR=./data/npm/custom-certs/checkmk.intern.example
|
||||
|
||||
# 1) Anmelden und Token holen
|
||||
TOKEN=$(curl -s -X POST "$NPM/api/tokens" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"identity":"admin@example.com","secret":"<kennwort>"}' | jq -r .token)
|
||||
|
||||
# 2) Zertifikatseintrag anlegen (provider "other" = eigenes Zertifikat)
|
||||
CERT_ID=$(curl -s -X POST "$NPM/api/nginx/certificates" \
|
||||
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
|
||||
-d '{"provider":"other","nice_name":"checkmk-selfsigned","domain_names":["checkmk.intern.example"]}' \
|
||||
| jq -r .id)
|
||||
|
||||
# 3) Schlüssel und Zertifikat hochladen
|
||||
curl -s -X POST "$NPM/api/nginx/certificates/$CERT_ID/upload" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-F "certificate=@$CERTDIR/fullchain.pem" \
|
||||
-F "certificate_key=@$CERTDIR/privkey.pem"
|
||||
|
||||
# 4) Proxy-Host für Checkmk anlegen
|
||||
curl -s -X POST "$NPM/api/nginx/proxy-hosts" \
|
||||
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
|
||||
-d "{\"domain_names\":[\"checkmk.intern.example\"],
|
||||
\"forward_scheme\":\"http\",
|
||||
\"forward_host\":\"127.0.0.1\",
|
||||
\"forward_port\":5000,
|
||||
\"certificate_id\":$CERT_ID,
|
||||
\"ssl_forced\":true,
|
||||
\"http2_support\":true,
|
||||
\"block_exploits\":true,
|
||||
\"allow_websocket_upgrade\":true,
|
||||
\"advanced_config\":\"client_max_body_size 0;\",
|
||||
\"enabled\":true,
|
||||
\"meta\":{}}"
|
||||
```
|
||||
|
||||
`curl` und `jq` sind im Werkzeug-Image enthalten, falls der Host sie nicht hat:
|
||||
|
||||
```bash
|
||||
sudo ./scripts/cmk-manage.sh browser --engine shell
|
||||
```
|
||||
|
||||
> Beim allerersten Login erzwingt der Proxy Manager das Ändern von
|
||||
> E-Mail-Adresse und Kennwort. Das geht am einfachsten im Browser
|
||||
> (`cmk-manage.sh browser`); danach funktioniert die API mit den neuen Daten.
|
||||
|
||||
### 11.4 Alternative: SSH-Tunnel
|
||||
|
||||
Falls SSH auf die Maschine möglich ist, ist der Tunnel der bequemste Weg –
|
||||
dann bedient man die Oberfläche im gewohnten Browser:
|
||||
|
||||
```bash
|
||||
ssh -N -L 8081:127.0.0.1:81 benutzer@checkmk-server
|
||||
# danach lokal: http://127.0.0.1:8081
|
||||
```
|
||||
|
||||
Das ändert nichts an der Firewall: Port 81 bleibt von außen dicht, der Zugriff
|
||||
läuft durch die bestehende SSH-Verbindung.
|
||||
|
||||
---
|
||||
|
||||
## 12. Adminoberfläche auf einen anderen Port legen
|
||||
|
||||
Die Weboberfläche des NGINX Proxy Managers hört im Image **fest auf Port 81**
|
||||
(`listen 81 default;` in `/etc/nginx/conf.d/production.conf`). Eine
|
||||
Umgebungsvariable dafür gibt es in den veröffentlichten 2.x-Versionen noch
|
||||
nicht – im Entwicklungszweig ist `NPM_ADMIN_PORT` bereits vorbereitet, in
|
||||
Version 2.15.1 aber noch nicht enthalten. Und weil beide Container im
|
||||
Host-Netzwerk laufen, lässt sich der Port auch nicht per Port-Mapping
|
||||
verschieben.
|
||||
|
||||
Ist Port 81 im Netz gesperrt, hilft deshalb:
|
||||
|
||||
```bash
|
||||
sudo ./scripts/cmk-manage.sh npm-port 10443
|
||||
```
|
||||
|
||||
### 12.1 Was dabei passiert
|
||||
|
||||
nginx bindet innerhalb seines `http{}`-Blocks einen offiziellen
|
||||
Erweiterungspunkt ein:
|
||||
|
||||
```
|
||||
include /data/nginx/custom/http.conf;
|
||||
```
|
||||
|
||||
`/data` ist unser Bind-Mount `./data/npm/data`. Dort legt das Kommando einen
|
||||
zusätzlichen Server an, der auf dem gewünschten Port lauscht und an die
|
||||
Oberfläche auf `127.0.0.1:81` weiterreicht:
|
||||
|
||||
```
|
||||
./data/npm/data/nginx/custom/http.conf
|
||||
|
||||
# >>> cmk-manage.sh: Admin-Port - nicht von Hand aendern >>>
|
||||
server {
|
||||
listen 10443;
|
||||
listen [::]:10443;
|
||||
server_name _;
|
||||
client_max_body_size 0;
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:81;
|
||||
...
|
||||
}
|
||||
}
|
||||
# <<< cmk-manage.sh: Admin-Port <<<
|
||||
```
|
||||
|
||||
Nur der Bereich zwischen den beiden Markierungen wird verwaltet – eigene
|
||||
Ergänzungen in derselben Datei bleiben unangetastet. Anschließend startet das
|
||||
Skript den Proxy-Manager-Container neu, damit nginx die Datei liest, und trägt
|
||||
`NPM_ADMIN_PORT` sowie `NPM_ADMIN_URL` in die `.env` ein. Der Terminal-Browser
|
||||
aus [Kapitel 11](#11-proxy-manager-lokal-einrichten-terminal-browser) startet
|
||||
dann automatisch auf dem neuen Port.
|
||||
|
||||
### 12.2 Wichtig: Port 81 bleibt lokal bestehen
|
||||
|
||||
Der eingebaute Server auf Port 81 lässt sich so **nicht** abschalten – er
|
||||
lauscht weiter auf allen Adressen. Das ist unkritisch, solange die Firewall ihn
|
||||
sperrt, und genau so ist die Empfehlung:
|
||||
|
||||
```bash
|
||||
# firewalld
|
||||
sudo firewall-cmd --permanent --add-port=10443/tcp
|
||||
sudo firewall-cmd --permanent --remove-port=81/tcp 2>/dev/null
|
||||
sudo firewall-cmd --reload
|
||||
|
||||
# ufw
|
||||
sudo ufw allow 10443/tcp
|
||||
sudo ufw delete allow 81/tcp 2>/dev/null
|
||||
```
|
||||
|
||||
### 12.3 Stand ansehen und zurücksetzen
|
||||
|
||||
```bash
|
||||
./scripts/cmk-manage.sh npm-port # aktuellen Stand anzeigen
|
||||
sudo ./scripts/cmk-manage.sh npm-port 81 # zurück auf die Vorgabe
|
||||
```
|
||||
|
||||
Bei `81` wird der verwaltete Block wieder entfernt; ist die Datei danach leer,
|
||||
verschwindet sie ganz. Es gilt dann wieder ausschließlich die Konfiguration aus
|
||||
dem Image.
|
||||
|
||||
Das Kommando lehnt Ports ab, die im Stack schon vergeben sind (80, 443, 5000,
|
||||
8000, 6557), prüft den Zahlenbereich und warnt, wenn auf dem Wunschport bereits
|
||||
ein anderer Dienst lauscht.
|
||||
|
||||
> Sobald eine NPM-Version mit `NPM_ADMIN_PORT` erscheint, wird dieser Umweg
|
||||
> überflüssig – dann genügt die Umgebungsvariable. Bis dahin ist der
|
||||
> Erweiterungspunkt der Weg, der ohne Änderung am Image auskommt.
|
||||
|
||||
---
|
||||
|
||||
## 13. Firewall
|
||||
|
||||
**firewalld (RHEL/Rocky/Alma):**
|
||||
|
||||
@@ -468,6 +919,9 @@ sudo firewall-cmd --permanent --add-service=https
|
||||
sudo firewall-cmd --permanent --add-port=8000/tcp # Agent-Receiver
|
||||
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 port port=81 protocol=tcp accept'
|
||||
sudo firewall-cmd --reload
|
||||
|
||||
# Bei abweichendem Admin-Port (z.B. 10443) stattdessen dessen Nummer freigeben -
|
||||
# das passende Kommando gibt "cmk-manage.sh npm-port <port>" direkt aus.
|
||||
```
|
||||
|
||||
**ufw (Debian/Ubuntu):**
|
||||
@@ -485,7 +939,7 @@ Proxy. Port **81** nur aus dem Administrationsnetz freigeben.
|
||||
|
||||
---
|
||||
|
||||
## 11. Verwaltung: `cmk-manage.sh`
|
||||
## 14. Verwaltung: `cmk-manage.sh`
|
||||
|
||||
Das Skript ist gleichzeitig Kommandozeilenwerkzeug **und** ncurses-Oberfläche.
|
||||
|
||||
@@ -508,8 +962,10 @@ sudo ./scripts/cmk-manage.sh gui
|
||||
│ import Site von Direktinstallation importieren │
|
||||
│ manage Backups verwalten (Liste/Details/Löschen) │
|
||||
│ sites Sites im Container verwalten │
|
||||
│ image Checkmk-Image beschaffen/auswählen │
|
||||
│ browser Terminal-Browser (Proxy Manager lokal) │
|
||||
│ cert Selbstsigniertes Zertifikat erzeugen │
|
||||
│ env Konfiguration (.env) ansehen/bearbeiten │
|
||||
│ config Einstellungen (.env) - menügeführt │
|
||||
│ shell Root-Shell im Checkmk-Container │
|
||||
│ quit Beenden │
|
||||
│ < OK > <Cancel> │
|
||||
@@ -539,6 +995,10 @@ Eine Dateiauswahl mit Verzeichnisnavigation ist eingebaut.
|
||||
| `list` / `verify` / `prune --keep N` | Backups verwalten |
|
||||
| `restore …` | Backup zurückspielen |
|
||||
| `import …` | Migrations-Bundle einspielen |
|
||||
| `image status\|list\|pull\|download\|load\|use` | Checkmk-Image beschaffen und auswaehlen |
|
||||
| `browser [--engine …]` | Terminal-Browser im Container – Proxy Manager lokal bedienen |
|
||||
| `config list\|get\|set\|edit` | Einstellungen der `.env` anzeigen und ändern |
|
||||
| `npm-port [PORT]` | Port der Proxy-Manager-Oberfläche setzen/anzeigen |
|
||||
| `cert …` | selbstsigniertes Zertifikat erzeugen |
|
||||
| `shell` | Root-Shell im Checkmk-Container |
|
||||
| `omd …` | beliebiges `omd`-Kommando im Container |
|
||||
@@ -546,9 +1006,66 @@ Eine Dateiauswahl mit Verzeichnisnavigation ist eingebaut.
|
||||
Globale Optionen: `--env-file DATEI`, `-y/--yes` (keine Rückfragen, z. B. für
|
||||
Cronjobs), `-v/--verbose`.
|
||||
|
||||
### 14.3 Einstellungen ändern – ohne Editor
|
||||
|
||||
Sämtliche Werte der `.env` lassen sich über das Menü pflegen. In der
|
||||
Oberfläche: **Einstellungen (.env) – menügeführt**. Die Werte sind nach
|
||||
Bereichen gruppiert:
|
||||
|
||||
```
|
||||
┌──────────────────── Einstellungen ─────────────────────┐
|
||||
│ Alle Werte der Datei .env - direkt hier änderbar. │
|
||||
│ Datei: /opt/checkmk-stack/.env │
|
||||
│ │
|
||||
│ runtime Runtime und Zeitzone │
|
||||
│ image Checkmk-Image und Zugangsdaten │
|
||||
│ checkmk Checkmk-Site und Container │
|
||||
│ npm NGINX Proxy Manager │
|
||||
│ browser Terminal-Browser │
|
||||
│ paths Verzeichnisse │
|
||||
│ cert Selbstsignierte Zertifikate │
|
||||
│ show Alle Werte auflisten │
|
||||
│ editor Datei .env im Editor öffnen │
|
||||
│ back zurück │
|
||||
└────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
Jeder Eintrag zeigt seinen aktuellen Wert und öffnet beim Bestätigen die
|
||||
passende Eingabe: Freitext, Zahl, Auswahlliste oder Kennwortfeld (Kennwörter
|
||||
erscheinen in der Übersicht als `********` und bleiben unverändert, wenn man
|
||||
das Feld leer lässt). Der Editor bleibt als Menüpunkt erhalten.
|
||||
|
||||
Dieselben Werte über die Kommandozeile:
|
||||
|
||||
```bash
|
||||
./scripts/cmk-manage.sh config list # alles mit aktuellen Werten
|
||||
./scripts/cmk-manage.sh config list --category npm # nur ein Bereich
|
||||
./scripts/cmk-manage.sh config get CMK_SITE_ID
|
||||
./scripts/cmk-manage.sh config set CMK_SITE_ID prod
|
||||
./scripts/cmk-manage.sh config set NPM_ADMIN_PORT 10443
|
||||
```
|
||||
|
||||
**Geprüft wird beim Setzen**, nicht erst beim nächsten Start:
|
||||
|
||||
| Schlüssel | Prüfung |
|
||||
|---|---|
|
||||
| `NPM_ADMIN_PORT` | Zahl 1–65535, nicht 80/443/5000/8000/6557, Warnung wenn belegt |
|
||||
| `CMK_SITE_ID` | nur Buchstaben, Ziffern, `_`; höchstens 16 Zeichen |
|
||||
| `CMK_IMAGE`, `NPM_IMAGE`, … | muss vollqualifiziert sein (Podman-Fallstrick) |
|
||||
| `CMK_RUNTIME` | muss auf diesem System installiert sein |
|
||||
| `CERT_DAYS` u. a. | Zahlenfelder |
|
||||
| URL-Felder | müssen mit `http://` oder `https://` beginnen |
|
||||
|
||||
Werte mit Leerzeichen werden automatisch in Anführungszeichen gesetzt, damit
|
||||
die `.env` weiterhin von compose, systemd **und** der Shell gelesen werden
|
||||
kann. Ändert man `NPM_ADMIN_PORT`, zieht das Skript die nginx-Zusatzdatei
|
||||
automatisch mit (siehe [Kapitel 12](#12-adminoberfläche-auf-einen-anderen-port-legen)).
|
||||
Bei Werten, die erst nach dem Neuerstellen der Container greifen, weist das
|
||||
Menü ausdrücklich darauf hin.
|
||||
|
||||
---
|
||||
|
||||
## 12. Backup
|
||||
## 15. Backup
|
||||
|
||||
Backups werden mit `omd backup` erstellt und als **Bundle** verpackt:
|
||||
|
||||
@@ -599,7 +1116,7 @@ sudo crontab -e
|
||||
|
||||
---
|
||||
|
||||
## 13. Restore
|
||||
## 16. Restore
|
||||
|
||||
```bash
|
||||
# Einfachster Fall: Site existiert nicht mehr
|
||||
@@ -630,7 +1147,7 @@ der Site-Name wird dann aus dem Archiv gelesen.
|
||||
|
||||
---
|
||||
|
||||
## 14. Migration einer Direktinstallation (`migrate_creator.sh`)
|
||||
## 17. Migration einer Direktinstallation (`migrate_creator.sh`)
|
||||
|
||||
Ziel: eine bestehende Checkmk-Installation auf Blech/VM in den Container
|
||||
übernehmen – **ohne die Agents anzufassen**.
|
||||
@@ -714,21 +1231,32 @@ Checkmk-Version im Zielsystem installiert ist.** Im Container kommt die Version
|
||||
aus dem Image – also muss der Image-Tag passen:
|
||||
|
||||
```bash
|
||||
grep CMK_VERSION <(tar -xzOf backups/cmkmigrate_prod_*.tar.gz cmkbundle/MANIFEST)
|
||||
# CMK_VERSION=2.3.0p23.cre -> Image-Tag: 2.3.0p23
|
||||
tar -xzOf backups/cmkmigrate_prod_*.tar.gz cmkbundle/MANIFEST | grep CMK_VERSION
|
||||
# CMK_VERSION=2.3.0p23.cre -> Version 2.3.0p23, Endung .cre = Raw Edition
|
||||
|
||||
sudo $EDITOR .env
|
||||
# CMK_IMAGE_TAG=2.3.0p23
|
||||
# passendes Image holen und als CMK_IMAGE eintragen lassen
|
||||
sudo ./scripts/cmk-manage.sh image pull --edition raw --version 2.3.0p23
|
||||
sudo ./scripts/cmk-manage.sh up
|
||||
```
|
||||
|
||||
Bei einer Enterprise-Quelle (`.cee`) entsprechend:
|
||||
|
||||
```bash
|
||||
sudo ./scripts/cmk-manage.sh image pull --edition enterprise --version 2.3.0p23 \
|
||||
--user <benutzer> --password <kennwort>
|
||||
# oder, wenn die Registry nicht erreichbar ist:
|
||||
sudo ./scripts/cmk-manage.sh image download --edition enterprise --version 2.3.0p23 \
|
||||
--user <benutzer> --password <kennwort>
|
||||
```
|
||||
|
||||
Das Import-Skript prüft das selbst und bricht mit einer entsprechenden Meldung
|
||||
ab, wenn die Version fehlt.
|
||||
|
||||
> **Edition beachten:** `.cre` = Raw Edition → `checkmk/check-mk-raw`.
|
||||
> Bei `.cee` / `.cce` / `.cme` wird das entsprechende Enterprise-/Cloud-Image
|
||||
> benötigt (`CMK_IMAGE_REPO=checkmk/check-mk-enterprise`, Zugang über die
|
||||
> Checkmk-Subskription).
|
||||
> **Edition beachten:** die Endung der Version verrät sie –
|
||||
> `.cre` = Raw, `.cee` = Enterprise, `.cce` = Cloud, `.cme` = Managed.
|
||||
> Das Import-Skript liest sie aus dem Manifest und nennt im Fehlerfall direkt
|
||||
> das passende `image pull`-Kommando. Enterprise-Images gibt es **nicht** auf
|
||||
> Docker Hub – siehe [Kapitel 8](#8-checkmk-image-beschaffen-raw-enterprise--co).
|
||||
|
||||
### 14.5 Schritt 4 – Bundle importieren
|
||||
|
||||
@@ -792,7 +1320,7 @@ Danach in der Oberfläche prüfen:
|
||||
- [ ] `migrate_creator.sh` auf den Quellserver kopiert
|
||||
- [ ] Bundle erzeugt (möglichst mit `--stop`)
|
||||
- [ ] Bundle auf das Zielsystem kopiert (`backups/`)
|
||||
- [ ] `CMK_IMAGE_TAG` auf die Quellversion gesetzt, Stack neu erstellt
|
||||
- [ ] passendes Image geholt (`image pull`/`image download`), `CMK_IMAGE` gesetzt, Stack neu erstellt
|
||||
- [ ] `import --set-default-site` ausgeführt, Site läuft
|
||||
- [ ] Alte Site gestoppt / alter Server abgeschaltet
|
||||
- [ ] IP bzw. DNS auf das Zielsystem umgestellt
|
||||
@@ -803,7 +1331,7 @@ Danach in der Oberfläche prüfen:
|
||||
|
||||
---
|
||||
|
||||
## 15. Mehrere Sites in einem Container
|
||||
## 18. Mehrere Sites in einem Container
|
||||
|
||||
Der Checkmk-Entrypoint legt beim Start nur die Site aus `CMK_SITE_ID` an und
|
||||
startet auch nur diese. Weitere Sites (z. B. mehrere importierte) existieren im
|
||||
@@ -827,7 +1355,7 @@ vorhandenen Sites.
|
||||
|
||||
---
|
||||
|
||||
## 16. Checkmk aktualisieren
|
||||
## 19. Checkmk aktualisieren
|
||||
|
||||
Da `/omd/sites` ein Bind-Mount ist, überleben die Daten den Austausch des
|
||||
Images. Die Checkmk-Software selbst steckt im Image unter `/omd/versions`.
|
||||
@@ -836,11 +1364,10 @@ Images. Die Checkmk-Software selbst steckt im Image unter `/omd/versions`.
|
||||
# 1) IMMER zuerst sichern
|
||||
sudo ./scripts/cmk-manage.sh backup --all --label vor-update
|
||||
|
||||
# 2) neuen Tag eintragen
|
||||
sudo $EDITOR .env # z.B. CMK_IMAGE_TAG=2.3.0p28
|
||||
# 2) neues Image holen (traegt CMK_IMAGE automatisch in die .env ein)
|
||||
sudo ./scripts/cmk-manage.sh image pull --edition raw --version 2.3.0p28
|
||||
|
||||
# 3) Image holen und Container neu erstellen
|
||||
sudo ./scripts/cmk-manage.sh pull
|
||||
# 3) Container neu erstellen
|
||||
sudo ./scripts/cmk-manage.sh up
|
||||
|
||||
# 4) Site aktualisieren (interaktiv, Konflikte bestätigen)
|
||||
@@ -854,19 +1381,29 @@ Checkmk-Werksnotizen (Werks/Release Notes) lesen.
|
||||
|
||||
---
|
||||
|
||||
## 17. Fehlersuche
|
||||
## 20. Fehlersuche
|
||||
|
||||
| Symptom | Ursache / Lösung |
|
||||
|---|---|
|
||||
| `Port 80/443 already in use` | Auf dem Host läuft bereits ein Webserver: `ss -tlnp \| grep ':80'` → `systemctl disable --now apache2 nginx httpd` |
|
||||
| Nach Reboot laufen die Container nicht (Podman) | systemd-Unit fehlt: `./install.sh --with-systemd` bzw. `--quadlet`, danach `systemctl is-enabled checkmk-stack` |
|
||||
| `omd restore`: *version is not installed* | `CMK_IMAGE_TAG` in der `.env` auf die Version aus dem `MANIFEST` setzen und `up` ausführen |
|
||||
| Import bricht mit Editions-Warnung ab | Enterprise-Backup benötigt das Enterprise-Image (`CMK_IMAGE_REPO`) |
|
||||
| `omd restore`: *version is not installed* | passendes Image holen: `cmk-manage.sh image pull --edition <ed> --version <v>`, dann `up` |
|
||||
| Import bricht mit Editions-Warnung ab | Enterprise-Backup benötigt ein Enterprise-Image, siehe [Kapitel 8](#8-checkmk-image-beschaffen-raw-enterprise--co) |
|
||||
| `image not known` / Podman sucht bei `registry.access.redhat.com` | kurzer Image-Name. `CMK_IMAGE` vollqualifiziert setzen: `cmk-manage.sh image use docker.io/…` bzw. `registry.checkmk.com/enterprise/…` |
|
||||
| `checkmk/check-mk-enterprise` nicht auf Docker Hub gefunden | richtig so – Enterprise liegt nur auf `registry.checkmk.com` oder als Tarball vor; ab 2.5 heißt die Edition `pro` und liegt frei auf Docker Hub |
|
||||
| Tarball mit `podman import` eingespielt, Image „unbekannt“ | `import` erzeugt ein Image ohne Metadaten. Fehl-Image mit `podman rmi <id>` entfernen und `cmk-manage.sh image load --file …` verwenden (nutzt `load`) |
|
||||
| Download des Image-Tarballs schlägt fehl (401/404) | Zugangsdaten des Kundenportals prüfen, exakte Version angeben (kein `-latest`), notfalls `image download --url '<vollständige URL>'` |
|
||||
| Proxy zeigt `502 Bad Gateway` | Checkmk-Container läuft nicht oder Weiterleitung nicht auf `127.0.0.1:5000` gesetzt: `./scripts/cmk-manage.sh status`, `curl -I http://127.0.0.1:5000/` |
|
||||
| Let's Encrypt schlägt fehl | Port 80 aus dem Internet nicht erreichbar oder DNS falsch; Alternative: DNS-Challenge oder selbstsigniertes Zertifikat |
|
||||
| Agents melden sich nach der Migration nicht | Site-Name geändert (`--as-site`), IP nicht übernommen oder Port 8000 blockiert; auf dem Agent prüfen: `cmk-agent-ctl status` |
|
||||
| Permission denied auf `data/` unter RHEL | SELinux: `restorecon -Rv /opt/checkmk-stack/data`, `:Z` an den Mounts prüfen |
|
||||
| `podman-compose` nicht gefunden | EPEL aktivieren oder auf Quadlet umstellen (`./install.sh --quadlet`) |
|
||||
| Adminoberfläche aus dem LAN nicht erreichbar | Port 81 gesperrt. Auf einen freien Port legen: `cmk-manage.sh npm-port 10443` und in der Firewall freigeben |
|
||||
| Nach `npm-port` antwortet der neue Port nicht | Proxy Manager wurde nicht neu gestartet: `cmk-manage.sh restart`; Datei prüfen: `data/npm/data/nginx/custom/http.conf` |
|
||||
| `cmk-manage.sh` bricht mit „CMK_RUNTIME … ist nicht installiert" ab | wird nur noch gewarnt und selbst gesucht; sauber setzen mit `config set CMK_RUNTIME auto` |
|
||||
| Proxy-Manager-Oberfläche im Browser leer / nur Textfragmente | Textbrowser ohne JavaScript verwendet. `cmk-manage.sh browser --engine browsh` (bzw. `carbonyl`) nehmen |
|
||||
| Selbstsigniertes Zertifikat lässt sich im Terminal-Browser nicht hochladen | Datei-Dialoge gibt es dort nicht – Upload über die API, siehe [Kapitel 11.3](#11-proxy-manager-lokal-einrichten-terminal-browser) |
|
||||
| `browser` meldet „braucht ein echtes Terminal" | Aufruf aus Pipe/Skript. Direkt auf der Konsole oder per SSH aufrufen; nur der Bau geht headless mit `--build-only` |
|
||||
| TUI startet nicht | `dialog` installieren: `apt-get install -y dialog` bzw. `dnf install -y dialog` |
|
||||
| Site startet nicht, `tmp`-Fehler | `./scripts/cmk-manage.sh omd config <site> set TMPFS off`, danach Site starten |
|
||||
|
||||
@@ -881,7 +1418,7 @@ docker exec -it checkmk omd su cmk # bzw. podman exec …
|
||||
|
||||
---
|
||||
|
||||
## 18. Sicherheitshinweise
|
||||
## 21. Sicherheitshinweise
|
||||
|
||||
* `CMK_PASSWORD` sofort nach der Installation in der Oberfläche ändern und aus
|
||||
der `.env` entfernen (wird nur bei der Neuanlage ausgewertet);
|
||||
@@ -900,7 +1437,7 @@ docker exec -it checkmk omd su cmk # bzw. podman exec …
|
||||
|
||||
---
|
||||
|
||||
## 19. Deinstallation
|
||||
## 22. Deinstallation
|
||||
|
||||
```bash
|
||||
sudo ./scripts/cmk-manage.sh down
|
||||
@@ -913,10 +1450,13 @@ sudo rm -f /etc/containers/systemd/checkmk.container \
|
||||
/etc/containers/systemd/nginx-proxy-manager.container
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
# Images entfernen
|
||||
docker image rm checkmk/check-mk-raw:2.3.0-latest jc21/nginx-proxy-manager:2
|
||||
# Images entfernen (Namen aus "cmk-manage.sh image list")
|
||||
docker image rm docker.io/checkmk/check-mk-raw:2.3.0-latest docker.io/jc21/nginx-proxy-manager:2
|
||||
# podman image rm …
|
||||
|
||||
# ggf. gespeicherte Registry-Anmeldung entfernen
|
||||
podman logout registry.checkmk.com # bzw. docker logout
|
||||
|
||||
# Daten (ACHTUNG: löscht die komplette Überwachung!)
|
||||
sudo rm -rf /opt/checkmk-stack/data
|
||||
```
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
# =====================================================================
|
||||
# Kleines Werkzeug-Image fuer die lokale Bedienung/Diagnose des Stacks.
|
||||
#
|
||||
# Enthaelt Textbrowser und Netzwerkwerkzeuge. ACHTUNG: Textbrowser
|
||||
# koennen KEIN JavaScript - die Admin-Oberflaeche des NGINX Proxy
|
||||
# Managers laesst sich damit NICHT bedienen. Dafuer sind die Engines
|
||||
# "browsh" oder "carbonyl" vorgesehen (siehe cmk-manage.sh browser).
|
||||
#
|
||||
# Bauen: ./scripts/cmk-manage.sh browser --build
|
||||
# Nutzen: ./scripts/cmk-manage.sh browser --engine links
|
||||
# ./scripts/cmk-manage.sh browser --engine shell
|
||||
# =====================================================================
|
||||
FROM docker.io/library/debian:stable-slim
|
||||
|
||||
LABEL org.opencontainers.image.title="checkmk-stack browser tools" \
|
||||
org.opencontainers.image.description="Textbrowser und Netzwerkwerkzeuge fuer die lokale Bedienung"
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
links2 \
|
||||
w3m \
|
||||
lynx \
|
||||
curl \
|
||||
ca-certificates \
|
||||
openssl \
|
||||
jq \
|
||||
less \
|
||||
iproute2 \
|
||||
iputils-ping \
|
||||
procps \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ENV TERM=xterm-256color \
|
||||
LANG=C.UTF-8
|
||||
|
||||
WORKDIR /root
|
||||
CMD ["/bin/bash"]
|
||||
+6
-2
@@ -15,7 +15,11 @@ services:
|
||||
# Port 6557 = Livestatus (nur wenn CMK_LIVESTATUS_TCP=on)
|
||||
# -------------------------------------------------------------------
|
||||
checkmk:
|
||||
image: ${CMK_IMAGE_REPO:-checkmk/check-mk-raw}:${CMK_IMAGE_TAG:-2.3.0-latest}
|
||||
# Vollqualifizierter Name! Wird aus der .env genommen und ggf. von
|
||||
# "cmk-manage.sh image ..." dort eingetragen. Kurze Namen wuerde Podman
|
||||
# ueber unqualified-search-registries aufloesen (auf RHEL zuerst
|
||||
# registry.access.redhat.com) und das Image nicht finden.
|
||||
image: ${CMK_IMAGE:-docker.io/checkmk/check-mk-raw:2.3.0-latest}
|
||||
container_name: ${CMK_CONTAINER_NAME:-checkmk}
|
||||
hostname: ${CMK_HOSTNAME:-checkmk}
|
||||
network_mode: host
|
||||
@@ -51,7 +55,7 @@ services:
|
||||
# Port 81 = Admin-Oberflaeche (unbedingt per Firewall einschraenken!)
|
||||
# -------------------------------------------------------------------
|
||||
nginx-proxy-manager:
|
||||
image: ${NPM_IMAGE:-jc21/nginx-proxy-manager:2}
|
||||
image: ${NPM_IMAGE:-docker.io/jc21/nginx-proxy-manager:2}
|
||||
container_name: ${NPM_CONTAINER_NAME:-nginx-proxy-manager}
|
||||
network_mode: host
|
||||
restart: unless-stopped
|
||||
|
||||
+11
-4
@@ -159,8 +159,10 @@ log "Bereite Projektverzeichnis vor ..."
|
||||
mkdir -p "$PROJECT_DIR/data/checkmk/sites" \
|
||||
"$PROJECT_DIR/data/npm/data" \
|
||||
"$PROJECT_DIR/data/npm/letsencrypt" \
|
||||
"$PROJECT_DIR/data/npm/data/nginx/custom" \
|
||||
"$PROJECT_DIR/data/npm/custom-certs" \
|
||||
"$PROJECT_DIR/backups"
|
||||
"$PROJECT_DIR/backups" \
|
||||
"$PROJECT_DIR/images"
|
||||
chmod +x "$PROJECT_DIR"/scripts/*.sh "$PROJECT_DIR/install.sh" 2>/dev/null || true
|
||||
|
||||
if [ ! -f "$PROJECT_DIR/.env" ]; then
|
||||
@@ -238,8 +240,8 @@ install_quadlet_units() {
|
||||
local f
|
||||
for f in "$PROJECT_DIR"/systemd/quadlet/*.container; do
|
||||
sed -e "s|__PROJECT_DIR__|$PROJECT_DIR|g" \
|
||||
-e "s|__CMK_IMAGE__|${CMK_IMAGE_REPO:-checkmk/check-mk-raw}:${CMK_IMAGE_TAG:-2.3.0-latest}|g" \
|
||||
-e "s|__NPM_IMAGE__|${NPM_IMAGE:-jc21/nginx-proxy-manager:2}|g" \
|
||||
-e "s|__CMK_IMAGE__|${CMK_IMAGE:-docker.io/checkmk/check-mk-raw:2.3.0-latest}|g" \
|
||||
-e "s|__NPM_IMAGE__|${NPM_IMAGE:-docker.io/jc21/nginx-proxy-manager:2}|g" \
|
||||
-e "s|__CMK_SITE_ID__|${CMK_SITE_ID:-cmk}|g" \
|
||||
-e "s|__CMK_CONTAINER_NAME__|${CMK_CONTAINER_NAME:-checkmk}|g" \
|
||||
-e "s|__NPM_CONTAINER_NAME__|${NPM_CONTAINER_NAME:-nginx-proxy-manager}|g" \
|
||||
@@ -300,7 +302,12 @@ Naechste Schritte:
|
||||
$PROJECT_DIR/scripts/cmk-manage.sh up
|
||||
3) NGINX Proxy Manager oeffnen:
|
||||
http://$(primary_ip):81 Erstlogin: admin@example.com / changeme
|
||||
4) Verwaltung / Backup / Migration - ncurses-Oberflaeche:
|
||||
4) Ist Port 81 im Netz gesperrt, laesst sich die Adminoberflaeche auf einen
|
||||
anderen Port legen:
|
||||
$PROJECT_DIR/scripts/cmk-manage.sh npm-port 10443
|
||||
Oder ganz ohne Netzzugriff per Terminal-Browser auf dieser Maschine:
|
||||
$PROJECT_DIR/scripts/cmk-manage.sh browser
|
||||
5) Verwaltung / Backup / Migration - ncurses-Oberflaeche:
|
||||
$PROJECT_DIR/scripts/cmk-manage.sh gui
|
||||
|
||||
Alles Weitere steht in der README.md.
|
||||
|
||||
+1202
-22
File diff suppressed because it is too large
Load Diff
+49
-10
@@ -36,21 +36,42 @@ load_env() {
|
||||
warn "Keine .env gefunden ($envfile) - es gelten die Standardwerte."
|
||||
ENV_FILE=""
|
||||
fi
|
||||
# Defaults
|
||||
# Rueckfallwerte, falls ein Schluessel in der .env fehlt.
|
||||
# Die .env bleibt die massgebliche Konfiguration - hier steht nur,
|
||||
# was gilt, wenn dort nichts eingetragen ist.
|
||||
CMK_CONTAINER_NAME="${CMK_CONTAINER_NAME:-checkmk}"
|
||||
NPM_CONTAINER_NAME="${NPM_CONTAINER_NAME:-nginx-proxy-manager}"
|
||||
CMK_SITE_ID="${CMK_SITE_ID:-cmk}"
|
||||
BACKUP_DIR="${BACKUP_DIR:-$PROJECT_DIR/backups}"
|
||||
case "$BACKUP_DIR" in
|
||||
/*) : ;;
|
||||
*) BACKUP_DIR="$PROJECT_DIR/${BACKUP_DIR#./}" ;;
|
||||
CMK_IMAGE="${CMK_IMAGE:-docker.io/checkmk/check-mk-raw:2.3.0-latest}"
|
||||
NPM_ADMIN_PORT="${NPM_ADMIN_PORT:-81}"
|
||||
# Leer = automatisch aus dem Admin-Port ableiten
|
||||
NPM_ADMIN_URL="${NPM_ADMIN_URL:-http://127.0.0.1:$NPM_ADMIN_PORT}"
|
||||
BACKUP_DIR="$(abs_path "${BACKUP_DIR:-$PROJECT_DIR/backups}")"
|
||||
IMAGE_DIR="$(abs_path "${IMAGE_DIR:-$PROJECT_DIR/images}")"
|
||||
}
|
||||
|
||||
# relativen Pfad (./foo) am Projektverzeichnis ausrichten
|
||||
abs_path() {
|
||||
case "$1" in
|
||||
/*) printf '%s\n' "$1" ;;
|
||||
*) printf '%s\n' "$PROJECT_DIR/${1#./}" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# .env-Wert dauerhaft setzen
|
||||
# env_set KEY WERT [allow_empty]
|
||||
env_set() {
|
||||
local key="$1" val="$2" f="${ENV_FILE:-$PROJECT_DIR/.env}"
|
||||
local key="$1" val="$2" allow_empty="${3:-}" f="${ENV_FILE:-$PROJECT_DIR/.env}"
|
||||
[ -f "$f" ] || die "Keine .env vorhanden - kann '$key' nicht setzen."
|
||||
# mehrzeilige Werte wuerden die .env zerstoeren
|
||||
case "$val" in
|
||||
*$'\n'*) die "Ungueltiger Wert fuer '$key' (mehrzeilig)." ;;
|
||||
esac
|
||||
[ -n "$val" ] || [ -n "$allow_empty" ] || die "Leerer Wert fuer '$key' - abgebrochen."
|
||||
# Werte mit Leerzeichen in Anfuehrungszeichen setzen
|
||||
case "$val" in
|
||||
*" "*) case "$val" in \"*\") : ;; *) val="\"$val\"" ;; esac ;;
|
||||
esac
|
||||
if grep -qE "^[#[:space:]]*${key}=" "$f"; then
|
||||
sed -i -E "s|^[#[:space:]]*${key}=.*|${key}=${val}|" "$f"
|
||||
else
|
||||
@@ -63,10 +84,15 @@ env_set() {
|
||||
# Container-Runtime erkennen (docker / podman)
|
||||
# ---------------------------------------------------------------------
|
||||
detect_runtime() {
|
||||
if [ -n "${CMK_RUNTIME:-}" ]; then
|
||||
command -v "$CMK_RUNTIME" >/dev/null 2>&1 \
|
||||
|| die "CMK_RUNTIME='$CMK_RUNTIME' ist nicht installiert."
|
||||
if [ -n "${CMK_RUNTIME:-}" ] && command -v "$CMK_RUNTIME" >/dev/null 2>&1; then
|
||||
RUNTIME="$CMK_RUNTIME"
|
||||
elif [ -n "${CMK_RUNTIME:-}" ]; then
|
||||
# Falsch gesetzter Wert darf das Werkzeug nicht unbenutzbar machen
|
||||
warn "CMK_RUNTIME='$CMK_RUNTIME' ist nicht installiert - suche selbst.
|
||||
Korrigieren mit: cmk-manage.sh config set CMK_RUNTIME auto"
|
||||
CMK_RUNTIME=""
|
||||
detect_runtime
|
||||
return
|
||||
elif command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1; then
|
||||
RUNTIME=docker
|
||||
elif command -v podman >/dev/null 2>&1; then
|
||||
@@ -187,11 +213,13 @@ primary_ip() {
|
||||
UI_BACKTITLE="Checkmk Stack Manager - Container-Runtime: ${RUNTIME:-?}"
|
||||
|
||||
ui_init() {
|
||||
# Geometrie IMMER setzen - sonst laeuft das Skript unter "set -u" auf
|
||||
# eine unbound variable, wenn UI_BIN von aussen vorgegeben wurde.
|
||||
UI_H="${UI_H:-22}"; UI_W="${UI_W:-78}"; UI_MH="${UI_MH:-13}"
|
||||
[ -n "${UI_BIN:-}" ] && return 0
|
||||
if command -v dialog >/dev/null 2>&1; then UI_BIN=dialog
|
||||
elif command -v whiptail >/dev/null 2>&1; then UI_BIN=whiptail
|
||||
else UI_BIN=""; fi
|
||||
UI_H="${UI_H:-22}"; UI_W="${UI_W:-78}"; UI_MH="${UI_MH:-13}"
|
||||
export DIALOGRC="${DIALOGRC:-}"
|
||||
}
|
||||
|
||||
@@ -205,51 +233,61 @@ ui_require() {
|
||||
}
|
||||
|
||||
ui_menu() { # title text tag item [tag item ...] -> gewaehlter tag auf stdout
|
||||
ui_init
|
||||
local title="$1" text="$2"; shift 2
|
||||
"$UI_BIN" --backtitle "$UI_BACKTITLE" --title "$title" \
|
||||
--menu "$text" "$UI_H" "$UI_W" "$UI_MH" "$@" 3>&1 1>&2 2>&3
|
||||
}
|
||||
|
||||
ui_checklist() { # title text tag item status ...
|
||||
ui_init
|
||||
local title="$1" text="$2"; shift 2
|
||||
"$UI_BIN" --backtitle "$UI_BACKTITLE" --title "$title" \
|
||||
--checklist "$text" "$UI_H" "$UI_W" "$UI_MH" "$@" 3>&1 1>&2 2>&3
|
||||
}
|
||||
|
||||
ui_radiolist() {
|
||||
ui_init
|
||||
local title="$1" text="$2"; shift 2
|
||||
"$UI_BIN" --backtitle "$UI_BACKTITLE" --title "$title" \
|
||||
--radiolist "$text" "$UI_H" "$UI_W" "$UI_MH" "$@" 3>&1 1>&2 2>&3
|
||||
}
|
||||
|
||||
ui_input() { # title text default
|
||||
ui_init
|
||||
"$UI_BIN" --backtitle "$UI_BACKTITLE" --title "$1" \
|
||||
--inputbox "$2" 10 "$UI_W" "${3:-}" 3>&1 1>&2 2>&3
|
||||
}
|
||||
|
||||
ui_password() {
|
||||
ui_init
|
||||
"$UI_BIN" --backtitle "$UI_BACKTITLE" --title "$1" \
|
||||
--passwordbox "$2" 10 "$UI_W" 3>&1 1>&2 2>&3
|
||||
}
|
||||
|
||||
ui_msg() { # title text
|
||||
ui_init
|
||||
"$UI_BIN" --backtitle "$UI_BACKTITLE" --title "$1" --msgbox "$2" 16 "$UI_W"
|
||||
}
|
||||
|
||||
ui_yesno() { # title text -> exit 0 = ja
|
||||
ui_init
|
||||
"$UI_BIN" --backtitle "$UI_BACKTITLE" --title "$1" --yesno "$2" 14 "$UI_W"
|
||||
}
|
||||
|
||||
ui_text() { # title file
|
||||
ui_init
|
||||
"$UI_BIN" --backtitle "$UI_BACKTITLE" --title "$1" --textbox "$2" "$UI_H" "$UI_W"
|
||||
}
|
||||
|
||||
ui_info() { # title text (ohne OK-Button)
|
||||
ui_init
|
||||
"$UI_BIN" --backtitle "$UI_BACKTITLE" --title "$1" --infobox "$2" 8 "$UI_W"
|
||||
}
|
||||
|
||||
# Kommando ausfuehren, Ausgabe live in Datei, danach in Textbox anzeigen
|
||||
ui_run() { # title cmd...
|
||||
ui_init
|
||||
local title="$1"; shift
|
||||
local logf; logf="$(mktemp)"
|
||||
ui_info "$title" "Bitte warten ...\n\n$*"
|
||||
@@ -266,6 +304,7 @@ ui_run() { # title cmd...
|
||||
# Dateiauswahl im Midnight-Commander-Stil (funktioniert auch mit whiptail)
|
||||
# ---------------------------------------------------------------------
|
||||
ui_pick_file() { # startdir [glob] -> Dateipfad auf stdout
|
||||
ui_init
|
||||
local dir="${1:-$PWD}" glob="${2:-*}" sel
|
||||
dir="$(cd "$dir" 2>/dev/null && pwd || echo "$PWD")"
|
||||
while :; do
|
||||
|
||||
@@ -206,9 +206,19 @@ SHA256 : $sum
|
||||
|
||||
Import auf dem Zielsystem (Container-Installation):
|
||||
1) Bundle in das Verzeichnis ./backups des Projekts kopieren
|
||||
2) In der .env die passende Checkmk-Version eintragen:
|
||||
CMK_IMAGE_TAG=${version%.*}
|
||||
und den Stack neu erstellen: ./scripts/cmk-manage.sh up
|
||||
2) Passendes Image beschaffen (Version MUSS uebereinstimmen):
|
||||
./scripts/cmk-manage.sh image pull --edition $(
|
||||
case "$version" in
|
||||
*.cre) echo raw ;;
|
||||
*.cee) echo enterprise ;;
|
||||
*.cce) echo cloud ;;
|
||||
*.cme) echo managed ;;
|
||||
*) echo raw ;;
|
||||
esac) --version ${version%.*}
|
||||
Die Enterprise-Edition liegt NICHT auf Docker Hub - dort zusaetzlich
|
||||
--user/--password (Checkmk-Kundenportal) angeben oder
|
||||
"image download" verwenden.
|
||||
Danach: ./scripts/cmk-manage.sh up
|
||||
3) Import ausfuehren:
|
||||
./scripts/cmk-manage.sh import --file backups/$(basename "$outfile") --set-default-site
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ After=network-online.target
|
||||
|
||||
[Container]
|
||||
ContainerName=__CMK_CONTAINER_NAME__
|
||||
Image=docker.io/__CMK_IMAGE__
|
||||
Image=__CMK_IMAGE__
|
||||
Network=host
|
||||
EnvironmentFile=__PROJECT_DIR__/.env
|
||||
Environment=CMK_SITE_ID=__CMK_SITE_ID__
|
||||
|
||||
@@ -9,7 +9,7 @@ After=network-online.target checkmk.service
|
||||
|
||||
[Container]
|
||||
ContainerName=__NPM_CONTAINER_NAME__
|
||||
Image=docker.io/__NPM_IMAGE__
|
||||
Image=__NPM_IMAGE__
|
||||
Network=host
|
||||
EnvironmentFile=__PROJECT_DIR__/.env
|
||||
Environment=DISABLE_IPV6=true
|
||||
|
||||
Reference in New Issue
Block a user