Schalter: NGINX Proxy Manager abschaltbar (externer NGINX)
Wer die HTTPS-Terminierung bereits mit einem NGINX auf einem anderen
System loest, braucht den Container nicht. NPM_ENABLED=off sorgt dafuer,
dass er gar nicht erst angelegt wird: compose bekommt dann nur noch den
Checkmk-Dienst genannt.
NPM_ENABLED=off -> compose up -d checkmk
NPM_ENABLED=on -> compose up -d checkmk nginx-proxy-manager
Das gilt auch fuer "pull" - abgeschaltet wird nicht einmal das Image
geladen. Beim Abschalten wird ein vorhandener Container gestoppt UND
entfernt, damit ihn weder eine Restart-Regel noch ein Reboot wieder
hochzieht.
Die Daten bleiben in jedem Fall erhalten: Konfiguration, Datenbank und
Zertifikate liegen in den Bind-Mounts unter ./data/npm, nicht im
Container. Vor dem Abschalten werden beide Verzeichnisse mit Groesse
angezeigt; beim Einschalten wird die vorhandene Konfiguration samt
Zertifikaten unveraendert wieder aufgenommen.
Bedienung:
- Menuepunkt "Proxy Manager betreiben" unter Einstellungen -> npm
- cmk-manage.sh npm-enable [on|off] (ohne Argument: Stand anzeigen)
- config set NPM_ENABLED off
"npm-enable off" gibt gleich die noetige Firewall-Regel und eine
Beispielkonfiguration fuer den externen NGINX aus - Port 5000 muss dann
fuer dessen IP erreichbar sein. Der Agent-Receiver auf Port 8000 ist
davon nicht betroffen, den sprechen die Agents ohnehin direkt an.
Damit der Schalter auch nach einem Reboot gilt, ruft die von install.sh
erzeugte systemd-Unit jetzt cmk-manage.sh auf statt compose direkt.
Bei Quadlet wird die Unit nginx-proxy-manager.container uebersprungen
und entfernt, solange der Schalter auf "off" steht.
Verifiziert mit einem compose-Stub, dass in beiden Schalterstellungen
genau die erwarteten Dienste uebergeben werden, sowie ueber das Menue.
Dokumentiert als Abschnitt 12.4 in beiden Sprachfassungen.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -94,6 +94,15 @@ TZ=Europe/Berlin
|
||||
# NGINX PROXY MANAGER (HTTPS: Let's Encrypt ODER selbstsigniert)
|
||||
# =====================================================================
|
||||
# Ebenfalls vollqualifiziert - siehe Hinweis oben zu Podman!
|
||||
# Soll der Proxy-Manager-Container ueberhaupt betrieben werden?
|
||||
# on = wird gebaut und gestartet (Vorgabe)
|
||||
# off = wird weder angelegt noch gestartet - sinnvoll, wenn die
|
||||
# HTTPS-Terminierung ein bereits vorhandener NGINX auf einem
|
||||
# anderen System uebernimmt. Der leitet dann auf Port 5000 weiter.
|
||||
# Die Daten unter ./data/npm bleiben beim Abschalten erhalten.
|
||||
# Umschalten ueber das Menue oder: ./scripts/cmk-manage.sh npm-enable off
|
||||
NPM_ENABLED=on
|
||||
|
||||
NPM_IMAGE=docker.io/jc21/nginx-proxy-manager:2
|
||||
NPM_CONTAINER_NAME=nginx-proxy-manager
|
||||
NPM_DISABLE_IPV6=true
|
||||
|
||||
@@ -127,7 +127,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** (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 |
|
||||
| 5000/tcp | Checkmk Apache (Backend) | **nur localhost** – nicht freigeben. Ausnahme: bei abgeschaltetem Proxy Manager ([12.4](#124-proxy-manager-ganz-abschalten-externer-nginx)) nur für die IP des externen Proxys |
|
||||
| 8000/tcp | Checkmk Agent-Receiver (TLS-registrierte Agents) | überwachte Hosts |
|
||||
| 6557/tcp | Livestatus (nur bei `CMK_LIVESTATUS_TCP=on`) | verteilte Sites |
|
||||
|
||||
@@ -550,6 +550,7 @@ Die wichtigsten Schalter:
|
||||
| `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_ENABLED` | `on`/`off` – soll der Proxy-Manager-Container überhaupt laufen? Siehe [12.4](#124-proxy-manager-ganz-abschalten-externer-nginx) |
|
||||
| `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`) |
|
||||
@@ -1168,6 +1169,75 @@ ein anderer Dienst lauscht.
|
||||
> überflüssig – dann genügt die Umgebungsvariable. Bis dahin ist der
|
||||
> Erweiterungspunkt der Weg, der ohne Änderung am Image auskommt.
|
||||
|
||||
### 12.4 Proxy Manager ganz abschalten (externer NGINX)
|
||||
|
||||
Wer die HTTPS-Terminierung schon anderweitig löst – etwa mit einem NGINX auf
|
||||
einem vorgelagerten System – braucht den Container gar nicht. Dafür gibt es
|
||||
einen Schalter:
|
||||
|
||||
```bash
|
||||
sudo ./scripts/cmk-manage.sh npm-enable off # abschalten
|
||||
sudo ./scripts/cmk-manage.sh npm-enable on # wieder einschalten
|
||||
./scripts/cmk-manage.sh npm-enable # Stand anzeigen
|
||||
```
|
||||
|
||||
In der Oberfläche steht er unter **Einstellungen → NGINX Proxy Manager →
|
||||
„Proxy Manager betreiben"**, in der `.env` heißt er `NPM_ENABLED`.
|
||||
|
||||
**Was „aus" bedeutet:** Der Container wird gestoppt und entfernt, und bei
|
||||
`up` gar nicht erst angelegt – `compose` bekommt dann nur noch den
|
||||
Checkmk-Dienst genannt. Es wird also weder ein Image geladen noch ein
|
||||
Container gebaut:
|
||||
|
||||
```
|
||||
NPM_ENABLED=off -> docker compose up -d checkmk
|
||||
NPM_ENABLED=on -> docker compose up -d checkmk nginx-proxy-manager
|
||||
```
|
||||
|
||||
**Die Daten bleiben.** Konfiguration, Datenbank und Zertifikate liegen in den
|
||||
Bind-Mounts `./data/npm/data` und `./data/npm/letsencrypt`, nicht im Container.
|
||||
Vor dem Abschalten zeigt das Kommando beides mit Größe an; beim späteren
|
||||
Einschalten wird die vorhandene Konfiguration samt Zertifikaten unverändert
|
||||
wieder aufgenommen.
|
||||
|
||||
**Was danach zu tun ist:** Der externe Proxy leitet auf Port 5000 dieses Hosts
|
||||
weiter. Der war bisher nur für localhost gedacht und muss jetzt – möglichst eng
|
||||
begrenzt – für den Proxy erreichbar sein:
|
||||
|
||||
```bash
|
||||
# firewalld
|
||||
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=<proxy-ip> port port=5000 protocol=tcp accept'
|
||||
sudo firewall-cmd --reload
|
||||
|
||||
# ufw
|
||||
sudo ufw allow from <proxy-ip> to any port 5000 proto tcp
|
||||
```
|
||||
|
||||
Im externen NGINX:
|
||||
|
||||
```nginx
|
||||
location / {
|
||||
proxy_pass http://<checkmk-host>:5000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
client_max_body_size 0;
|
||||
proxy_read_timeout 300s;
|
||||
}
|
||||
```
|
||||
|
||||
Das passende Kommando samt Beispielkonfiguration gibt `npm-enable off` direkt
|
||||
mit aus.
|
||||
|
||||
> **Der Agent-Receiver bleibt davon unberührt.** Die Agents sprechen Port 8000
|
||||
> dieses Hosts direkt an, nicht den Proxy – der muss also weiterhin für die
|
||||
> überwachten Systeme erreichbar sein.
|
||||
|
||||
> **Bei Quadlet** ([Kapitel 6, Variante B](#variante-b--podman-quadlet-ab-podman-44-ohne-compose))
|
||||
> entfernt `install.sh --quadlet` die Unit `nginx-proxy-manager.container`,
|
||||
> solange der Schalter auf `off` steht. Schaltet man ihn später ein, genügt ein
|
||||
> erneutes `sudo ./install.sh --quadlet`.
|
||||
|
||||
---
|
||||
|
||||
## 13. Firewall
|
||||
@@ -1260,6 +1330,7 @@ Eine Dateiauswahl mit Verzeichnisnavigation ist eingebaut.
|
||||
| `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 |
|
||||
| `npm-enable [on\|off]` | Proxy Manager ein-/ausschalten (Daten bleiben erhalten) |
|
||||
| `cert …` | selbstsigniertes Zertifikat erzeugen |
|
||||
| `shell` | Root-Shell im Checkmk-Container |
|
||||
| `omd …` | beliebiges `omd`-Kommando im Container |
|
||||
@@ -1661,6 +1732,7 @@ Checkmk-Werksnotizen (Werks/Release Notes) lesen.
|
||||
| `podman-compose` nicht gefunden | EPEL aktivieren oder auf Quadlet umstellen (`./install.sh --quadlet`) |
|
||||
| `This system is not registered with an entitlement server` | RHEL ohne Subskription – `dnf` liefert dann gar keine Pakete. Registrieren, Installations-DVD als Repository einbinden oder auf Rocky/Alma wechseln: [Abschnitt 5.1](#51-unregistriertes-rhel-woher-die-pakete-kommen) |
|
||||
| `epel-release` lässt sich nicht installieren | EPEL setzt Red Hats Basis-Repositories voraus und ersetzt die Registrierung nicht. Ohne Subskription führt der Quadlet-Weg ohne `podman-compose` zum Ziel: [Kapitel 6, Variante B](#variante-b--podman-quadlet-ab-podman-44-ohne-compose) |
|
||||
| Proxy-Manager-Container startet nicht mehr mit | Schalter steht auf `off`: `cmk-manage.sh npm-enable on`. Prüfen mit `cmk-manage.sh npm-enable` |
|
||||
| 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` |
|
||||
|
||||
+72
-1
@@ -131,7 +131,7 @@ agents.
|
||||
| 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 – **admin interface** (default; changeable via [`npm-port`](#12-moving-the-admin-interface-to-a-different-port)) | admin network only! |
|
||||
| 5000/tcp | Checkmk Apache (backend) | **localhost only** – do not expose |
|
||||
| 5000/tcp | Checkmk Apache (backend) | **localhost only** – do not expose. Exception: with the Proxy Manager turned off ([12.4](#124-turning-the-proxy-manager-off-entirely-external-nginx)), open it for the external proxy's IP only |
|
||||
| 8000/tcp | Checkmk agent receiver (TLS-registered agents) | monitored hosts |
|
||||
| 6557/tcp | Livestatus (only with `CMK_LIVESTATUS_TCP=on`) | distributed sites |
|
||||
|
||||
@@ -553,6 +553,7 @@ The most important settings:
|
||||
| `CMK_LIVESTATUS_TCP` | `on` opens port 6557 for distributed monitoring |
|
||||
| `MAIL_RELAY_HOST` | SMTP relay for notifications |
|
||||
| `TZ` | time zone, e.g. `Europe/Berlin` |
|
||||
| `NPM_ENABLED` | `on`/`off` – should the Proxy Manager container run at all? See [12.4](#124-turning-the-proxy-manager-off-entirely-external-nginx) |
|
||||
| `NPM_ADMIN_PORT` | port of the Proxy Manager interface (default 81) – change only via `npm-port` or the menu |
|
||||
| `NPM_ADMIN_URL` | start page of the terminal browser; empty = derived from `NPM_ADMIN_PORT` |
|
||||
| `BACKUP_DIR` | location for backups/bundles (default `./backups`) |
|
||||
@@ -1173,6 +1174,74 @@ listening on the port you want.
|
||||
> unnecessary – the environment variable will be enough. Until then, the
|
||||
> extension point is the route that needs no change to the image.
|
||||
|
||||
### 12.4 Turning the Proxy Manager off entirely (external NGINX)
|
||||
|
||||
If HTTPS termination is already handled elsewhere – for instance by an NGINX on
|
||||
an upstream system – the container is not needed at all. There is a switch for
|
||||
that:
|
||||
|
||||
```bash
|
||||
sudo ./scripts/cmk-manage.sh npm-enable off # turn off
|
||||
sudo ./scripts/cmk-manage.sh npm-enable on # turn back on
|
||||
./scripts/cmk-manage.sh npm-enable # show the current state
|
||||
```
|
||||
|
||||
In the interface it is under **Einstellungen → NGINX Proxy Manager →
|
||||
"Proxy Manager betreiben"**; in `.env` it is called `NPM_ENABLED`.
|
||||
|
||||
**What "off" means:** the container is stopped and removed, and is not created
|
||||
by `up` in the first place – `compose` is only told about the Checkmk service.
|
||||
So no image is pulled and no container is built:
|
||||
|
||||
```
|
||||
NPM_ENABLED=off -> docker compose up -d checkmk
|
||||
NPM_ENABLED=on -> docker compose up -d checkmk nginx-proxy-manager
|
||||
```
|
||||
|
||||
**The data stays.** Configuration, database and certificates live in the bind
|
||||
mounts `./data/npm/data` and `./data/npm/letsencrypt`, not inside the
|
||||
container. Before turning it off, the command shows both with their sizes; when
|
||||
you turn it back on, the existing configuration and certificates are picked up
|
||||
unchanged.
|
||||
|
||||
**What to do afterwards:** the external proxy forwards to port 5000 of this
|
||||
host. That port was meant for localhost only so far and now has to be reachable
|
||||
for the proxy – as narrowly as possible:
|
||||
|
||||
```bash
|
||||
# firewalld
|
||||
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=<proxy-ip> port port=5000 protocol=tcp accept'
|
||||
sudo firewall-cmd --reload
|
||||
|
||||
# ufw
|
||||
sudo ufw allow from <proxy-ip> to any port 5000 proto tcp
|
||||
```
|
||||
|
||||
In the external NGINX:
|
||||
|
||||
```nginx
|
||||
location / {
|
||||
proxy_pass http://<checkmk-host>:5000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
client_max_body_size 0;
|
||||
proxy_read_timeout 300s;
|
||||
}
|
||||
```
|
||||
|
||||
`npm-enable off` prints the matching commands and this example configuration
|
||||
for you.
|
||||
|
||||
> **The agent receiver is unaffected.** Agents talk to port 8000 of this host
|
||||
> directly, not through the proxy – so it must stay reachable for the monitored
|
||||
> systems.
|
||||
|
||||
> **With Quadlet** ([chapter 6, option B](#option-b--podman-quadlet-podman-44-and-newer-no-compose))
|
||||
> `install.sh --quadlet` removes the `nginx-proxy-manager.container` unit while
|
||||
> the switch is `off`. If you turn it on later, simply run
|
||||
> `sudo ./install.sh --quadlet` again.
|
||||
|
||||
---
|
||||
|
||||
## 13. Firewall
|
||||
@@ -1268,6 +1337,7 @@ A file chooser with directory navigation is built in.
|
||||
| `browser [--engine …]` | terminal browser in a container – operate the Proxy Manager locally |
|
||||
| `config list\|get\|set\|edit` | show and change settings in `.env` |
|
||||
| `npm-port [PORT]` | set/show the port of the Proxy Manager interface |
|
||||
| `npm-enable [on\|off]` | turn the Proxy Manager on/off (data is preserved) |
|
||||
| `cert …` | create a self-signed certificate |
|
||||
| `shell` | root shell in the Checkmk container |
|
||||
| `omd …` | any `omd` command inside the container |
|
||||
@@ -1672,6 +1742,7 @@ release notes beforehand.
|
||||
| `podman-compose` not found | enable EPEL or switch to Quadlet (`./install.sh --quadlet`) |
|
||||
| `This system is not registered with an entitlement server` | RHEL without a subscription – `dnf` then supplies no packages at all. Register, mount the installation DVD as a repository, or switch to Rocky/Alma: [section 5.1](#51-unregistered-rhel-where-the-packages-come-from) |
|
||||
| `epel-release` cannot be installed | EPEL depends on Red Hat's base repositories and is no substitute for registering. Without a subscription, the Quadlet route without `podman-compose` gets you there: [chapter 6, option B](#option-b--podman-quadlet-podman-44-and-newer-no-compose) |
|
||||
| Proxy Manager container no longer starts | the switch is `off`: `cmk-manage.sh npm-enable on`. Check with `cmk-manage.sh npm-enable` |
|
||||
| Admin interface unreachable from the LAN | port 81 blocked. Move it to a free port: `cmk-manage.sh npm-port 10443` and open that in the firewall |
|
||||
| New port does not answer after `npm-port` | the Proxy Manager was not restarted: `cmk-manage.sh restart`; check the file `data/npm/data/nginx/custom/http.conf` |
|
||||
| `cmk-manage.sh` aborts with "CMK_RUNTIME … ist nicht installiert" | it now only warns and detects the runtime itself; set it cleanly with `config set CMK_RUNTIME auto` |
|
||||
|
||||
+12
-6
@@ -242,10 +242,10 @@ fi
|
||||
# systemd
|
||||
# ---------------------------------------------------------------------
|
||||
install_compose_unit() {
|
||||
local compose_bin
|
||||
detect_compose
|
||||
compose_bin="${COMPOSE_CMD[*]}"
|
||||
|
||||
log "Verwendetes Compose-Kommando: ${COMPOSE_CMD[*]}"
|
||||
# Die Unit ruft bewusst cmk-manage.sh auf statt compose direkt: nur so
|
||||
# werden NPM_ENABLED und der Start aller Sites beruecksichtigt.
|
||||
log "Richte systemd-Unit 'checkmk-stack.service' ein ..."
|
||||
cat >/etc/systemd/system/checkmk-stack.service <<EOF
|
||||
[Unit]
|
||||
@@ -262,10 +262,10 @@ RemainAfterExit=yes
|
||||
WorkingDirectory=$PROJECT_DIR
|
||||
EnvironmentFile=$PROJECT_DIR/.env
|
||||
TimeoutStartSec=0
|
||||
ExecStart=/bin/sh -c '$compose_bin up -d'
|
||||
ExecStart=$PROJECT_DIR/scripts/cmk-manage.sh -y up
|
||||
ExecStartPost=$PROJECT_DIR/scripts/cmk-manage.sh start-all-sites
|
||||
ExecStop=/bin/sh -c '$compose_bin down'
|
||||
ExecReload=/bin/sh -c '$compose_bin up -d'
|
||||
ExecStop=$PROJECT_DIR/scripts/cmk-manage.sh -y down
|
||||
ExecReload=$PROJECT_DIR/scripts/cmk-manage.sh -y up
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -280,6 +280,12 @@ install_quadlet_units() {
|
||||
[ -d /etc/containers/systemd ] || mkdir -p /etc/containers/systemd
|
||||
local f
|
||||
for f in "$PROJECT_DIR"/systemd/quadlet/*.container; do
|
||||
# Proxy Manager abgeschaltet? Dann auch keine Unit dafuer.
|
||||
if [ "$(basename "$f")" = "nginx-proxy-manager.container" ] && ! npm_enabled; then
|
||||
log "NPM_ENABLED=off - ueberspringe nginx-proxy-manager.container"
|
||||
rm -f /etc/containers/systemd/nginx-proxy-manager.container
|
||||
continue
|
||||
fi
|
||||
sed -e "s|__PROJECT_DIR__|$PROJECT_DIR|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" \
|
||||
|
||||
+188
-6
@@ -120,6 +120,11 @@ KOMMANDOS - Konfiguration
|
||||
config edit .env im Editor oeffnen
|
||||
npm-port [PORT] Port der Proxy-Manager-Oberflaeche
|
||||
(ohne PORT: aktuellen Stand anzeigen)
|
||||
npm-enable [on|off] NGINX Proxy Manager ein-/ausschalten.
|
||||
"off" stoppt und entfernt den Container,
|
||||
die Daten unter ./data/npm bleiben erhalten
|
||||
(fuer den Fall, dass ein anderer NGINX die
|
||||
HTTPS-Terminierung uebernimmt)
|
||||
|
||||
KOMMANDOS - Lokale Bedienung ohne externen Zugriff
|
||||
browser [Optionen] Terminal-Browser im Container starten, um den
|
||||
@@ -968,17 +973,44 @@ cmd_image() {
|
||||
# =====================================================================
|
||||
# Stack-Kommandos
|
||||
# =====================================================================
|
||||
# Welche compose-Dienste sollen laufen? Der Proxy Manager ist abschaltbar,
|
||||
# damit ein bereits vorhandener NGINX auf einem anderen System genutzt
|
||||
# werden kann. Abgeschaltet wird sein Container gar nicht erst angelegt.
|
||||
compose_services() {
|
||||
if npm_enabled; then
|
||||
printf '%s\n' checkmk nginx-proxy-manager
|
||||
else
|
||||
printf '%s\n' checkmk
|
||||
fi
|
||||
}
|
||||
|
||||
cmd_up() {
|
||||
[ -f "$PROJECT_DIR/.env" ] || die "Keine .env vorhanden. Bitte: cp .env.example .env && \$EDITOR .env"
|
||||
log "Starte Stack (${RUNTIME}) ..."
|
||||
compose up -d
|
||||
local -a svc=(); mapfile -t svc < <(compose_services)
|
||||
if npm_enabled; then
|
||||
log "Starte Stack (${RUNTIME}) ..."
|
||||
else
|
||||
log "Starte Stack (${RUNTIME}) - ohne NGINX Proxy Manager (NPM_ENABLED=off) ..."
|
||||
fi
|
||||
compose up -d "${svc[@]}"
|
||||
npm_enabled || npm_teardown_container
|
||||
ok "Stack gestartet."
|
||||
cmd_status
|
||||
}
|
||||
|
||||
cmd_down() { log "Stoppe Stack ..."; compose down; ok "Stack gestoppt."; }
|
||||
cmd_restart() { compose down || true; compose up -d; ok "Stack neu gestartet."; }
|
||||
cmd_pull() { compose pull; ok "Images aktualisiert. Danach: $0 up"; }
|
||||
cmd_restart() {
|
||||
compose down || true
|
||||
local -a svc=(); mapfile -t svc < <(compose_services)
|
||||
compose up -d "${svc[@]}"
|
||||
npm_enabled || npm_teardown_container
|
||||
ok "Stack neu gestartet."
|
||||
}
|
||||
cmd_pull() {
|
||||
local -a svc=(); mapfile -t svc < <(compose_services)
|
||||
compose pull "${svc[@]}"
|
||||
ok "Images aktualisiert. Danach: $SELF up"
|
||||
}
|
||||
cmd_logs() { compose logs "$@"; }
|
||||
cmd_shell() { require_cmk_running; $RUNTIME exec -it "$CMK_CONTAINER_NAME" bash; }
|
||||
cmd_omd() { require_cmk_running; $RUNTIME exec -it "$CMK_CONTAINER_NAME" omd "$@"; }
|
||||
@@ -991,6 +1023,10 @@ cmd_status() {
|
||||
printf '\n%sContainer%s\n' "$C_BLD" "$C_RST"
|
||||
local c
|
||||
for c in "$CMK_CONTAINER_NAME" "$NPM_CONTAINER_NAME"; do
|
||||
if [ "$c" = "$NPM_CONTAINER_NAME" ] && ! npm_enabled; then
|
||||
printf ' %-24s %s\n' "$c" "${C_YEL}abgeschaltet (NPM_ENABLED=off)${C_RST}"
|
||||
continue
|
||||
fi
|
||||
if container_exists "$c"; then
|
||||
printf ' %-24s %s\n' "$c" \
|
||||
"$(container_running "$c" && echo "${C_GRN}laeuft${C_RST}" || echo "${C_RED}gestoppt${C_RST}")"
|
||||
@@ -1013,9 +1049,14 @@ cmd_status() {
|
||||
printf '\n%sZugang%s\n' "$C_BLD" "$C_RST"
|
||||
local ip; ip="$(primary_ip)"
|
||||
printf ' Checkmk (direkt) : http://%s:5000/%s/\n' "$ip" "$CMK_SITE_ID"
|
||||
printf ' Checkmk (ueber Proxy) : https://<FQDN>/%s/\n' "$CMK_SITE_ID"
|
||||
printf ' Agent-Receiver : %s:8000\n' "$ip"
|
||||
printf ' NGINX Proxy Manager : http://%s:%s/ (Erstlogin: admin@example.com / changeme)\n\n' "$ip" "${NPM_ADMIN_PORT:-81}"
|
||||
if npm_enabled; then
|
||||
printf ' Checkmk (ueber Proxy) : https://<FQDN>/%s/\n' "$CMK_SITE_ID"
|
||||
printf ' NGINX Proxy Manager : http://%s:%s/ (Erstlogin: admin@example.com / changeme)\n\n' "$ip" "${NPM_ADMIN_PORT:-81}"
|
||||
else
|
||||
printf ' NGINX Proxy Manager : abgeschaltet\n'
|
||||
printf ' Externer Proxy weiterleiten auf http://%s:5000\n\n' "$ip"
|
||||
fi
|
||||
}
|
||||
|
||||
# =====================================================================
|
||||
@@ -1416,6 +1457,134 @@ cmd_import() {
|
||||
fi
|
||||
}
|
||||
|
||||
# =====================================================================
|
||||
# NGINX Proxy Manager ein-/ausschalten
|
||||
#
|
||||
# Wer bereits einen NGINX auf einem anderen System betreibt, braucht den
|
||||
# Container nicht. Abgeschaltet wird er weder gebaut noch gestartet -
|
||||
# "compose up" bekommt dann nur noch den Checkmk-Dienst genannt.
|
||||
#
|
||||
# Die Daten unter ./data/npm bleiben in jedem Fall erhalten: sie liegen
|
||||
# in Bind-Mounts, nicht im Container. Ein spaeteres Einschalten nimmt
|
||||
# die vorhandene Konfiguration samt Zertifikaten wieder auf.
|
||||
# =====================================================================
|
||||
|
||||
# Container entfernen (nicht die Daten!), damit ihn keine Restart-Regel
|
||||
# und kein Reboot wieder hochzieht.
|
||||
npm_teardown_container() {
|
||||
container_exists "$NPM_CONTAINER_NAME" || return 0
|
||||
if container_running "$NPM_CONTAINER_NAME"; then
|
||||
log "Stoppe '$NPM_CONTAINER_NAME' ..."
|
||||
$RUNTIME stop "$NPM_CONTAINER_NAME" >/dev/null 2>&1 || true
|
||||
fi
|
||||
log "Entferne den Container '$NPM_CONTAINER_NAME' (die Daten bleiben)."
|
||||
$RUNTIME rm -f "$NPM_CONTAINER_NAME" >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
npm_data_summary() {
|
||||
local d="${NPM_DATA_DIR:-$PROJECT_DIR/data/npm/data}"
|
||||
case "$d" in /*) : ;; *) d="$PROJECT_DIR/${d#./}" ;; esac
|
||||
local le="${NPM_LE_DIR:-$PROJECT_DIR/data/npm/letsencrypt}"
|
||||
case "$le" in /*) : ;; *) le="$PROJECT_DIR/${le#./}" ;; esac
|
||||
printf ' Konfiguration/DB : %s (%s)\n' "$d" "$([ -d "$d" ] && du -sh "$d" 2>/dev/null | cut -f1 || echo 'leer')"
|
||||
printf ' Zertifikate : %s (%s)\n' "$le" "$([ -d "$le" ] && du -sh "$le" 2>/dev/null | cut -f1 || echo 'leer')"
|
||||
}
|
||||
|
||||
cmd_npm_enable() {
|
||||
local want=""
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
on|an|true|1|yes|ja) want=on; shift ;;
|
||||
off|aus|false|0|no|nein) want=off; shift ;;
|
||||
-h|--help)
|
||||
cat <<'EOF'
|
||||
cmk-manage.sh npm-enable [on|off]
|
||||
|
||||
Schaltet den NGINX Proxy Manager ein oder aus. Ohne Angabe wird der
|
||||
aktuelle Stand gezeigt.
|
||||
|
||||
off Container wird gestoppt und entfernt und bei "up" nicht mehr
|
||||
angelegt. Die Daten unter ./data/npm bleiben erhalten.
|
||||
Sinnvoll, wenn die HTTPS-Terminierung ein anderer NGINX uebernimmt -
|
||||
der leitet dann auf http://<dieser-host>:5000 weiter.
|
||||
on Container wird wieder gebaut und gestartet, mit der vorhandenen
|
||||
Konfiguration und den vorhandenen Zertifikaten.
|
||||
EOF
|
||||
return 0 ;;
|
||||
*) die "Unbekanntes Argument fuer npm-enable: $1 (on|off)" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$want" ]; then
|
||||
printf '\n%sNGINX Proxy Manager%s\n' "$C_BLD" "$C_RST"
|
||||
printf ' Schalter : %s\n' "$(npm_enabled && echo 'ein (NPM_ENABLED=on)' || echo 'aus (NPM_ENABLED=off)')"
|
||||
if container_exists "$NPM_CONTAINER_NAME"; then
|
||||
printf ' Container : %s\n' "$(container_running "$NPM_CONTAINER_NAME" && echo laeuft || echo gestoppt)"
|
||||
else
|
||||
printf ' Container : nicht vorhanden\n'
|
||||
fi
|
||||
printf '\n%sVorhandene Daten%s\n' "$C_BLD" "$C_RST"
|
||||
npm_data_summary
|
||||
echo
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ "$want" = off ]; then
|
||||
npm_enabled || { ok "Der Proxy Manager ist bereits abgeschaltet."; return 0; }
|
||||
printf '\n%sDiese Daten bleiben erhalten%s\n' "$C_BLD" "$C_RST"
|
||||
npm_data_summary
|
||||
echo
|
||||
confirm "Den NGINX Proxy Manager jetzt abschalten?" || die "Abgebrochen."
|
||||
env_set NPM_ENABLED off
|
||||
NPM_ENABLED=off
|
||||
npm_teardown_container
|
||||
ok "Abgeschaltet. Bei 'up' wird der Container nicht mehr angelegt."
|
||||
local ip; ip="$(primary_ip)"
|
||||
cat <<EOF
|
||||
|
||||
${C_BLD}Weiterleitung vom externen NGINX${C_RST}
|
||||
Ziel : http://$ip:5000
|
||||
Agent-Receiver : $ip:8000 (muss fuer die Agents erreichbar bleiben)
|
||||
|
||||
Port 5000 ist bisher nur fuer localhost gedacht. Er muss jetzt fuer den
|
||||
externen Proxy erreichbar sein - moeglichst eng begrenzt:
|
||||
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=<proxy-ip> port port=5000 protocol=tcp accept'
|
||||
ufw allow from <proxy-ip> to any port 5000 proto tcp
|
||||
|
||||
Im externen NGINX (Beispiel):
|
||||
location / {
|
||||
proxy_pass http://$ip:5000;
|
||||
proxy_set_header Host \$host;
|
||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||
client_max_body_size 0;
|
||||
proxy_read_timeout 300s;
|
||||
}
|
||||
|
||||
EOF
|
||||
return 0
|
||||
fi
|
||||
|
||||
# --- einschalten ---
|
||||
if npm_enabled && container_running "$NPM_CONTAINER_NAME"; then
|
||||
ok "Der Proxy Manager laeuft bereits."
|
||||
return 0
|
||||
fi
|
||||
env_set NPM_ENABLED on
|
||||
NPM_ENABLED=on
|
||||
log "Starte den NGINX Proxy Manager ..."
|
||||
if compose up -d nginx-proxy-manager; then
|
||||
ok "Eingeschaltet."
|
||||
printf '\n%sVorhandene Daten wurden uebernommen%s\n' "$C_BLD" "$C_RST"
|
||||
npm_data_summary
|
||||
printf '\n Oberflaeche: http://%s:%s/\n\n' "$(primary_ip)" "${NPM_ADMIN_PORT:-81}"
|
||||
else
|
||||
err "Der Container konnte nicht gestartet werden."
|
||||
log "Pruefen: $SELF logs nginx-proxy-manager"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# =====================================================================
|
||||
# Admin-Port des NGINX Proxy Managers
|
||||
#
|
||||
@@ -1544,6 +1713,10 @@ EOF
|
||||
|
||||
valid_port "$port" || die "'$port' ist keine gueltige Portnummer (1-65535)."
|
||||
|
||||
npm_enabled || warn "Der NGINX Proxy Manager ist abgeschaltet (NPM_ENABLED=off).
|
||||
Die Einstellung wird gespeichert, wirkt aber erst nach dem Einschalten:
|
||||
$SELF npm-enable on"
|
||||
|
||||
case "$port" in
|
||||
80|443) die "Port $port wird vom Proxy Manager bereits fuer HTTP/HTTPS genutzt." ;;
|
||||
5000) die "Port 5000 gehoert der Checkmk-Oberflaeche." ;;
|
||||
@@ -1621,6 +1794,7 @@ checkmk|CMK_CONTAINER_NAME|text|Containername Checkmk||
|
||||
checkmk|CMK_HOSTNAME|text|Hostname im Container||
|
||||
checkmk|CMK_LIVESTATUS_TCP|choice|Livestatus ueber TCP (Port 6557)|off:on|
|
||||
checkmk|MAIL_RELAY_HOST|text|SMTP-Relay fuer Benachrichtigungen||1
|
||||
npm|NPM_ENABLED|choice|Proxy Manager betreiben|on:off|
|
||||
npm|NPM_ADMIN_PORT|port|Port der Adminoberflaeche||
|
||||
npm|NPM_IMAGE|text|Image des Proxy Managers||
|
||||
npm|NPM_CONTAINER_NAME|text|Containername Proxy Manager||
|
||||
@@ -1716,6 +1890,9 @@ settings_post_set() {
|
||||
NPM_ADMIN_PORT)
|
||||
# Der nginx-Zusatzblock muss mitgezogen werden
|
||||
cmd_npm_port "$val" ;;
|
||||
NPM_ENABLED)
|
||||
# Container entsprechend entfernen bzw. starten
|
||||
cmd_npm_enable "$val" ;;
|
||||
CMK_IMAGE|CMK_SITE_ID|CMK_CONTAINER_NAME|NPM_IMAGE|NPM_CONTAINER_NAME|TZ|CMK_LIVESTATUS_TCP|NPM_DISABLE_IPV6|CMK_DATA_DIR|NPM_DATA_DIR|NPM_LE_DIR)
|
||||
log "Wirksam nach: $SELF up (Container werden neu erstellt)" ;;
|
||||
esac
|
||||
@@ -1755,6 +1932,8 @@ cmd_config() {
|
||||
fi
|
||||
if [ "$key" = NPM_ADMIN_PORT ]; then
|
||||
cmd_npm_port "$val"
|
||||
elif [ "$key" = NPM_ENABLED ]; then
|
||||
cmd_npm_enable "$val"
|
||||
else
|
||||
env_set "$key" "$val" "$opt"
|
||||
ok "$key=$val"
|
||||
@@ -2329,6 +2508,8 @@ gui_settings_edit() {
|
||||
|
||||
if [ "$key" = NPM_ADMIN_PORT ]; then
|
||||
ui_run "Admin-Port setzen" bash -c "cd '$PROJECT_DIR' && '$SELF' -y npm-port '$new'"
|
||||
elif [ "$key" = NPM_ENABLED ]; then
|
||||
ui_run "Proxy Manager ${new}schalten" bash -c "cd '$PROJECT_DIR' && '$SELF' -y npm-enable '$new'"
|
||||
else
|
||||
env_set "$key" "$new" "$opt"
|
||||
local hint=""
|
||||
@@ -2510,6 +2691,7 @@ main() {
|
||||
image) cmd_image "$@" ;;
|
||||
browser) cmd_browser "$@" ;;
|
||||
npm-port) cmd_npm_port "$@" ;;
|
||||
npm-enable) cmd_npm_enable "$@" ;;
|
||||
config) cmd_config "$@" ;;
|
||||
help|-h|--help) usage ;;
|
||||
*) err "Unbekanntes Kommando: $cmd"; echo; usage; exit 1 ;;
|
||||
|
||||
@@ -43,6 +43,7 @@ load_env() {
|
||||
NPM_CONTAINER_NAME="${NPM_CONTAINER_NAME:-nginx-proxy-manager}"
|
||||
CMK_SITE_ID="${CMK_SITE_ID:-cmk}"
|
||||
CMK_IMAGE="${CMK_IMAGE:-docker.io/checkmk/check-mk-raw:2.3.0-latest}"
|
||||
NPM_ENABLED="${NPM_ENABLED:-on}"
|
||||
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}"
|
||||
@@ -133,6 +134,14 @@ compose() {
|
||||
# ---------------------------------------------------------------------
|
||||
# Container-Helfer
|
||||
# ---------------------------------------------------------------------
|
||||
# Ist der NGINX Proxy Manager eingeschaltet? (on/true/1/yes = ja)
|
||||
npm_enabled() {
|
||||
case "$(printf '%s' "${NPM_ENABLED:-on}" | tr 'A-Z' 'a-z')" in
|
||||
on|true|1|yes|ja|y) return 0 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
container_exists() { $RUNTIME container inspect "$1" >/dev/null 2>&1; }
|
||||
container_running() { [ "$($RUNTIME container inspect -f '{{.State.Running}}' "$1" 2>/dev/null)" = "true" ]; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user