#!/bin/bash set -Eeuo pipefail APP_DIR="/opt/picpeak" BACKUP_DIR="/root/picpeak-backups" LOG_FILE="/var/log/picpeak-update.log" RETENTION_DAYS=30 DATE=$(date +"%Y-%m-%d_%H-%M-%S") mkdir -p "$BACKUP_DIR" exec > >(tee -a "$LOG_FILE") 2>&1 echo "" echo "=================================================" echo " PicPeak Update gestartet: $DATE" echo "=================================================" cd "$APP_DIR" # Git Safe Directory git config --global --add safe.directory "$APP_DIR" >/dev/null 2>&1 || true # Prüfungen [ -d ".git" ] || { echo "FEHLER: Kein Git Repository"; exit 1; } echo "" echo "1. Dateibackup erstellen..." tar -czf \ "$BACKUP_DIR/picpeak-files-$DATE.tar.gz" \ "$APP_DIR" echo "OK" echo "" echo "2. Datenbank sichern..." DB_USER=$(grep '^DB_USER=' .env | cut -d= -f2) DB_NAME=$(grep '^DB_NAME=' .env | cut -d= -f2) docker exec picpeak-postgres \ pg_dump -U "$DB_USER" "$DB_NAME" \ > "$BACKUP_DIR/picpeak-db-$DATE.sql" echo "OK" echo "" echo "3. Git Update..." git pull echo "OK" echo "" echo "4. Docker Images neu bauen..." docker compose build --no-cache echo "OK" echo "" echo "5. Container starten..." docker compose up -d echo "OK" echo "" echo "6. Healthcheck..." sleep 20 docker compose ps if docker compose ps | grep -q unhealthy; then echo "FEHLER: Mindestens ein Container unhealthy" exit 1 fi echo "OK" echo "" echo "7. Alte Docker Images bereinigen..." docker image prune -f echo "OK" echo "" echo "8. Alte Backups löschen (> $RETENTION_DAYS Tage)..." find "$BACKUP_DIR" -type f -mtime +$RETENTION_DAYS -delete echo "OK" echo "" echo "=================================================" echo " Update erfolgreich abgeschlossen" echo "=================================================" echo "" echo "Aktive Container:" docker compose ps echo "" echo "Neueste Backups:" ls -lh "$BACKUP_DIR" | tail -10