diff --git a/.env.example b/.env.example index 43657f2..594c98e 100644 --- a/.env.example +++ b/.env.example @@ -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 diff --git a/README.md b/README.md index 2163517..0353d13 100644 --- a/README.md +++ b/README.md @@ -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= port port=5000 protocol=tcp accept' +sudo firewall-cmd --reload + +# ufw +sudo ufw allow from to any port 5000 proto tcp +``` + +Im externen NGINX: + +```nginx +location / { + proxy_pass http://: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` | diff --git a/README_en.md b/README_en.md index 050bb15..2673aa6 100644 --- a/README_en.md +++ b/README_en.md @@ -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= port port=5000 protocol=tcp accept' +sudo firewall-cmd --reload + +# ufw +sudo ufw allow from to any port 5000 proto tcp +``` + +In the external NGINX: + +```nginx +location / { + proxy_pass http://: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` | diff --git a/install.sh b/install.sh index 24b3f72..716ed1c 100755 --- a/install.sh +++ b/install.sh @@ -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 </%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:///%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://: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 < 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 ;; diff --git a/scripts/lib/common.sh b/scripts/lib/common.sh index f7979e5..791426f 100644 --- a/scripts/lib/common.sh +++ b/scripts/lib/common.sh @@ -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" ]; }