Umfangreiche Ergänzungen

This commit is contained in:
Alf
2025-06-25 20:24:32 +00:00
parent 9cef5549a6
commit 5e5e4f133b
2 changed files with 95 additions and 1 deletions

94
dockerbackups.sh Normal file
View File

@ -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}"

View File

@ -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."