Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1693330162 |
+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