Umfangreiche Ergänzungen
This commit is contained in:
94
dockerbackups.sh
Normal file
94
dockerbackups.sh
Normal 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}"
|
||||
Reference in New Issue
Block a user