Proxy Manager neu starten - als Menuepunkt und als Parameter

Die Zusatzkonfiguration - Standard-Server fuer den IP-Zugang, Adminport -
liegt als Datei im Datenverzeichnis und wird erst beim naechsten
Einlesen beachtet. Bisher blieb dafuer nur "restart" fuer den ganzen
Stack.

  proxy reload    nginx neu einlesen, ohne Unterbrechung
  proxy restart   Container neu starten

"reload" prueft vorher mit "nginx -t" und laedt nur bei fehlerfreier
Konfiguration neu; sonst stehen Ursache und Zeilennummer da und es
passiert nichts. In der Oberflaeche liegt beides unter Proxy-Hosts >
"Proxy Manager neu starten / nginx neu laden".

Beim Bauen kamen zwei Dinge heraus:

  - "nginx -t" beantwortet nicht, ob nginx laeuft - es prueft nur die
    Datei und gelingt auch, bevor der Dienst da ist. Als
    Bereitschaftspruefung nach dem Neustart taugt es also nicht; es wird
    jetzt in /proc nach dem Masterprozess gesehen (ohne "ps", das es im
    Container nicht gibt) und anschliessend geprueft, ob die
    Adminoberflaeche wieder antwortet. nginx ist nach einer Sekunde
    zurueck, der Dienst dahinter braucht laenger - ein sofortiges
    "fertig" waere gelogen.
  - ENVFILE_OPT wurde nie an Unterprozesse weitergereicht. Wer die
    Oberflaeche mit --env-file startete, dessen Menuepunkte liefen gegen
    die Standard-.env, also womoeglich gegen den falschen Stack. Alle 43
    Stellen bekommen die Option jetzt mit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-20 21:24:46 +02:00
co-authored by Claude Opus 5
parent 08271a04cf
commit 48228ba910
3 changed files with 235 additions and 47 deletions
+169 -47
View File
@@ -23,6 +23,11 @@ ASSUME_YES=""
VERBOSE=""
NPM_TOKEN=""
ENVFILE_OPT=""
# Ein aus der Oberflaeche gestarteter Unterprozess muss dieselbe
# Konfiguration lesen wie wir. Ohne das greift er zur Standard-.env,
# und die Aktion liefe gegen den falschen Stack.
SELF_ENV="" # fuer "bash -c"-Zeichenketten
SELF_ENV_ARR=() # fuer direkte Aufrufe
# =====================================================================
# Hilfe
@@ -3905,6 +3910,21 @@ EOF
sed -i '/./,$!d' "$f"
}
# Laeuft nginx im Container wirklich? "nginx -t" beantwortet das NICHT -
# es prueft nur die Datei und gelingt auch, bevor der Dienst da ist.
# Der Pfad der pid-Datei ist vom Abbild abhaengig (bei NPM
# /run/nginx/nginx.pid), deshalb wird schlicht in /proc nachgesehen -
# das kommt ohne "ps" aus, das es im Container nicht gibt.
npm_nginx_up() {
$RUNTIME exec "$NPM_CONTAINER_NAME" sh -c '
for d in /proc/[0-9]*; do
case "$(tr "\0" " " < "$d/cmdline" 2>/dev/null)" in
*"nginx: master"*) exit 0 ;;
esac
done
exit 1' >/dev/null 2>&1
}
npm_reload_hint() { # restart-flag
if [ -n "${1:-}" ] && container_running "$NPM_CONTAINER_NAME"; then
log "Starte '$NPM_CONTAINER_NAME' neu, damit nginx die Konfiguration liest ..."
@@ -3914,7 +3934,8 @@ npm_reload_hint() { # restart-flag
warn "Neustart fehlgeschlagen - bitte manuell: $SELF restart"
fi
else
log "Wirksam nach: $SELF restart (bzw. Neustart des Proxy Managers)"
log "Wirksam nach: $SELF proxy restart
(oder ohne Unterbrechung: $SELF proxy reload)"
fi
}
@@ -4003,6 +4024,83 @@ cmd_proxy() {
echo
return 0 ;;
reload|restart)
npm_enabled || die "Der NGINX Proxy Manager ist abgeschaltet (NPM_ENABLED=off).
Einschalten: $SELF npm-enable on"
container_running "$NPM_CONTAINER_NAME" \
|| die "Der Container '$NPM_CONTAINER_NAME' laeuft nicht.
Starten: $SELF up"
if [ "$sub" = reload ] && ! npm_nginx_up; then
err "Im Container laeuft kein nginx - es gibt nichts neu zu laden."
log "Dann hilft ein Neustart: $SELF proxy restart"
return 1
fi
if [ "$sub" = reload ]; then
# Erst die Konfiguration pruefen. nginx wuerde ein fehlerhaftes
# Reload zwar ablehnen und weiterlaufen, aber dann steht die
# Ursache nur im Containerprotokoll.
local out
if ! out="$($RUNTIME exec "$NPM_CONTAINER_NAME" nginx -t 2>&1)"; then
err "Die nginx-Konfiguration ist fehlerhaft - es wird nichts neu geladen."
printf '%s\n' "$out" | sed 's/^/ /' >&2
return 1
fi
log "Konfiguration in Ordnung, lade nginx neu ..."
if $RUNTIME exec "$NPM_CONTAINER_NAME" nginx -s reload >/dev/null 2>&1; then
ok "nginx hat die Konfiguration neu eingelesen (ohne Unterbrechung)."
else
err "Neuladen fehlgeschlagen."
log "Dann hilft ein Neustart: $SELF proxy restart"
return 1
fi
else
log "Starte '$NPM_CONTAINER_NAME' neu ..."
if ! $RUNTIME restart "$NPM_CONTAINER_NAME" >/dev/null; then
err "Neustart fehlgeschlagen."
log "Protokoll ansehen: $RUNTIME logs --tail 50 $NPM_CONTAINER_NAME"
return 1
fi
# Warten, bis nginx wieder lauscht - und ehrlich melden,
# wenn es das nicht tut
local i=0 up=""
while [ "$i" -lt 60 ]; do
if npm_nginx_up; then up=1; break; fi
i=$((i+1)); sleep 1
done
if [ -z "$up" ]; then
warn "Der Container laeuft, nginx ist aber nach 60s nicht da."
log "Protokoll ansehen: $RUNTIME logs --tail 50 $NPM_CONTAINER_NAME"
return 1
fi
ok "Proxy Manager neu gestartet."
# nginx ist schnell wieder da, die Oberflaeche dahinter braucht
# laenger. Ohne diese zweite Pruefung meldet der Befehl Erfolg,
# waehrend der Browser noch ins Leere laeuft.
local url code
url="${NPM_ADMIN_URL:-http://127.0.0.1:${NPM_ADMIN_PORT:-81}}"
i=0
while [ "$i" -lt 45 ]; do
code="$(http_code "$url")" || code=000
case "$code" in 2??|3??) break ;; esac
i=$((i+1)); sleep 1
done
case "$code" in
2??|3??) log "Adminoberflaeche antwortet wieder (nach ${i}s)." ;;
*) warn "Die Adminoberflaeche antwortet noch nicht ($url, HTTP $code).
Kurz warten - der Dienst dahinter braucht laenger als nginx." ;;
esac
fi
printf ' Adminoberflaeche : %s\n' "${NPM_ADMIN_URL:-http://127.0.0.1:${NPM_ADMIN_PORT:-81}}"
local conf; conf="$(npm_custom_conf_path)"
if grep -qsF "$NPM_DEF_START" "$conf"; then
printf ' HTTPS ueber die blanke IP: eingerichtet\n'
fi
return 0 ;;
default|ip)
local dom="" off="" restart="" conf
while [ $# -gt 0 ]; do
@@ -4447,7 +4545,8 @@ EOF
return 0 ;;
*) die "Unbekanntes Unterkommando 'proxy $sub'.
Moeglich: status | list | show | certs | add | edit | del | default" ;;
Moeglich: status | list | show | certs | add | edit | del | default
| reload | restart" ;;
esac
}
@@ -4614,11 +4713,11 @@ gui_stack_menu() {
logs "Letzte 200 Logzeilen ansehen" \
back "zurueck")" || return 0
case "$sel" in
up) ui_run "Stack starten" bash -c "cd '$PROJECT_DIR' && '$SELF' up" ;;
restart) ui_run "Neu starten" bash -c "cd '$PROJECT_DIR' && '$SELF' restart" ;;
up) ui_run "Stack starten" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV up" ;;
restart) ui_run "Neu starten" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV restart" ;;
down) ui_yesno "Stack stoppen" "Container wirklich stoppen und entfernen?\n(Die Daten unter ./data bleiben erhalten.)" \
&& ui_run "Stack stoppen" bash -c "cd '$PROJECT_DIR' && '$SELF' down" ;;
pull) ui_run "Images laden" bash -c "cd '$PROJECT_DIR' && '$SELF' pull" ;;
&& ui_run "Stack stoppen" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV down" ;;
pull) ui_run "Images laden" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV pull" ;;
logs) local lf; lf="$(mktemp)"; compose logs --tail=200 >"$lf" 2>&1 || true
ui_text "Logs (letzte 200 Zeilen)" "$lf"; rm -f "$lf" ;;
back) return 0 ;;
@@ -4659,7 +4758,7 @@ gui_backup() {
args+=(--site "$sitename")
done
ui_run "Backup laeuft" bash -c "cd '$PROJECT_DIR' && '$SELF' -y ${args[*]}"
ui_run "Backup laeuft" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y ${args[*]}"
}
# ---------------------------------------------------------------------
@@ -4700,7 +4799,7 @@ gui_backup_auto() {
Abschalten? Die Jobs bleiben erhalten, es wird nur
nichts mehr automatisch ausgefuehrt." || return 0
ui_run "Automatik abschalten" bash -c "cd '$PROJECT_DIR' && '$SELF' -y job auto off"
ui_run "Automatik abschalten" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y job auto off"
else
local n; n="$(jobs_read | awk -F'|' '$7=="on"' | wc -l)"
if [ "$n" -eq 0 ]; then
@@ -4716,7 +4815,7 @@ dort wird auch der Zeitplan festgelegt."
($CRON_FILE).
Dafuer werden root-Rechte benoetigt. Einschalten?" || return 0
ui_run "Automatik einschalten" bash -c "cd '$PROJECT_DIR' && '$SELF' -y job auto on"
ui_run "Automatik einschalten" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y job auto on"
fi
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
}
@@ -4740,7 +4839,7 @@ gui_job_run_now() {
local j; j="$(gui_pick_job)" || return 0
[ -n "$j" ] || return 0
ui_yesno "Job ausfuehren" "Job '$j' jetzt ausfuehren?" || return 0
ui_run "Job '$j'" bash -c "cd '$PROJECT_DIR' && '$SELF' -y job run '$j'"
ui_run "Job '$j'" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y job run '$j'"
}
gui_jobs_menu() {
@@ -4766,10 +4865,10 @@ Jobdatei: $(jobs_file)" \
j2="$(gui_pick_job)" || continue; [ -n "$j2" ] || continue
l="$(job_line "$j2")"; st=disable
if [ "$(job_f "$l" 7)" = off ]; then st=enable; fi
ui_run "Job $st" bash -c "cd '$PROJECT_DIR' && '$SELF' -y job $st '$j2'" ;;
ui_run "Job $st" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y job $st '$j2'" ;;
del) local j3; j3="$(gui_pick_job)" || continue; [ -n "$j3" ] || continue
ui_yesno "Loeschen" "Job '$j3' wirklich loeschen?\n\n(Bereits erstellte Backups bleiben erhalten.)" \
&& ui_run "Job loeschen" bash -c "cd '$PROJECT_DIR' && '$SELF' -y job del '$j3'" ;;
&& ui_run "Job loeschen" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y job del '$j3'" ;;
back) return 0 ;;
esac
done
@@ -4865,7 +4964,7 @@ gui_job_edit() { # name (leer = neu)
local action=add; job_exists "$name" && action=set
ui_run "Job speichern" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y job $action --name '$name' --sites '$sites' \
"cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y job $action --name '$name' --sites '$sites' \
--cron '$cron' --dir '$dir' --keep '$keep' $opts"
}
@@ -4885,7 +4984,7 @@ gui_restore() {
reuse="--reuse --kill"
fi
ui_yesno "Restore starten" "Site '$B_SITE' aus\n$(basename "$file")\nwiederherstellen?" || return 0
ui_run "Restore laeuft" bash -c "cd '$PROJECT_DIR' && '$SELF' -y restore --file '$file' $reuse"
ui_run "Restore laeuft" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y restore --file '$file' $reuse"
}
gui_import() {
@@ -4919,7 +5018,7 @@ Dann muessen die Agents NICHT neu eingerichtet werden."
ui_yesno "Standard-Site" "Soll CMK_SITE_ID in der .env auf '$B_SITE' gesetzt werden?\n\n(Empfohlen - sonst startet der Container nach einem Reboot\ndie importierte Site nicht automatisch.)" \
&& setdef="--set-default-site"
ui_run "Import laeuft" bash -c "cd '$PROJECT_DIR' && '$SELF' -y import --file '$file' $reuse $setdef"
ui_run "Import laeuft" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y import --file '$file' $reuse $setdef"
}
gui_backups_menu() {
@@ -4938,7 +5037,7 @@ gui_backups_menu() {
local f2; f2="$(mktemp)"; bundle_show "$b" >"$f2" 2>&1 || true
ui_text "Details" "$f2"; rm -f "$f2" ;;
verify) local b2; b2="$(gui_pick_backup)" || continue; [ -n "$b2" ] || continue
ui_run "Pruefe Bundle" bash -c "cd '$PROJECT_DIR' && '$SELF' verify --file '$b2'" ;;
ui_run "Pruefe Bundle" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV verify --file '$b2'" ;;
del) local b3; b3="$(gui_pick_backup)" || continue; [ -n "$b3" ] || continue
ui_yesno "Loeschen" "Datei wirklich loeschen?\n\n$b3" && rm -f "$b3" \
&& ui_msg "Geloescht" "Die Datei wurde entfernt." ;;
@@ -4960,10 +5059,10 @@ gui_sites_menu() {
case "$sel" in
list) local f; f="$(mktemp)"; cmd_sites >"$f" 2>&1 || true; ui_text "Sites" "$f"; rm -f "$f" ;;
start) local s; s="$(gui_pick_site)" || continue; [ -n "$s" ] || continue
ui_run "Site starten" bash -c "cd '$PROJECT_DIR' && '$SELF' site-start '$s'" ;;
ui_run "Site starten" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV site-start '$s'" ;;
stop) local s2; s2="$(gui_pick_site)" || continue; [ -n "$s2" ] || continue
ui_run "Site stoppen" bash -c "cd '$PROJECT_DIR' && '$SELF' site-stop '$s2'" ;;
all) ui_run "Alle Sites starten" bash -c "cd '$PROJECT_DIR' && '$SELF' start-all-sites" ;;
ui_run "Site stoppen" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV site-stop '$s2'" ;;
all) ui_run "Alle Sites starten" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV start-all-sites" ;;
back) return 0 ;;
esac
done
@@ -5128,7 +5227,7 @@ Benutzer:" "")" || return 0
case "$src" in
registry)
ui_run "Image holen: $ed $ver" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y image pull --edition '$ed' --version '$ver' --remember ${extra[*]+${extra[*]}}" || rc=1 ;;
"cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y image pull --edition '$ed' --version '$ver' --remember ${extra[*]+${extra[*]}}" || rc=1 ;;
download)
case "$ver" in
*-latest|latest|*-daily)
@@ -5138,20 +5237,20 @@ z.B. 2.3.0p23 - '$ver' gibt es dort nicht."
return 0 ;;
esac
ui_run "Tarball holen: $ed $ver" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y image download --edition '$ed' --version '$ver' --remember ${extra[*]+${extra[*]}}" || rc=1 ;;
"cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y image download --edition '$ed' --version '$ver' --remember ${extra[*]+${extra[*]}}" || rc=1 ;;
file)
local lf
lf="$(ui_pick_file "${IMAGE_DIR:-$PROJECT_DIR/images}" '*.tar.gz')" || return 0
[ -n "$lf" ] || return 0
ui_run "Image einspielen" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y image load --file '$lf'" || rc=1
"cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y image load --file '$lf'" || rc=1
[ "$rc" = 0 ] && ui_run "Edition/Version eintragen" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y config set CMK_EDITION '$ed' && '$SELF' -y config set CMK_VERSION '$ver'" ;;
"cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y config set CMK_EDITION '$ed' && '$SELF' $SELF_ENV -y config set CMK_VERSION '$ver'" ;;
setonly)
# Setzt Edition, Version UND das daraus gebildete Image.
# Heruntergeladen wird nichts - das erledigt "up" bei Bedarf.
ui_run "Eintragen" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y image use --edition '$ed' --version '$ver'" || rc=1 ;;
"cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y image use --edition '$ed' --version '$ver'" || rc=1 ;;
esac
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
@@ -5247,13 +5346,13 @@ Woher soll das Image geholt werden?" \
lf="$(ui_pick_file "${IMAGE_DIR:-$PROJECT_DIR/images}" '*.tar.gz')" || return 0
[ -n "$lf" ] || return 0
ui_run "Image einspielen" bash -c \
"cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' -y image load --file '$lf'"
"cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' $SELF_ENV -y image load --file '$lf'"
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
return 0 ;;
esac
ui_run "Image holen ($sel)" bash -c \
"cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' -y image get --source '$sel'"
"cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' $SELF_ENV -y image get --source '$sel'"
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
local f; f="$(mktemp)"
@@ -5284,7 +5383,7 @@ gui_image_test() {
[ -n "$user" ] && extra+=(--user "$user" --password "$pass")
fi
ui_run "Zugangsdaten pruefen" bash -c \
"cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' image test --edition '$ed' --version '$ver' ${extra[*]+${extra[*]}}"
"cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' $SELF_ENV image test --edition '$ed' --version '$ver' ${extra[*]+${extra[*]}}"
}
gui_image_pull() {
@@ -5298,7 +5397,7 @@ gui_image_pull() {
pass="$(ui_password "Registry-Anmeldung" "Kennwort:")" || return 0
[ -n "$user" ] && extra+=(--user "$user" --password "$pass")
fi
ui_run "Image holen" bash -c "cd '$PROJECT_DIR' && '$SELF' -y image pull --edition '$ed' --version '$ver' ${extra[*]+${extra[*]}}"
ui_run "Image holen" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y image pull --edition '$ed' --version '$ver' ${extra[*]+${extra[*]}}"
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
}
@@ -5314,7 +5413,7 @@ gui_image_download() {
esac
user="$(ui_input "Downloadportal" "Benutzer:" "${CMK_DOWNLOAD_USER:-}")" || return 0
pass="$(ui_password "Downloadportal" "Kennwort:")" || return 0
ui_run "Image herunterladen" bash -c "cd '$PROJECT_DIR' && '$SELF' -y image download --edition '$ed' --version '$ver' --user '$user' --password '$pass'"
ui_run "Image herunterladen" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y image download --edition '$ed' --version '$ver' --user '$user' --password '$pass'"
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
}
@@ -5327,7 +5426,7 @@ gui_image_use() {
[ ${#items[@]} -gt 0 ] || { ui_msg "Images" "Es ist kein Checkmk-Image lokal vorhanden.\n\nZuerst 'pull', 'download' oder 'load' verwenden."; return; }
local sel
sel="$(ui_menu "Image auswaehlen" "Lokal vorhandene Checkmk-Images:" "${items[@]}")" || return 0
ui_run "Image setzen" bash -c "cd '$PROJECT_DIR' && '$SELF' -y image use '$sel'"
ui_run "Image setzen" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y image use '$sel'"
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
}
@@ -5399,14 +5498,14 @@ naechsten Start selbst nach.
Uebernehmen?"; then
ui_run "Image setzen" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y image use --edition '$CMK_EDITION' --version '$CMK_VERSION'"
"cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y image use --edition '$CMK_EDITION' --version '$CMK_VERSION'"
fi ;;
angleichen)
if [ -z "${CMK_IMAGE:-}" ]; then
ui_msg "Nicht moeglich" "CMK_IMAGE ist nicht gesetzt."
else
ui_run "Vorgaben angleichen" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y image use '$CMK_IMAGE' --remember"
"cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y image use '$CMK_IMAGE' --remember"
fi ;;
esac
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
@@ -5447,9 +5546,9 @@ Uebernehmen?"; then
done
if [ "$key" = NPM_ADMIN_PORT ]; then
ui_run "Admin-Port setzen" bash -c "cd '$PROJECT_DIR' && '$SELF' -y npm-port '$new'"
ui_run "Admin-Port setzen" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -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'"
ui_run "Proxy Manager ${new}schalten" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y npm-enable '$new'"
else
env_set "$key" "$new" "$opt"
local hint=""
@@ -5465,7 +5564,7 @@ Uebernehmen?"; then
Getestet wird die Anmeldung an Registry und Downloadportal -
es wird nichts heruntergeladen."; then
ui_run "Zugangsdaten pruefen" bash -c \
"cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' image test"
"cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' $SELF_ENV image test"
fi ;;
esac
fi
@@ -5569,7 +5668,7 @@ Oberflaeche des Proxy Managers darstellen." \
url) local u
u="$(ui_input "Startseite" "URL:" "${NPM_ADMIN_URL:-http://127.0.0.1:81}")" || continue
if [ -n "$u" ]; then NPM_ADMIN_URL="$u"; fi ;;
build) ui_run "Werkzeug-Image bauen" bash -c "cd '$PROJECT_DIR' && '$SELF' browser --build-only" || true ;;
build) ui_run "Werkzeug-Image bauen" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV browser --build-only" || true ;;
back) return 0 ;;
*) local burl="${NPM_ADMIN_URL:-http://127.0.0.1:81}"
if ! browser_url_reachable "$burl"; then
@@ -5653,13 +5752,13 @@ in einem Durchgang neu anlegen.
Fortfahren?" || return 0
ui_run "Datenbank zuruecksetzen" bash -c \
"cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' -y npm-reset"
"cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' $SELF_ENV -y npm-reset"
if ui_yesno "Jetzt starten?" \
"Damit das Konto entsteht, muss der Proxy Manager neu starten.
Stack jetzt starten?"; then
ui_run "Stack starten" bash -c "cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' -y up"
ui_run "Stack starten" bash -c "cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' $SELF_ENV -y up"
fi
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
}
@@ -5679,6 +5778,7 @@ Ziel : ${PROXY_FORWARD_HOST:-127.0.0.1}:${PROXY_FORWARD_PORT:-5000}" \
show "Einzelheiten eines Proxy-Hosts (mit Pfaden)" \
certs "Vorhandene Zertifikate anzeigen" \
ipzugang "HTTPS ueber die blanke IP (ohne Namen) ermoeglichen" \
neustart "Proxy Manager neu starten / nginx neu laden" \
del "Proxy-Host loeschen" \
status "Anmeldung pruefen" \
reset "Datenbank zuruecksetzen (Konto neu anlegen lassen)" \
@@ -5696,8 +5796,9 @@ Ziel : ${PROXY_FORWARD_HOST:-127.0.0.1}:${PROXY_FORWARD_PORT:-5000}" \
certs) local f2; f2="$(mktemp)"; NO_COLOR=1 cmd_proxy certs >"$f2" 2>&1 || true
ui_text "Zertifikate" "$f2"; rm -f "$f2" ;;
ipzugang) gui_proxy_default || true ;;
neustart) gui_proxy_restart || true ;;
del) gui_proxy_del || true ;;
status) ui_run "Anmeldung pruefen" bash -c "cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' proxy status" ;;
status) ui_run "Anmeldung pruefen" bash -c "cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' $SELF_ENV proxy status" ;;
reset) gui_npm_reset || true ;;
back) return 0 ;;
esac
@@ -5857,6 +5958,23 @@ Mehrere Anweisungen durch \\\\n trennen." "$curadv")" || continue
done
}
gui_proxy_restart() {
local sel
sel="$(ui_menu "Proxy Manager neu starten" \
"Nach Aenderungen an der Zusatzkonfiguration - etwa am Standard-Server
fuer den IP-Zugang oder am Adminport - muss nginx sie erst einlesen.
Neu laden genuegt dafuer und unterbricht keine Verbindung. Ein Neustart
des Containers ist nur noetig, wenn sich Umgebungsvariablen geaendert
haben oder nginx gar nicht mehr antwortet." \
reload "nginx neu laden (ohne Unterbrechung)" \
restart "Container neu starten (kurze Unterbrechung)" \
back "zurueck")" || return 0
case "$sel" in back) return 0 ;; esac
ui_run "Proxy Manager: $sel" bash -c "cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' $SELF_ENV proxy $sel" || true
return 0
}
gui_proxy_default() {
local f rc=0
f="$(mktemp)"
@@ -5880,7 +5998,7 @@ Aufrufe mit Namen bleiben unberuehrt." \
case "$sel" in
back) return 0 ;;
aus) ui_run "Standard-Server entfernen" bash -c \
"cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' proxy default --off --restart" || true
"cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' $SELF_ENV proxy default --off --restart" || true
return 0 ;;
esac
@@ -5997,7 +6115,7 @@ Einen bereits vorhandenen Eintrag fuer diesen Namen ersetzen?
<Nein> bricht ab, falls es ihn schon gibt"; then upd=--update; fi
ui_run "Proxy-Host anlegen" bash -c \
"cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' -y proxy add --domain '$dom' \
"cd '$PROJECT_DIR' && NO_COLOR=1 '$SELF' $SELF_ENV -y proxy add --domain '$dom' \
--forward-port '$fport' --cert '$cert' $upd ${locopt[*]+${locopt[*]}}"
# Die Vorgaben merken, damit der naechste Aufruf sie kennt
@@ -6015,7 +6133,7 @@ gui_proxy_del() {
[ -n "$id" ] || return 0
case "$id" in ''|*[!0-9]*) ui_msg "Ungueltig" "Bitte eine Zahl angeben."; return 0 ;; esac
ui_yesno "Loeschen" "Proxy-Host $id wirklich loeschen?" || return 0
ui_run "Proxy-Host loeschen" bash -c "cd '$PROJECT_DIR' && '$SELF' -y proxy del --id '$id'"
ui_run "Proxy-Host loeschen" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV -y proxy del --id '$id'"
}
gui_cert() {
@@ -6026,7 +6144,7 @@ gui_cert() {
days="$(ui_input "Zertifikat" "Gueltigkeit in Tagen:" "${CERT_DAYS:-3650}")" || days=3650
local -a a=(); local x
for x in $alt; do a+=(--alt "$x"); done
ui_run "Zertifikat erzeugen" bash -c "cd '$PROJECT_DIR' && '$SELF' cert --domain '$domain' --days '$days' ${a[*]+${a[*]}}"
ui_run "Zertifikat erzeugen" bash -c "cd '$PROJECT_DIR' && '$SELF' $SELF_ENV cert --domain '$domain' --days '$days' ${a[*]+${a[*]}}"
}
# Bericht anzeigen; fehlt etwas, das Uebernehmen anbieten
@@ -6077,9 +6195,9 @@ Nein = Freigabe fuer alle Quellen"; then
local -a a=(firewall "${opt[@]}" --apply --yes)
if [ "$(id -u)" -eq 0 ]; then
ui_run "Firewall-Regeln uebernehmen" "$SELF" "${a[@]}" || true
ui_run "Firewall-Regeln uebernehmen" "$SELF" ${SELF_ENV_ARR[@]+"${SELF_ENV_ARR[@]}"} "${a[@]}" || true
elif command -v sudo >/dev/null 2>&1; then
gui_run_interactive sudo -- "$SELF" "${a[@]}"
gui_run_interactive sudo -- "$SELF" ${SELF_ENV_ARR[@]+"${SELF_ENV_ARR[@]}"} "${a[@]}"
else
ui_msg "Firewall" "Dafuer werden root-Rechte benoetigt.
Bitte als root erneut aufrufen."
@@ -6124,9 +6242,9 @@ Nein = nur noch lokal (Terminal-Browser oder SSH-Tunnel)"; then
fi
fi
if [ "$(id -u)" -eq 0 ]; then
ui_run "Ports schliessen" "$SELF" "${a[@]}" || true
ui_run "Ports schliessen" "$SELF" ${SELF_ENV_ARR[@]+"${SELF_ENV_ARR[@]}"} "${a[@]}" || true
elif command -v sudo >/dev/null 2>&1; then
gui_run_interactive sudo -- "$SELF" "${a[@]}"
gui_run_interactive sudo -- "$SELF" ${SELF_ENV_ARR[@]+"${SELF_ENV_ARR[@]}"} "${a[@]}"
else
ui_msg "Firewall" "Dafuer werden root-Rechte benoetigt.
Bitte als root erneut aufrufen."
@@ -7131,6 +7249,10 @@ main() {
esac
done
if [ -n "$ENVFILE_OPT" ]; then
SELF_ENV="--env-file '$ENVFILE_OPT'"
SELF_ENV_ARR=(--env-file "$ENVFILE_OPT")
fi
load_env "${ENVFILE_OPT:-$PROJECT_DIR/.env}"
detect_runtime
UI_BACKTITLE="Checkmk Stack Manager - Runtime: $RUNTIME"