From ed768f049bc89b32c190f0001b1af67a5bb79896 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sun, 20 Sep 2026 19:16:18 +0200 Subject: [PATCH] Fehlende Proxy-Manager-Anmeldung: nach Lage erklaeren statt nur melden "Ich dachte, der nginx legt die an" - eine berechtigte Erwartung, die seit NPM 2.15 nicht mehr stimmt. Die Meldung sagte zwar, WAS fehlt, aber nicht, was im jeweiligen Zustand zu tun ist. npm_api_token sieht jetzt nach, ob data/npm/data/database.sqlite schon existiert, und unterscheidet: keine Datenbank Zugangsdaten setzen und "up" - der Container legt das Konto daraus selbst an Datenbank da Die Variablen wirken nicht mehr. Konto im Browser anlegen und dieselben Daten mit "config set" eintragen. Dazu "npm-reset" fuer den sauberen Neuanfang: es legt die Datenbank beiseite (umbenannt, nicht geloescht), sodass der Container das Konto beim naechsten Start neu erzeugt. Vorher zeigt es an, was dabei verloren geht - Proxy-Hosts, Weiterleitungen, Zugriffslisten - und was bleibt: die Zertifikate. Mit Rueckfrage. Beide Zweige durchgespielt. In beiden Sprachfassungen dokumentiert. Co-Authored-By: Claude Opus 5 (1M context) --- README.md | 23 +++++++++++ README_en.md | 23 +++++++++++ scripts/cmk-manage.sh | 96 +++++++++++++++++++++++++++++++++++++++---- 3 files changed, 134 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 5e2cd09..75ac48f 100644 --- a/README.md +++ b/README.md @@ -1166,6 +1166,28 @@ angelegt worden, wirken die Variablen nicht mehr (die Datenbank ist nicht mehr leer). Dann einfach die selbst vergebenen Zugangsdaten eintragen – das Skript meldet sich damit an. +#### Wenn die Anmeldung fehlt + +Fehlen die Zugangsdaten, sagt das Skript je nach Lage, was zu tun ist – es +sieht dafür nach, ob `data/npm/data/database.sqlite` schon existiert: + +| Lage | Weg | +|---|---| +| **noch keine Datenbank** | `config set NPM_ADMIN_EMAIL …` und `…_PASSWORD …`, dann `up` – der Container legt das Konto selbst an | +| **Datenbank vorhanden** | Konto im Browser anlegen (`cmk-manage.sh browser`), dieselben Daten anschließend mit `config set` eintragen | + +Wer lieber sauber neu beginnt: + +```bash +sudo ./scripts/cmk-manage.sh npm-reset +``` + +Das legt die Datenbank beiseite (umbenannt, nicht gelöscht), sodass der +Container beim nächsten `up` das Konto aus `NPM_ADMIN_EMAIL`/`NPM_ADMIN_PASSWORD` +neu anlegt. **Proxy-Hosts, Weiterleitungen und Zugriffslisten sind damit weg** +– die Zertifikate bleiben. Das Kommando zeigt vorher genau das an und fragt +nach. Die Proxy-Hosts lassen sich mit `proxy add` in einem Aufruf neu anlegen. + ### 10.2 Proxy-Host anlegen – ohne Browser Die Weboberfläche lässt sich im Terminal-Browser nur mühsam bedienen; Formulare @@ -1997,6 +2019,7 @@ Eine Dateiauswahl mit Verzeichnisnavigation ist eingebaut. | `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) | +| `npm-reset` | Datenbank beiseitelegen, damit das Konto neu entsteht | | `proxy status\|list\|certs\|add\|del` | Proxy-Hosts über die API anlegen und verwalten | | `cert …` | selbstsigniertes Zertifikat erzeugen | | `shell` | Root-Shell im Checkmk-Container | diff --git a/README_en.md b/README_en.md index 0c468c2..462e039 100644 --- a/README_en.md +++ b/README_en.md @@ -1165,6 +1165,28 @@ If the stack has already run and the account was created by hand through the wizard, the variables no longer take effect (the database is no longer empty). Simply enter the credentials you chose – the script logs in with those. +#### When the login is missing + +If the credentials are absent, the script tells you what to do depending on the +situation – it checks whether `data/npm/data/database.sqlite` already exists: + +| Situation | Route | +|---|---| +| **no database yet** | `config set NPM_ADMIN_EMAIL …` and `…_PASSWORD …`, then `up` – the container creates the account itself | +| **database present** | create the account in the browser (`cmk-manage.sh browser`), then enter the same credentials with `config set` | + +To start over cleanly: + +```bash +sudo ./scripts/cmk-manage.sh npm-reset +``` + +This moves the database aside (renamed, not deleted) so the container recreates +the account from `NPM_ADMIN_EMAIL`/`NPM_ADMIN_PASSWORD` on the next `up`. +**Proxy hosts, redirections and access lists are gone** – the certificates +remain. The command shows exactly that beforehand and asks for confirmation. +The proxy hosts can be recreated with `proxy add` in a single call. + ### 10.2 Creating a proxy host – without a browser The web interface is painful in a terminal browser, and forms with file uploads @@ -1995,6 +2017,7 @@ A file chooser with directory navigation is built in. | `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) | +| `npm-reset` | move the database aside so the account is recreated | | `proxy status\|list\|certs\|add\|del` | create and manage proxy hosts through the API | | `cert …` | create a self-signed certificate | | `shell` | root shell in the Checkmk container | diff --git a/scripts/cmk-manage.sh b/scripts/cmk-manage.sh index cf5d0e5..4276f9b 100755 --- a/scripts/cmk-manage.sh +++ b/scripts/cmk-manage.sh @@ -165,6 +165,10 @@ KOMMANDOS - Konfiguration config edit .env im Editor oeffnen npm-port [PORT] Port der Proxy-Manager-Oberflaeche (ohne PORT: aktuellen Stand anzeigen) + npm-reset Datenbank des Proxy Managers beiseitelegen, + damit das Konto beim naechsten Start neu + aus NPM_ADMIN_EMAIL/-PASSWORD entsteht + (Zertifikate bleiben erhalten) npm-enable [on|off] NGINX Proxy Manager ein-/ausschalten. "off" stoppt und entfernt den Container, die Daten unter ./data/npm bleiben erhalten @@ -2587,6 +2591,48 @@ npm_data_summary() { printf ' Zertifikate : %s (%s)\n' "$le" "$([ -d "$le" ] && du -sh "$le" 2>/dev/null | cut -f1 || echo 'leer')" } +# Proxy Manager auf Anfang setzen: Datenbank weg, damit der Container das +# Konto beim naechsten Start neu anlegt. Zertifikate bleiben erhalten. +cmd_npm_reset() { + local d="${NPM_DATA_DIR:-$PROJECT_DIR/data/npm/data}" + case "$d" in /*) : ;; *) d="$PROJECT_DIR/${d#./}" ;; esac + + if ! npm_db_exists; then + ok "Es gibt noch keine Datenbank - der Container legt das Konto beim Start selbst an." + log "Vorher setzen: $SELF config set NPM_ADMIN_EMAIL " + return 0 + fi + + cat </dev/null 2>&1 || true + fi + mv "$d/database.sqlite" "$d/database.sqlite.alt-$stamp" + ok "Datenbank beiseitegelegt: database.sqlite.alt-$stamp" + log "Jetzt neu starten: $SELF up" +} + cmd_npm_enable() { local want="" while [ $# -gt 0 ]; do @@ -3299,6 +3345,17 @@ EOF npm_api_base() { printf 'http://127.0.0.1:%s\n' "${NPM_ADMIN_PORT:-81}"; } +# Hat der Proxy Manager schon eine Datenbank? Davon haengt ab, wie das +# Konto entsteht: der Container legt es NUR beim ersten Start mit leerer +# Datenbank an, und nur wenn INITIAL_ADMIN_EMAIL/-PASSWORD gesetzt sind. +# Ist die Datenbank schon da, hilft nur noch der Einrichtungsassistent im +# Browser - und danach muessen dessen Zugangsdaten in die .env. +npm_db_exists() { + local d="${NPM_DATA_DIR:-$PROJECT_DIR/data/npm/data}" + case "$d" in /*) : ;; *) d="$PROJECT_DIR/${d#./}" ;; esac + [ -s "$d/database.sqlite" ] +} + # Sehr einfache Auswertung - kein jq noetig, das fehlt auf vielen Hosts json_num() { printf '%s' "$1" | tr ',' '\n' | sed -n "s/.*\"$2\"[[:space:]]*:[[:space:]]*\([0-9][0-9]*\).*/\1/p" | head -n1; } json_str() { printf '%s' "$1" | tr ',' '\n' | sed -n "s/.*\"$2\"[[:space:]]*:[[:space:]]*\"\([^\"]*\)\".*/\1/p" | head -n1; } @@ -3309,17 +3366,39 @@ json_ids() { printf '%s' "$1" | grep -o '"id":[0-9]*' | sed 's/.*://' ; } npm_api_token() { local base; base="$(npm_api_base)" - [ -n "${NPM_ADMIN_EMAIL:-}" ] && [ -n "${NPM_ADMIN_PASSWORD:-}" ] || { + if [ -z "${NPM_ADMIN_EMAIL:-}" ] || [ -z "${NPM_ADMIN_PASSWORD:-}" ]; then err "Es sind keine Zugangsdaten fuer den Proxy Manager hinterlegt." - cat >&2 <&2 + if npm_db_exists; then + cat >&2 < + $SELF config set NPM_ADMIN_PASSWORD + + Alternativ ganz neu beginnen - VERWIRFT die Proxy-Konfiguration: + $SELF npm-reset EOF + else + cat >&2 < + $SELF config set NPM_ADMIN_PASSWORD + $SELF up +EOF + fi return 1 - } + fi local body body="$(curl -sS --max-time 20 -X POST "$base/api/tokens" \ -H 'Content-Type: application/json' \ @@ -5233,6 +5312,7 @@ main() { browser) cmd_browser "$@" || true ;; npm-port) cmd_npm_port "$@" ;; npm-enable) cmd_npm_enable "$@" ;; + npm-reset) cmd_npm_reset ;; proxy) cmd_proxy "$@" ;; config) cmd_config "$@" || true ;; selftest) cmd_selftest ;;