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) <noreply@anthropic.com>
This commit is contained in:
@@ -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 |
|
||||
|
||||
@@ -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 |
|
||||
|
||||
+88
-8
@@ -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 <adresse>"
|
||||
return 0
|
||||
fi
|
||||
|
||||
cat <<EOF
|
||||
|
||||
${C_BLD}Was dabei verloren geht${C_RST}
|
||||
$d/database.sqlite
|
||||
Darin stehen Konten, Proxy-Hosts, Weiterleitungen und Zugriffslisten.
|
||||
|
||||
${C_BLD}Was bleibt${C_RST}
|
||||
Zertifikate unter ${NPM_LE_DIR:-./data/npm/letsencrypt} und
|
||||
$d/custom_ssl
|
||||
|
||||
Die Proxy-Hosts lassen sich anschliessend mit
|
||||
$SELF proxy add --domain ...
|
||||
in einem Aufruf neu anlegen.
|
||||
EOF
|
||||
confirm "Datenbank wirklich verwerfen?" || die "Abgebrochen."
|
||||
|
||||
[ -n "${NPM_ADMIN_EMAIL:-}" ] && [ -n "${NPM_ADMIN_PASSWORD:-}" ] \
|
||||
|| warn "NPM_ADMIN_EMAIL/-PASSWORD sind nicht gesetzt - dann entsteht
|
||||
beim naechsten Start wieder kein Konto. Zuerst setzen!"
|
||||
|
||||
local stamp; stamp="$(date +%Y%m%d-%H%M%S)"
|
||||
if container_running "$NPM_CONTAINER_NAME"; then
|
||||
log "Stoppe '$NPM_CONTAINER_NAME' ..."
|
||||
$RUNTIME stop "$NPM_CONTAINER_NAME" >/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 <<EOF
|
||||
In der .env eintragen:
|
||||
NPM_ADMIN_EMAIL=...
|
||||
NPM_ADMIN_PASSWORD=...
|
||||
Beim ERSTEN Start mit leerer Datenbank legt der Container damit das
|
||||
Konto selbst an. Besteht das Konto schon, hier dessen Daten eintragen.
|
||||
printf '\n' >&2
|
||||
if npm_db_exists; then
|
||||
cat >&2 <<EOF
|
||||
Der Proxy Manager hat bereits eine Datenbank. Seit Version 2.15 legt
|
||||
er KEINE Standardzugangsdaten mehr an - admin@example.com/changeme
|
||||
gibt es nicht. Das Konto entsteht entweder beim allerersten Start
|
||||
aus NPM_ADMIN_EMAIL/-PASSWORD, oder von Hand im Browser.
|
||||
|
||||
Weil die Datenbank schon steht, bleibt:
|
||||
1) Oberflaeche aufrufen und das Konto anlegen:
|
||||
$SELF browser
|
||||
(oder http://127.0.0.1:${NPM_ADMIN_PORT:-81} vom Arbeitsplatz aus)
|
||||
2) Dieselben Daten hier eintragen:
|
||||
$SELF config set NPM_ADMIN_EMAIL <adresse>
|
||||
$SELF config set NPM_ADMIN_PASSWORD <kennwort>
|
||||
|
||||
Alternativ ganz neu beginnen - VERWIRFT die Proxy-Konfiguration:
|
||||
$SELF npm-reset
|
||||
EOF
|
||||
else
|
||||
cat >&2 <<EOF
|
||||
Der Proxy Manager hat noch keine Datenbank. Dann genuegt es, die
|
||||
Zugangsdaten zu setzen und den Stack zu starten - der Container legt
|
||||
das Konto damit selbst an:
|
||||
$SELF config set NPM_ADMIN_EMAIL <adresse>
|
||||
$SELF config set NPM_ADMIN_PASSWORD <kennwort>
|
||||
$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 ;;
|
||||
|
||||
Reference in New Issue
Block a user