289 lines
8.7 KiB
Bash
289 lines
8.7 KiB
Bash
#!/bin/bash
|
|
|
|
# 🧹 MYP Bereinigungs-Skript (Linux/macOS)
|
|
# Vollständige Bereinigung aller Docker-Ressourcen
|
|
|
|
set -e
|
|
|
|
# Parameter
|
|
FORCE_FLAG=""
|
|
KEEP_VOLUMES_FLAG=""
|
|
VERBOSE_FLAG=""
|
|
|
|
# Farbkodierte Ausgabe
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
MAGENTA='\033[0;35m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m' # No Color
|
|
|
|
print_colored() {
|
|
local color="$1"
|
|
local message="$2"
|
|
echo -e "${color}${message}${NC}"
|
|
}
|
|
|
|
print_step() {
|
|
print_colored "$CYAN" "🔧 $1"
|
|
}
|
|
|
|
print_success() {
|
|
print_colored "$GREEN" "✅ $1"
|
|
}
|
|
|
|
print_warning() {
|
|
print_colored "$YELLOW" "⚠️ $1"
|
|
}
|
|
|
|
print_error() {
|
|
print_colored "$RED" "❌ $1"
|
|
}
|
|
|
|
# Hilfefunktion
|
|
show_help() {
|
|
echo "Verwendung: $0 [OPTIONEN]"
|
|
echo ""
|
|
echo "OPTIONEN:"
|
|
echo " --force Keine Bestätigung anfordern"
|
|
echo " --keep-volumes Volumes (Datenbanken) beibehalten"
|
|
echo " --verbose Ausführliche Ausgabe"
|
|
echo " --help Diese Hilfe anzeigen"
|
|
echo ""
|
|
echo "Beispiele:"
|
|
echo " $0 --force"
|
|
echo " $0 --keep-volumes --verbose"
|
|
}
|
|
|
|
# Parameter verarbeiten
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--force)
|
|
FORCE_FLAG="--force"
|
|
;;
|
|
--keep-volumes)
|
|
KEEP_VOLUMES_FLAG="--keep-volumes"
|
|
;;
|
|
--verbose)
|
|
VERBOSE_FLAG="--verbose"
|
|
;;
|
|
--help)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
*)
|
|
print_error "Unbekannter Parameter: $1"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
# Header
|
|
print_colored "$MAGENTA" "╔═══════════════════════════════════════════════════════╗"
|
|
print_colored "$MAGENTA" "║ 🧹 MYP Bereinigung ║"
|
|
print_colored "$MAGENTA" "║ Docker-Ressourcen aufräumen ║"
|
|
print_colored "$MAGENTA" "╚═══════════════════════════════════════════════════════╝"
|
|
|
|
# Bestätigung anfordern (außer bei --force)
|
|
if [[ -z "$FORCE_FLAG" ]]; then
|
|
print_warning "WARNUNG: Diese Aktion wird alle MYP-Container, Images und Netzwerke entfernen!"
|
|
if [[ -z "$KEEP_VOLUMES_FLAG" ]]; then
|
|
print_warning "Auch alle Volumes (einschließlich Datenbanken) werden gelöscht!"
|
|
fi
|
|
|
|
read -p "Möchten Sie fortfahren? (j/N): " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Jj]$ ]]; then
|
|
echo "Bereinigung abgebrochen."
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# Docker Verfügbarkeit prüfen
|
|
if ! docker info &> /dev/null; then
|
|
print_error "Docker ist nicht verfügbar oder läuft nicht."
|
|
exit 1
|
|
fi
|
|
|
|
# Aktuelle Docker Compose Services stoppen
|
|
print_step "Stoppe Docker Compose Services..."
|
|
{
|
|
COMPOSE_FILES=("docker-compose.yml")
|
|
if [[ -f "docker-compose.dev.yml" ]]; then
|
|
COMPOSE_FILES+=("docker-compose.dev.yml")
|
|
fi
|
|
if [[ -f "docker-compose.override.yml" ]]; then
|
|
COMPOSE_FILES+=("docker-compose.override.yml")
|
|
fi
|
|
|
|
COMPOSE_ARGS=()
|
|
for file in "${COMPOSE_FILES[@]}"; do
|
|
COMPOSE_ARGS+=("-f" "$file")
|
|
done
|
|
|
|
docker-compose "${COMPOSE_ARGS[@]}" down --remove-orphans &> /dev/null
|
|
print_success "Services gestoppt"
|
|
} || {
|
|
print_warning "Fehler beim Stoppen der Services"
|
|
}
|
|
|
|
# MYP-spezifische Container entfernen
|
|
print_step "Entferne MYP-Container..."
|
|
{
|
|
MYP_CONTAINERS=$(docker ps -a --filter "name=myp-" --format "{{.Names}}" 2>/dev/null || true)
|
|
if [[ -n "$MYP_CONTAINERS" ]]; then
|
|
echo "$MYP_CONTAINERS" | xargs docker rm -f &> /dev/null
|
|
print_success "MYP-Container entfernt: $MYP_CONTAINERS"
|
|
else
|
|
echo "Keine MYP-Container gefunden"
|
|
fi
|
|
} || {
|
|
print_warning "Fehler beim Entfernen der Container"
|
|
}
|
|
|
|
# MYP-spezifische Images entfernen
|
|
print_step "Entferne MYP-Images..."
|
|
{
|
|
MYP_IMAGES=$(docker images --filter "reference=*myp*" --format "{{.Repository}}:{{.Tag}}" 2>/dev/null || true)
|
|
if [[ -n "$MYP_IMAGES" ]]; then
|
|
echo "$MYP_IMAGES" | xargs docker rmi -f &> /dev/null
|
|
print_success "MYP-Images entfernt: $MYP_IMAGES"
|
|
else
|
|
echo "Keine MYP-Images gefunden"
|
|
fi
|
|
|
|
# Auch projektspezifische Images entfernen
|
|
PROJECT_IMAGES=$(docker images --filter "reference=projektarbeit-myp*" --format "{{.Repository}}:{{.Tag}}" 2>/dev/null || true)
|
|
if [[ -n "$PROJECT_IMAGES" ]]; then
|
|
echo "$PROJECT_IMAGES" | xargs docker rmi -f &> /dev/null
|
|
print_success "Projekt-Images entfernt: $PROJECT_IMAGES"
|
|
fi
|
|
} || {
|
|
print_warning "Fehler beim Entfernen der Images"
|
|
}
|
|
|
|
# MYP-Netzwerke entfernen
|
|
print_step "Entferne MYP-Netzwerke..."
|
|
{
|
|
MYP_NETWORKS=$(docker network ls --filter "name=myp" --format "{{.Name}}" 2>/dev/null || true)
|
|
if [[ -n "$MYP_NETWORKS" ]]; then
|
|
echo "$MYP_NETWORKS" | xargs docker network rm &> /dev/null
|
|
print_success "MYP-Netzwerke entfernt: $MYP_NETWORKS"
|
|
else
|
|
echo "Keine MYP-Netzwerke gefunden"
|
|
fi
|
|
} || {
|
|
print_warning "Fehler beim Entfernen der Netzwerke"
|
|
}
|
|
|
|
# Volumes entfernen (nur wenn nicht explizit ausgeschlossen)
|
|
if [[ -z "$KEEP_VOLUMES_FLAG" ]]; then
|
|
print_step "Entferne MYP-Volumes..."
|
|
{
|
|
MYP_VOLUMES=$(docker volume ls --filter "name=myp" --format "{{.Name}}" 2>/dev/null || true)
|
|
if [[ -n "$MYP_VOLUMES" ]]; then
|
|
echo "$MYP_VOLUMES" | xargs docker volume rm &> /dev/null
|
|
print_success "MYP-Volumes entfernt: $MYP_VOLUMES"
|
|
else
|
|
echo "Keine MYP-Volumes gefunden"
|
|
fi
|
|
|
|
# Auch projektspezifische Volumes
|
|
PROJECT_VOLUMES=$(docker volume ls --filter "name=projektarbeit-myp" --format "{{.Name}}" 2>/dev/null || true)
|
|
if [[ -n "$PROJECT_VOLUMES" ]]; then
|
|
echo "$PROJECT_VOLUMES" | xargs docker volume rm &> /dev/null
|
|
print_success "Projekt-Volumes entfernt: $PROJECT_VOLUMES"
|
|
fi
|
|
} || {
|
|
print_warning "Fehler beim Entfernen der Volumes"
|
|
}
|
|
else
|
|
print_warning "Volumes werden beibehalten (--keep-volumes gesetzt)"
|
|
fi
|
|
|
|
# Unbenutzte Ressourcen bereinigen
|
|
print_step "Bereinige unbenutzte Docker-Ressourcen..."
|
|
{
|
|
docker system prune -f &> /dev/null
|
|
print_success "System-Bereinigung abgeschlossen"
|
|
} || {
|
|
print_warning "Fehler bei der System-Bereinigung"
|
|
}
|
|
|
|
# Build-Cache bereinigen
|
|
print_step "Bereinige Build-Cache..."
|
|
{
|
|
docker builder prune -f &> /dev/null
|
|
print_success "Build-Cache bereinigt"
|
|
} || {
|
|
print_warning "Fehler beim Bereinigen des Build-Caches"
|
|
}
|
|
|
|
# Lokale Dateien bereinigen
|
|
print_step "Bereinige lokale temporäre Dateien..."
|
|
{
|
|
# Logs bereinigen
|
|
if [[ -d "logs" ]]; then
|
|
find logs -type f -delete 2>/dev/null || true
|
|
echo " Logs bereinigt"
|
|
fi
|
|
|
|
# Backend instance bereinigen (außer bei keep-volumes)
|
|
if [[ -z "$KEEP_VOLUMES_FLAG" && -d "backend/instance" ]]; then
|
|
find backend/instance -type f -delete 2>/dev/null || true
|
|
echo " Backend-Instance bereinigt"
|
|
fi
|
|
|
|
# Frontend build artifacts bereinigen
|
|
if [[ -d "frontend/.next" ]]; then
|
|
rm -rf frontend/.next 2>/dev/null || true
|
|
echo " Frontend-Build-Artifacts bereinigt"
|
|
fi
|
|
|
|
if [[ -d "frontend/out" ]]; then
|
|
rm -rf frontend/out 2>/dev/null || true
|
|
echo " Frontend-Output bereinigt"
|
|
fi
|
|
|
|
# Node modules cache bereinigen (optional)
|
|
if [[ -d "frontend/node_modules/.cache" ]]; then
|
|
rm -rf frontend/node_modules/.cache 2>/dev/null || true
|
|
echo " Frontend-Cache bereinigt"
|
|
fi
|
|
|
|
print_success "Lokale Dateien bereinigt"
|
|
} || {
|
|
print_warning "Fehler beim Bereinigen lokaler Dateien"
|
|
}
|
|
|
|
# Übersicht der verbliebenen Ressourcen (wenn Verbose)
|
|
if [[ -n "$VERBOSE_FLAG" ]]; then
|
|
print_step "Verbliebene Docker-Ressourcen:"
|
|
|
|
echo "Container:"
|
|
docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" 2>/dev/null || echo "Keine Container"
|
|
|
|
echo -e "\nImages:"
|
|
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" 2>/dev/null || echo "Keine Images"
|
|
|
|
echo -e "\nVolumes:"
|
|
docker volume ls --format "table {{.Name}}\t{{.Driver}}" 2>/dev/null || echo "Keine Volumes"
|
|
|
|
echo -e "\nNetzwerke:"
|
|
docker network ls --format "table {{.Name}}\t{{.Driver}}" 2>/dev/null || echo "Keine Netzwerke"
|
|
fi
|
|
|
|
print_success "🎉 Bereinigung erfolgreich abgeschlossen!"
|
|
|
|
print_step "Empfohlene nächste Schritte:"
|
|
echo " 1. Neustart mit: ./infrastructure/scripts/start.sh"
|
|
echo " 2. Oder bei Problemen: ./infrastructure/scripts/start.sh dev --clean --no-cache"
|
|
|
|
# Speicherplatz-Ersparnis anzeigen
|
|
print_step "Docker System-Analyse:"
|
|
{
|
|
docker system df 2>/dev/null || print_warning "System-Analyse fehlgeschlagen"
|
|
} |