143 lines
6.7 KiB
Bash
Executable File
143 lines
6.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
ROOT=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
|
|
if [[ $# == 0 || ${1:-} == --help || ${1:-} == -h ]]; then
|
|
cat <<'HELP'
|
|
Werkjournal — Serverwerkzeuge
|
|
|
|
remote backend install-jdk [--force]
|
|
Geprüftes Temurin JDK 25 im Home des Zielusers installieren.
|
|
--force installiert den gepinnten Stand erneut.
|
|
|
|
remote backend deploy-prototype --artifact DIRECTORY
|
|
Erstdeployment des geprüften Prototyps; verweigert bestehende Releases/Daten.
|
|
|
|
remote backend deploy-guest-preview --artifact DIRECTORY
|
|
Einmaliger Wechsel vom datenlosen Prototyp zur Gastoberfläche.
|
|
Verweigert vorhandene Daten; erhält die bisherige Anwendung als Rückfall.
|
|
|
|
Konfiguration: .env im Repository (Vorlage .env.example).
|
|
remote backend deploy [-y] --artifact DIRECTORY
|
|
Geprüftes CI-Artefakt mit Wartung, geschlossener H2-Sicherung und Rückfall aktivieren.
|
|
remote backend restore --backup FILE
|
|
Geprüfte Sicherung nach ausdrücklicher Bestätigung einspielen; Vorzustand sichern.
|
|
remote backend restore --recover
|
|
Unterbrochenen Restore sicher abschließen oder vor Freigabe zurücknehmen.
|
|
remote backend backup [FILE]
|
|
Dienst kurz anhalten und Datenbank samt Programmstand privat sichern.
|
|
Vorgabe: git-ignoriertes backups/; vorhandene Dateien werden nicht überschrieben.
|
|
remote backend upload [-y] --artifact DIRECTORY
|
|
Geprüften Kandidaten nur bereitstellen. Erst deploy aktiviert ihn; Neustart genügt nicht.
|
|
remote backend setup-push
|
|
Push-Schlüssel geschützt erzeugen; vorhandene Schlüssel erhalten, Versand bleibt aus.
|
|
remote backend prepare-admin-recovery
|
|
Einmaligen Admin-Code für 24 Stunden freischalten, nur wenn kein Administrator existiert.
|
|
Kurze Wartung; Code liegt geschützt auf dem Server und wird nicht ausgegeben.
|
|
remote backend recover
|
|
Unterbrochenes Deployment anhand des dauerhaften Journals wiederherstellen.
|
|
remote backend start|stop|restart|status|enable|disable
|
|
Den bestehenden systemd-User-Dienst steuern; Start/Neustart prüfen die Bereitschaft.
|
|
Mutationen verwenden die Deployment-Sperre. Vorhandene Wartung bleibt bestehen.
|
|
enable/disable verändern nur den Autostart, nicht den laufenden Prozess.
|
|
remote backend log [JOURNALCTL-ARGS]
|
|
Letzte 100 Journalzeilen, z.B. --follow oder --since '1 hour ago'. Kein Pager.
|
|
remote backend setup
|
|
Unit aus Vorlage schreiben und daemon-reload; kein Neustart, keine Geheimnisänderung.
|
|
remote backend info
|
|
Version/Commit und Bereitschaft intern sowie öffentlich per HTTPS prüfen.
|
|
remote ssh [COMMAND [ARG...]]
|
|
Interaktive SSH-Shell oder einen Befehl mit getrennten Argumenten ausführen.
|
|
HELP
|
|
exit 0
|
|
fi
|
|
if [[ ${1:-} == backend && ${2:-} == install-jdk ]]; then
|
|
shift 2
|
|
exec "$ROOT/scripts/install-jdk.sh" "$@"
|
|
fi
|
|
if [[ ${1:-} == backend && ${2:-} == deploy-prototype ]]; then
|
|
shift 2
|
|
exec "$ROOT/scripts/deploy-prototype.sh" "$@"
|
|
fi
|
|
if [[ ${1:-} == backend && ${2:-} == deploy-guest-preview ]]; then
|
|
shift 2
|
|
[[ $# == 2 && $1 == --artifact ]] || { echo 'Usage: remote backend deploy-guest-preview --artifact DIRECTORY' >&2; exit 2; }
|
|
source "$ROOT/scripts/lib-env.sh"
|
|
target=$(env_value BACKEND_SSH)
|
|
exec python3 "$ROOT/scripts/deploy-prototype.py" "${target:-mih04-werkjournal@mih04.hostsharing.net}" "$2" --guest-preview
|
|
fi
|
|
if [[ ${1:-} == backend && ${2:-} == deploy ]]; then
|
|
shift 2
|
|
if [[ ${1:-} == -y ]]; then shift; fi
|
|
[[ $# == 2 && $1 == --artifact ]] || { echo 'Usage: remote backend deploy --artifact DIRECTORY' >&2; exit 2; }
|
|
source "$ROOT/scripts/lib-env.sh"
|
|
target=$(env_value BACKEND_SSH)
|
|
require_deploy_layout "${target:-mih04-werkjournal@mih04.hostsharing.net}"
|
|
exec python3 "$ROOT/scripts/deploy-prototype.py" "${target:-mih04-werkjournal@mih04.hostsharing.net}" "$2" --update
|
|
fi
|
|
if [[ ${1:-} == backend && ${2:-} == restore ]]; then
|
|
shift 2
|
|
source "$ROOT/scripts/lib-env.sh"
|
|
target=$(env_value BACKEND_SSH)
|
|
require_deploy_layout "${target:-mih04-werkjournal@mih04.hostsharing.net}"
|
|
exec python3 "$ROOT/scripts/operator-restore.py" "${target:-mih04-werkjournal@mih04.hostsharing.net}" "$@"
|
|
fi
|
|
if [[ ${1:-} == backend && ${2:-} == backup ]]; then
|
|
shift 2
|
|
[[ $# -le 1 ]] || { echo 'Usage: remote backend backup [FILE]' >&2; exit 2; }
|
|
source "$ROOT/scripts/lib-env.sh"
|
|
target=$(env_value BACKEND_SSH)
|
|
require_deploy_layout "${target:-mih04-werkjournal@mih04.hostsharing.net}"
|
|
exec python3 "$ROOT/scripts/backup.py" "${target:-mih04-werkjournal@mih04.hostsharing.net}" "$@"
|
|
fi
|
|
if [[ ${1:-} == backend && ${2:-} == upload ]]; then
|
|
shift 2
|
|
if [[ ${1:-} == -y ]]; then shift; fi
|
|
[[ $# == 2 && $1 == --artifact ]] || { echo 'Usage: remote backend upload [-y] --artifact DIRECTORY' >&2; exit 2; }
|
|
source "$ROOT/scripts/lib-env.sh"
|
|
target=$(env_value BACKEND_SSH)
|
|
require_deploy_layout "${target:-mih04-werkjournal@mih04.hostsharing.net}"
|
|
exec python3 "$ROOT/scripts/deploy-prototype.py" "${target:-mih04-werkjournal@mih04.hostsharing.net}" "$2" --upload
|
|
fi
|
|
if [[ ${1:-} == backend && ${2:-} == setup-push ]]; then
|
|
[[ $# == 2 ]] || exit 2
|
|
source "$ROOT/scripts/lib-env.sh"
|
|
target=$(env_value BACKEND_SSH)
|
|
require_deploy_layout "${target:-mih04-werkjournal@mih04.hostsharing.net}"
|
|
exec python3 "$ROOT/scripts/setup-push.py" "${target:-mih04-werkjournal@mih04.hostsharing.net}"
|
|
fi
|
|
if [[ ${1:-} == backend && ${2:-} == prepare-admin-recovery ]]; then
|
|
[[ $# == 2 ]] || exit 2
|
|
source "$ROOT/scripts/lib-env.sh"
|
|
target=$(env_value BACKEND_SSH)
|
|
require_deploy_layout "${target:-mih04-werkjournal@mih04.hostsharing.net}"
|
|
exec python3 "$ROOT/scripts/admin-recovery.py" "${target:-mih04-werkjournal@mih04.hostsharing.net}"
|
|
fi
|
|
if [[ ${1:-} == backend && ${2:-} == recover ]]; then
|
|
[[ $# == 2 ]] || exit 2
|
|
source "$ROOT/scripts/lib-env.sh"
|
|
target=$(env_value BACKEND_SSH)
|
|
require_deploy_layout "${target:-mih04-werkjournal@mih04.hostsharing.net}"
|
|
exec python3 "$ROOT/scripts/recover-deployment.py" "${target:-mih04-werkjournal@mih04.hostsharing.net}"
|
|
fi
|
|
if [[ ${1:-} == backend ]]; then
|
|
case "${2:-}" in
|
|
start|stop|restart|status|enable|disable|log|setup|info)
|
|
action=$2
|
|
shift 2
|
|
[[ $action == log || $# == 0 ]] || { echo 'Dieser Dienstbefehl akzeptiert keine weiteren Argumente.' >&2; exit 2; }
|
|
source "$ROOT/scripts/lib-env.sh"
|
|
target=$(env_value BACKEND_SSH)
|
|
require_deploy_layout "${target:-mih04-werkjournal@mih04.hostsharing.net}"
|
|
exec python3 "$ROOT/scripts/service-control.py" "${target:-mih04-werkjournal@mih04.hostsharing.net}" "$action" "$@"
|
|
;;
|
|
esac
|
|
fi
|
|
if [[ ${1:-} == ssh ]]; then
|
|
shift
|
|
source "$ROOT/scripts/lib-env.sh"
|
|
target=$(env_value BACKEND_SSH)
|
|
exec python3 "$ROOT/scripts/ssh-command.py" "${target:-mih04-werkjournal@mih04.hostsharing.net}" "$@"
|
|
fi
|
|
printf 'Unbekannter Befehl. Siehe remote --help.\n' >&2
|
|
exit 2
|