From 68c8f9a05a3bdfcd713a72d3445f8db8af03b7c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=B6rdle=20Bot?= Date: Mon, 1 Dec 2025 17:24:14 +0100 Subject: [PATCH] Add .dockerignore and Docker cleanup script to fix build space issues - Add .dockerignore to exclude large upload files from Docker builds - Add docker-cleanup.sh script to free up Docker disk space - Add DOCKER_BUILD_FIX.md documentation for troubleshooting build issues This prevents large MP3 files from being copied into the Docker image, saving significant disk space during builds. --- .dockerignore | 66 ++++++++++++++++++++++++ DOCKER_BUILD_FIX.md | 106 ++++++++++++++++++++++++++++++++++++++ scripts/docker-cleanup.sh | 71 +++++++++++++++++++++++++ 3 files changed, 243 insertions(+) create mode 100644 .dockerignore create mode 100644 DOCKER_BUILD_FIX.md create mode 100755 scripts/docker-cleanup.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3c8b2bc --- /dev/null +++ b/.dockerignore @@ -0,0 +1,66 @@ +# Dependencies +node_modules +npm-debug.log +yarn-debug.log +yarn-error.log + +# Next.js build outputs +.next +out +build + +# Environment files +.env +.env.local +.env*.local + +# Git +.git +.gitignore + +# IDE +.vscode +.idea +*.swp +*.swo +*~ + +# OS files +.DS_Store +Thumbs.db + +# Hördle specific - WICHTIG: Upload-Dateien NICHT ins Image kopieren! +# Diese werden als Volume gemountet und sollten nicht im Image sein +/public/uploads/* +!/public/uploads/.gitkeep + +# Database files - werden als Volume gemountet +/data/* +*.db +*.db-journal +*.db-wal +*.db-shm + +# Backups +/backups + +# Docker files (nicht notwendig im Image) +docker-compose*.yml +Dockerfile* +.dockerignore + +# Documentation +*.md +!README.md + +# Scripts die nicht im Container gebraucht werden +scripts/fix-*.sh +scripts/check-*.sh +scripts/debug-*.sh +scripts/quick-*.sh + +# Temporary files +*.tmp +*.temp +*.log + diff --git a/DOCKER_BUILD_FIX.md b/DOCKER_BUILD_FIX.md new file mode 100644 index 0000000..4dfe049 --- /dev/null +++ b/DOCKER_BUILD_FIX.md @@ -0,0 +1,106 @@ +# Docker Build Fix: Upload-Dateien ausschließen + +## Problem + +Der Docker Build schlug fehl mit: +``` +no space left on device +``` + +**Ursache**: Die großen MP3-Dateien in `public/uploads/` wurden in den Build-Context kopiert und verbrauchten zu viel Speicherplatz. + +## Lösung + +Eine `.dockerignore` Datei wurde erstellt, die folgende Dateien/Ordner vom Build ausschließt: + +- `public/uploads/*` - Upload-Dateien (werden als Volume gemountet) +- `data/*` - Datenbank-Dateien (werden als Volume gemountet) +- `node_modules` - werden während des Builds installiert +- `.next`, `out`, `build` - Build-Artefakte +- Backup-Dateien, Logs, temporäre Dateien + +## Zusätzliche Maßnahmen + +Falls der Build weiterhin Probleme macht: + +### 1. Docker aufräumen + +```bash +# Entferne nicht verwendete Images +docker image prune -a + +# Entferne nicht verwendete Container +docker container prune + +# Entferne nicht verwendete Volumes (VORSICHT: kann Daten löschen!) +docker volume prune + +# Kompletter Cleanup (alles außer laufenden Containern) +docker system prune -a +``` + +### 2. Speicherplatz prüfen + +```bash +# Zeige Speicherplatz +df -h + +# Zeige Docker-Speicherverbrauch +docker system df + +# Zeige größte Images +docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | sort -k3 -h +``` + +### 3. Build-Kontext prüfen + +```bash +# Prüfe was in den Build-Context kopiert wird +docker build --no-cache --progress=plain -t test-build . 2>&1 | grep "transferring context" +``` + +### 4. Upload-Dateien manuell ausschließen + +Falls die `.dockerignore` nicht greift, können Upload-Dateien vorübergehend verschoben werden: + +```bash +# Vor dem Build +mv public/uploads public/uploads.backup +mkdir -p public/uploads +touch public/uploads/.gitkeep + +# Build durchführen +docker compose build + +# Uploads wiederherstellen +rm -rf public/uploads +mv public/uploads.backup public/uploads +``` + +## Wichtig + +Die Upload-Dateien werden **nicht** ins Docker-Image kopiert, sondern als Volume gemountet: + +```yaml +volumes: + - ./public/uploads:/app/public/uploads +``` + +Das bedeutet: +- Upload-Dateien bleiben auf dem Host-System +- Sie werden zur Laufzeit gemountet +- Sie sollten **nicht** ins Image kopiert werden (spart viel Speicher) + +## Verifikation + +Nach dem Build sollte das Image deutlich kleiner sein: + +```bash +# Zeige Image-Größe +docker images hoerdle-hoerdle + +# Prüfe ob Uploads im Image sind +docker run --rm hoerdle-hoerdle ls -lh /app/public/uploads +# Sollte nur .gitkeep oder Covers zeigen, keine MP3-Dateien +``` + diff --git a/scripts/docker-cleanup.sh b/scripts/docker-cleanup.sh new file mode 100755 index 0000000..73439c1 --- /dev/null +++ b/scripts/docker-cleanup.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# Docker Cleanup-Skript +# Räumt nicht verwendete Docker-Images, Container, Volumes und Build-Cache auf + +set -e + +echo "🧹 Docker Cleanup..." +echo "" + +# Zeige aktuellen Speicherverbrauch +echo "📊 Aktueller Docker-Speicherverbrauch:" +docker system df +echo "" + +# Frage nach Bestätigung (falls interaktiv) +if [ -t 0 ]; then + echo "⚠️ Dies wird folgende Ressourcen entfernen:" + echo " - Alle nicht verwendeten Images" + echo " - Alle gestoppten Container" + echo " - Alle nicht verwendeten Netzwerke" + echo " - Build-Cache" + echo "" + echo "Möchtest du fortfahren? (j/n)" + read -r response + if [ "$response" != "j" ] && [ "$response" != "J" ]; then + echo "❌ Abgebrochen." + exit 0 + fi +fi + +# 1. Entferne gestoppte Container +echo "🗑️ Entferne gestoppte Container..." +STOPPED_CONTAINERS=$(docker ps -a -q -f status=exited | wc -l) +if [ "$STOPPED_CONTAINERS" -gt 0 ]; then + docker container prune -f + echo "✅ Gestoppte Container entfernt" +else + echo " Keine gestoppten Container gefunden" +fi +echo "" + +# 2. Entferne nicht verwendete Images +echo "🗑️ Entferne nicht verwendete Images..." +docker image prune -a -f +echo "✅ Nicht verwendete Images entfernt" +echo "" + +# 3. Entferne nicht verwendete Netzwerke +echo "🗑️ Entferne nicht verwendete Netzwerke..." +docker network prune -f +echo "✅ Nicht verwendete Netzwerke entfernt" +echo "" + +# 4. Entferne Build-Cache (optional, kann lange dauern) +echo "🗑️ Entferne Build-Cache..." +docker builder prune -f +echo "✅ Build-Cache entfernt" +echo "" + +# Zeige neuen Speicherverbrauch +echo "📊 Neuer Docker-Speicherverbrauch:" +docker system df +echo "" + +# Zeige verfügbaren Speicherplatz +echo "💾 Verfügbarer Speicherplatz:" +df -h / | tail -1 | awk '{print " Gesamt: " $2 ", Verfügbar: " $4 ", Belegt: " $5}' +echo "" + +echo "✅ Cleanup abgeschlossen!" +