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:
+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