removeProjekt.sh – Ein Skript zum Aufräumen

Beim Testen meiner Skripte ist mir aufgefallen, dass ich wohl auch ein Skript zum Entfernen brauche. Als ich am nächsten Tag mein Ubuntu gestartet und mir viel schnell auf, dass mein Apache nicht mehr läuft. Während des Testens habe ich den Projektordner von Hand gelöscht und schon habe ich einen Fehler produziert, der Apache nicht mehr starten lässt. Das create_vhost.sh-Skript erstellt mir eine .conf-Datei für Apache und einen log/-Ordner im Projektverzeichnis. Wenn ich den Projektordner lösche, dann ist auch der Apache-Log für dieses Projekt gelöscht. Wenn Apache startet, prüft er, ob dieser existiert, tut er es nicht, dann startet er nicht.

sudo a2dissite projekt1
sudo systemctl start apache2

🧠 „Warum Löschen schwieriger ist als Erstellen“

Während das Erstellen eines Projekts relativ ungefährlich ist, kann das Entfernen schnell kritisch werden – insbesondere bei Datenbanken.


💡 Designentscheidung

Ich habe mich bewusst für ein opt-in-System entschieden:

  • Standard: nur Apache-Konfiguration entfernen
  • Optionen für Dateien und Datenbank
  • zusätzliche Sicherheitsabfragen

🔥 Erkenntnis

Automatisierung bedeutet nicht nur Geschwindigkeit, sondern auch Kontrolle.


🧑‍💻 removeProject.sh

#!/usr/bin/env bash
set -euo pipefail

NAME=""
DELETE_FILES=false
DELETE_DB=false

for arg in "$@"; do
    case $arg in
        --files) DELETE_FILES=true ;;
        --db) DELETE_DB=true ;;
        --all)
            DELETE_FILES=true
            DELETE_DB=true
            ;;
        --help)
            echo "Usage: remove_project <name> [--files] [--db] [--all]"
            exit 0
            ;;
        *)
            NAME="$arg"
            ;;
    esac
done

if [[ -z "${NAME:-}" ]]; then
    echo "❌ Kein Name angegeben"
    exit 1
fi

DOMAIN="$NAME.local"
DOC_ROOT="/var/lib/www/$NAME"
CONF="/etc/apache2/sites-available/$NAME.conf"

echo "🧹 Entferne Projekt: $NAME"

# --- Apache ---
if [[ -f "/etc/apache2/sites-enabled/$NAME.conf" ]]; then
    echo "🔌 Deaktiviere VHost"
    sudo a2dissite "$NAME.conf"
fi

if [[ -f "$CONF" ]]; then
    echo "🗑️ Entferne Apache Config"
    sudo rm "$CONF"
fi

if sudo apache2ctl configtest; then
    sudo systemctl reload apache2
else
    echo "❌ Apache Config Fehler"
    exit 1
fi

# --- Dateien ---
if [[ "$DELETE_FILES" = true && -d "$DOC_ROOT" ]]; then
    read -p "⚠️ Projektordner wirklich löschen? (y/N): " confirm
    if [[ "$confirm" == "y" ]]; then
        rm -rf "$DOC_ROOT"
        echo "🗑️ Projektordner gelöscht"
    fi
fi

# --- Datenbank ---
if [[ "$DELETE_DB" = true ]]; then
    read -p "⚠️ Datenbank '$NAME' und User wirklich löschen? (y/N): " confirm
    if [[ "$confirm" == "y" ]]; then
        sudo mysql <<SQL
DROP DATABASE IF EXISTS \`$NAME\`;
DROP USER IF EXISTS '$NAME'@'localhost';
FLUSH PRIVILEGES;
SQL
        echo "🗑️ Datenbank und User gelöscht"
    fi
fi

echo "✅ Fertig"

🚀 Fazit

Du bist gerade genau an dem Punkt angekommen, wo viele Tools entstehen:

„Ich brauche Kontrolle über meinen lokalen Stack“

Und du baust dir das gerade selbst – ziemlich sauber sogar.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert