diff --git a/scripts/selfhost-setup.sh b/scripts/selfhost-setup.sh index 1e8d4a3..2e654b8 100755 --- a/scripts/selfhost-setup.sh +++ b/scripts/selfhost-setup.sh @@ -9,6 +9,8 @@ COMPOSE_FILE="${FEDEO_COMPOSE_FILE:-$ROOT_DIR/docker-compose.yml}" MODE="" START_STACK="ask" FORCE="false" +UNINSTALL="false" +PURGE="false" TTY_INPUT="${FEDEO_TTY_INPUT:-/dev/tty}" TTY_FD="" @@ -53,6 +55,8 @@ Nutzung: bash scripts/selfhost-setup.sh --simple bash scripts/selfhost-setup.sh --advanced bash scripts/selfhost-setup.sh --simple --start + bash scripts/selfhost-setup.sh --uninstall + bash scripts/selfhost-setup.sh --uninstall --purge Optionen: --simple Kurzer Assistent mit lokalen Diensten und sicheren Defaults @@ -60,6 +64,8 @@ Optionen: --start Startet den Stack nach dem Schreiben der Konfiguration --no-start Schreibt nur Konfiguration und Verzeichnisse --force Überschreibt eine vorhandene .env ohne Rückfrage + --uninstall Stoppt und entfernt den Docker-Compose-Stack + --purge Entfernt beim Uninstall zusätzlich .env und lokale Datenverzeichnisse USAGE } @@ -80,6 +86,12 @@ while [[ $# -gt 0 ]]; do --force) FORCE="true" ;; + --uninstall) + UNINSTALL="true" + ;; + --purge) + PURGE="true" + ;; -h|--help) usage exit 0 @@ -385,7 +397,80 @@ prepare_directories() { chmod 600 "$ROOT_DIR/traefik/letsencrypt/acme.json" } +uninstall_stack() { + need_file "$COMPOSE_FILE" + + if [[ ! -f "$ENV_FILE" ]]; then + echo "Keine .env gefunden. Docker Compose wird mit Standardwerten ausgeführt." + fi + + echo + echo "FEDEO Selfhost Uninstall" + echo "Compose-Datei: $COMPOSE_FILE" + echo + + if [[ "$FORCE" != "true" ]]; then + if ! yes_no "Docker-Compose-Stack stoppen und Container/Netzwerke entfernen?" "n"; then + echo "Abgebrochen." + exit 0 + fi + fi + + if [[ -f "$ENV_FILE" ]]; then + compose_stack down --remove-orphans + else + compose -f "$COMPOSE_FILE" down --remove-orphans + fi + + if [[ "$PURGE" != "true" ]]; then + echo + echo "Uninstall abgeschlossen. Lokale Daten und .env wurden behalten." + echo "Für vollständiges Entfernen erneut mit --uninstall --purge ausführen." + return + fi + + echo + echo "Achtung: --purge entfernt lokale Datenbanken, Dateien, Matrix-Daten, Zertifikate und .env." + echo "Betroffene Pfade:" + echo " $ENV_FILE" + echo " $ROOT_DIR/postgres" + echo " $ROOT_DIR/minio" + echo " $ROOT_DIR/matrix/postgres" + echo " $ROOT_DIR/matrix/synapse" + echo " $ROOT_DIR/traefik/letsencrypt" + echo " $ROOT_DIR/traefik/logs" + + if [[ "$FORCE" != "true" ]]; then + if ! yes_no "Diese lokalen Daten endgültig löschen?" "n"; then + echo "Daten wurden behalten." + return + fi + fi + + rm -rf \ + "$ENV_FILE" \ + "$ROOT_DIR/postgres" \ + "$ROOT_DIR/minio" \ + "$ROOT_DIR/matrix/postgres" \ + "$ROOT_DIR/matrix/synapse" \ + "$ROOT_DIR/traefik/letsencrypt" \ + "$ROOT_DIR/traefik/logs" + + echo + echo "Uninstall inklusive lokaler Daten abgeschlossen." +} + main() { + if [[ "$UNINSTALL" == "true" ]]; then + uninstall_stack + return + fi + + if [[ "$PURGE" == "true" ]]; then + echo "--purge kann nur zusammen mit --uninstall verwendet werden." >&2 + exit 1 + fi + need_file "$COMPOSE_FILE" need_file "$ENV_EXAMPLE"