Files
Projektarbeit-MYP/infrastructure/scripts/cleanup.ps1

256 lines
7.8 KiB
PowerShell

# 🧹 MYP Bereinigungs-Skript (Windows PowerShell)
# Vollständige Bereinigung aller Docker-Ressourcen
param(
[switch]$Force,
[switch]$KeepVolumes,
[switch]$Verbose
)
$ErrorActionPreference = "Stop"
# Farbkodierte Ausgabe
function Write-ColoredOutput {
param(
[string]$Message,
[string]$Color = "White"
)
Write-Host $Message -ForegroundColor $Color
}
function Write-Step {
param([string]$Message)
Write-ColoredOutput "🔧 $Message" "Cyan"
}
function Write-Success {
param([string]$Message)
Write-ColoredOutput "$Message" "Green"
}
function Write-Warning {
param([string]$Message)
Write-ColoredOutput "⚠️ $Message" "Yellow"
}
function Write-Error {
param([string]$Message)
Write-ColoredOutput "$Message" "Red"
}
# Header
Write-ColoredOutput @"
🧹 MYP Bereinigung
Docker-Ressourcen aufräumen
"@ "Magenta"
# Bestätigung anfordern (außer bei -Force)
if (-not $Force) {
Write-Warning "WARNUNG: Diese Aktion wird alle MYP-Container, Images und Netzwerke entfernen!"
if (-not $KeepVolumes) {
Write-Warning "Auch alle Volumes (einschließlich Datenbanken) werden gelöscht!"
}
$confirm = Read-Host "Möchten Sie fortfahren? (j/N)"
if ($confirm -ne "j" -and $confirm -ne "J") {
Write-Host "Bereinigung abgebrochen."
exit 0
}
}
# Docker Verfügbarkeit prüfen
try {
$dockerInfo = docker info 2>$null
if ($LASTEXITCODE -ne 0) {
Write-Error "Docker ist nicht verfügbar oder läuft nicht."
exit 1
}
}
catch {
Write-Error "Fehler beim Zugriff auf Docker: $_"
exit 1
}
# Aktuelle Docker Compose Services stoppen
Write-Step "Stoppe Docker Compose Services..."
try {
$composeFiles = @("docker-compose.yml")
if (Test-Path "docker-compose.dev.yml") {
$composeFiles += "docker-compose.dev.yml"
}
if (Test-Path "docker-compose.override.yml") {
$composeFiles += "docker-compose.override.yml"
}
$composeArgs = $composeFiles | ForEach-Object { "-f", $_ }
docker-compose @composeArgs down --remove-orphans 2>$null
Write-Success "Services gestoppt"
}
catch {
Write-Warning "Fehler beim Stoppen der Services: $_"
}
# MYP-spezifische Container entfernen
Write-Step "Entferne MYP-Container..."
try {
$mypContainers = docker ps -a --filter "name=myp-" --format "{{.Names}}" 2>$null
if ($mypContainers) {
docker rm -f $mypContainers 2>$null
Write-Success "MYP-Container entfernt: $($mypContainers -join ', ')"
} else {
Write-Host "Keine MYP-Container gefunden"
}
}
catch {
Write-Warning "Fehler beim Entfernen der Container: $_"
}
# MYP-spezifische Images entfernen
Write-Step "Entferne MYP-Images..."
try {
$mypImages = docker images --filter "reference=*myp*" --format "{{.Repository}}:{{.Tag}}" 2>$null
if ($mypImages) {
docker rmi -f $mypImages 2>$null
Write-Success "MYP-Images entfernt: $($mypImages -join ', ')"
} else {
Write-Host "Keine MYP-Images gefunden"
}
# Auch projektspezifische Images entfernen
$projectImages = docker images --filter "reference=projektarbeit-myp*" --format "{{.Repository}}:{{.Tag}}" 2>$null
if ($projectImages) {
docker rmi -f $projectImages 2>$null
Write-Success "Projekt-Images entfernt: $($projectImages -join ', ')"
}
}
catch {
Write-Warning "Fehler beim Entfernen der Images: $_"
}
# MYP-Netzwerke entfernen
Write-Step "Entferne MYP-Netzwerke..."
try {
$mypNetworks = docker network ls --filter "name=myp" --format "{{.Name}}" 2>$null
if ($mypNetworks) {
docker network rm $mypNetworks 2>$null
Write-Success "MYP-Netzwerke entfernt: $($mypNetworks -join ', ')"
} else {
Write-Host "Keine MYP-Netzwerke gefunden"
}
}
catch {
Write-Warning "Fehler beim Entfernen der Netzwerke: $_"
}
# Volumes entfernen (nur wenn nicht explizit ausgeschlossen)
if (-not $KeepVolumes) {
Write-Step "Entferne MYP-Volumes..."
try {
$mypVolumes = docker volume ls --filter "name=myp" --format "{{.Name}}" 2>$null
if ($mypVolumes) {
docker volume rm $mypVolumes 2>$null
Write-Success "MYP-Volumes entfernt: $($mypVolumes -join ', ')"
} else {
Write-Host "Keine MYP-Volumes gefunden"
}
# Auch projektspezifische Volumes
$projectVolumes = docker volume ls --filter "name=projektarbeit-myp" --format "{{.Name}}" 2>$null
if ($projectVolumes) {
docker volume rm $projectVolumes 2>$null
Write-Success "Projekt-Volumes entfernt: $($projectVolumes -join ', ')"
}
}
catch {
Write-Warning "Fehler beim Entfernen der Volumes: $_"
}
} else {
Write-Warning "Volumes werden beibehalten (--KeepVolumes gesetzt)"
}
# Unbenutzte Ressourcen bereinigen
Write-Step "Bereinige unbenutzte Docker-Ressourcen..."
try {
docker system prune -f 2>$null
Write-Success "System-Bereinigung abgeschlossen"
}
catch {
Write-Warning "Fehler bei der System-Bereinigung: $_"
}
# Build-Cache bereinigen
Write-Step "Bereinige Build-Cache..."
try {
docker builder prune -f 2>$null
Write-Success "Build-Cache bereinigt"
}
catch {
Write-Warning "Fehler beim Bereinigen des Build-Caches: $_"
}
# Lokale Dateien bereinigen
Write-Step "Bereinige lokale temporäre Dateien..."
try {
# Logs bereinigen
if (Test-Path "logs") {
Get-ChildItem "logs" -File -Recurse | Remove-Item -Force -ErrorAction SilentlyContinue
Write-Host " Logs bereinigt"
}
# Backend instance bereinigen (außer bei KeepVolumes)
if (-not $KeepVolumes -and (Test-Path "backend/instance")) {
Get-ChildItem "backend/instance" -File -Recurse | Remove-Item -Force -ErrorAction SilentlyContinue
Write-Host " Backend-Instance bereinigt"
}
# Frontend build artifacts bereinigen
if (Test-Path "frontend/.next") {
Remove-Item "frontend/.next" -Recurse -Force -ErrorAction SilentlyContinue
Write-Host " Frontend-Build-Artifacts bereinigt"
}
if (Test-Path "frontend/out") {
Remove-Item "frontend/out" -Recurse -Force -ErrorAction SilentlyContinue
Write-Host " Frontend-Output bereinigt"
}
Write-Success "Lokale Dateien bereinigt"
}
catch {
Write-Warning "Fehler beim Bereinigen lokaler Dateien: $_"
}
# Übersicht der verbliebenen Ressourcen (wenn Verbose)
if ($Verbose) {
Write-Step "Verbliebene Docker-Ressourcen:"
Write-Host "Container:"
docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" 2>$null | Out-Host
Write-Host "`nImages:"
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" 2>$null | Out-Host
Write-Host "`nVolumes:"
docker volume ls --format "table {{.Name}}\t{{.Driver}}" 2>$null | Out-Host
Write-Host "`nNetzwerke:"
docker network ls --format "table {{.Name}}\t{{.Driver}}" 2>$null | Out-Host
}
Write-Success "🎉 Bereinigung erfolgreich abgeschlossen!"
Write-Step "Empfohlene nächste Schritte:"
Write-Host " 1. Neustart mit: .\infrastructure\scripts\start.ps1"
Write-Host " 2. Oder bei Problemen: .\infrastructure\scripts\start.ps1 dev --clean --no-cache"
# Speicherplatz-Ersparnis anzeigen
Write-Step "Führe Docker System-Analyse durch..."
try {
docker system df 2>$null | Out-Host
}
catch {
Write-Warning "System-Analyse fehlgeschlagen"
}