From 5e5e4f133b8a0e4bbebf9e7601de437f99278160 Mon Sep 17 00:00:00 2001 From: Alf Date: Wed, 25 Jun 2025 20:24:32 +0000 Subject: [PATCH] =?UTF-8?q?Umfangreiche=20Erg=C3=A4nzungen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dockerbackups.sh | 94 +++++++++++++++++++++++++++++++++++++++++++++++ dockerbackups2.sh | 2 +- 2 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 dockerbackups.sh diff --git a/dockerbackups.sh b/dockerbackups.sh new file mode 100644 index 0000000..8d20fae --- /dev/null +++ b/dockerbackups.sh @@ -0,0 +1,94 @@ +#!/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}" diff --git a/dockerbackups2.sh b/dockerbackups2.sh index aa98c89..a5018f5 100644 --- a/dockerbackups2.sh +++ b/dockerbackups2.sh @@ -39,7 +39,7 @@ fi # Gitea-Daten sichern log_info "Synchronisiere Gitea-Daten zu JottaCloud..." -rclone sync -P "${LOCAL_GITEA_DATA_PATH}" "${RCLONE_REMOTE_NAME}:${RCLONE_CLOUD_PATH}/data" 2>/dev/null +rclone sync -P "${LOCAL_GITEA_DATA_PATH}" "${RCLONE_REMOTE_NAME}:${RCLONE_CLOUD_PATH}/data" --log-file=/root/log.txt if [ $? -ne 0 ]; then log_warn "Fehler beim rclone Sync der Gitea-Daten aufgetreten."