95 lines
2.9 KiB
Bash
95 lines
2.9 KiB
Bash
#!/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}"
|