#!/bin/bash # --- Zentrale Logging-Funktion einbinden --- source /root/Scripte/logger/logger.sh # --- Skriptspezifische Konfiguration --- SCRIPT_NAME="Gitea Backup (7z + Upload zu JottaCloud)" SCRIPT_LOG_FILE="/root/gitea_backup.log" # Verzeichnis, wo deine docker-compose.yml liegt GITEA_DIR="/home/alf/docker/gitea" # Name deines rclone Remote für JottaCloud RCLONE_REMOTE_NAME="jotta" RCLONE_CLOUD_PATH="/Archiv/Gitea" # Lokale Datenpfade LOCAL_GITEA_DATA_PATH="${GITEA_DIR}/data/" LOCAL_GITEA_DB_PATH="${GITEA_DIR}/database/" TMP_BACKUP_DIR="/root/tmp" TIMESTAMP=$(date +%F_%H-%M) ARCHIVENAME="gitea-backup-${TIMESTAMP}.7z" ARCHIVEFILE="/tmp/${ARCHIVENAME}" # --- Logger initialisieren --- log_init "${SCRIPT_LOG_FILE}" log_start "${SCRIPT_NAME}" # Gitea-Dienste stoppen log_info "Stoppe Gitea-Dienste..." cd "${GITEA_DIR}" && docker compose stop if [ $? -ne 0 ]; then log_error "Gitea-Dienste konnten nicht gestoppt werden. Backup abgebrochen." exit 1 fi # Temporäres Backupverzeichnis vorbereiten mkdir -p "${TMP_BACKUP_DIR}" log_info "Sammle Daten im temporären Verzeichnis..." echo "Kopiere Daten..." cp -av "${LOCAL_GITEA_DATA_PATH}" "${TMP_BACKUP_DIR}/" cp -av "${LOCAL_GITEA_DB_PATH}" "${TMP_BACKUP_DIR}/" # Gitea-Dienste wieder starten log_info "Starte Gitea-Dienste..." cd "${GITEA_DIR}" && docker compose start if [ $? -ne 0 ]; then log_error "Gitea-Dienste konnten nicht gestartet werden. Bitte manuell prüfen." exit 1 fi # Erstelle 7z-Archiv log_info "Erstelle Archiv: ${ARCHIVEFILE}" 7z a -mx=9 "${ARCHIVEFILE}" "${TMP_BACKUP_DIR}" if [ $? -ne 0 ]; then log_error "Fehler beim Erstellen des Archivs." exit 1 fi # Archiv zu Jottacloud hochladen log_info "Lade Archiv zu ${RCLONE_REMOTE_NAME}:${RCLONE_CLOUD_PATH}/" rclone copy -P "${ARCHIVEFILE}" "${RCLONE_REMOTE_NAME}:${RCLONE_CLOUD_PATH}/" --log-file=$SCRIPT_LOG_FILE if [ $? -ne 0 ]; then log_error "Fehler beim Hochladen des Archivs." exit 1 fi # Temporäres Archiv und Backup löschen log_info "Lösche temporäre Daten..." rm -rf "${TMP_BACKUP_DIR}" "${ARCHIVEFILE}" # Maximal 10 Backups auf Jottacloud behalten log_info "Bereinige ältere Backups auf ${RCLONE_REMOTE_NAME}:${RCLONE_CLOUD_PATH}" log_info "🧪 Liste der Archive auf dem Remote:" rclone lsf --max-depth 1 "${RCLONE_REMOTE_NAME}:${RCLONE_CLOUD_PATH}/" | grep '^gitea-backup-.*\.7z$' | tee /dev/stderr ARCHIVES_ON_REMOTE=$(rclone lsf --max-depth 1 "${RCLONE_REMOTE_NAME}:${RCLONE_CLOUD_PATH}/" | grep '^gitea-backup-.*\.7z$' | sort || true) log_info "ARCHIVES_ON_REMOTE enthält $(echo "$ARCHIVES_ON_REMOTE" | wc -l) Dateien" ARCHIVES_TO_DELETE=$(echo "$ARCHIVES_ON_REMOTE" | head -n -10) if [ -n "$ARCHIVES_TO_DELETE" ]; then while read -r oldfile; do log_info "🗑️ Lösche altes Backup: $oldfile" rclone delete "${RCLONE_REMOTE_NAME}:${RCLONE_CLOUD_PATH}/$oldfile" done <<< "$ARCHIVES_TO_DELETE" else log_info "Keine alten Backups zu löschen." fi log_end "${SCRIPT_NAME}"