#!/bin/bash # --- Konfiguration --- # Verzeichnis, wo deine docker-compose.yml liegt GITEA_DIR="/home/alf/docker/gitea" # <-- ANPASSEN! Dein Gitea Docker Compose Verzeichnis # Name deines rclone Remote für JottaCloud RCLONE_REMOTE_NAME="jotta" # Zielpfad im JottaCloud Remote (z.B. ein Ordner namens "Gitea" im Root) RCLONE_CLOUD_PATH="/Archiv/Gitea" # <-- ANPASSEN! # Lokale Datenpfade für Gitea und die Datenbank LOCAL_GITEA_DATA_PATH="${GITEA_DIR}/data/" LOCAL_GITEA_DB_PATH="${GITEA_DIR}/database/" # --- Logging Konfiguration --- LOG_DIR="/root" # <-- ANPASSEN! Sicherstellen, dass dieser Ordner existiert LOG_FILE="${LOG_DIR}/log.txt" # Sicherstellen, dass das Log-Verzeichnis existiert mkdir -p "${LOG_DIR}" # --- Skript Start --- # Leite NUR die Standardausgabe (stdout) in die Log-Datei um (anhängen) # Fehlerausgabe (stderr) wird NICHT umgeleitet, um rclone -P Fortschritte nicht zu loggen exec 1>>"${LOG_FILE}" # Fehlerausgabe vom gesamten Skript kann bei Bedarf in ein separates Fehlerlog geleitet werden, # oder wir belassen sie auf stderr, da rclone -P Fortschritte auf stderr landen # und wir diese ja gerade nicht im Hauptlog wollen. # Wichtige Fehler aus dem Skript (z.B. wenn docker compose fehlschlägt) landen weiterhin # auf der Konsole (bzw. im Cron-Mail, falls konfiguriert) oder können separat gefangen werden. echo "--- Gitea Backup (rclone zu JottaCloud) gestartet: $(date) ---" # Gitea-Dienste stoppen für konsistentes Backup echo "Stoppe Gitea-Dienste..." cd "${GITEA_DIR}" && docker compose stop # Prüfen, ob das Stoppen erfolgreich war if [ $? -ne 0 ]; then echo "FEHLER: Gitea-Dienste konnten nicht gestoppt werden. Backup abgebrochen." # Da wir exec 1>>FILE verwenden, landet dies im Log. # Ein Exit hier würde verhindern, dass der Fehler in ein Cron-Mail geht, # es sei denn, wir leiten stderr explizit um. exit 1 fi # Gitea-Daten sichern echo "Synchronisiere Gitea-Daten zu JottaCloud..." # rclone -P schreibt seinen Fortschritt auf stderr. # Wir leiten stderr von rclone nach /dev/null, um den Fortschritt nicht zu sehen. # rclone's Fehlermeldungen landen weiterhin auf stderr des Skripts. rclone sync -P "${LOCAL_GITEA_DATA_PATH}" "${RCLONE_REMOTE_NAME}:${RCLONE_CLOUD_PATH}/data" 2>/dev/null if [ $? -ne 0 ]; then echo "WARNUNG: Fehler beim rclone Sync der Gitea-Daten aufgetreten." fi # Datenbank-Daten sichern echo "Synchronisiere PostgreSQL-Daten zu JottaCloud..." rclone sync -P "${LOCAL_GITEA_DB_PATH}" "${RCLONE_REMOTE_NAME}:${RCLONE_CLOUD_PATH}/database" 2>/dev/null if [ $? -ne 0 ]; then echo "WARNUNG: Fehler beim rclone Sync der Datenbank-Daten aufgetreten." fi # Gitea-Dienste wieder starten echo "Starte Gitea-Dienste..." cd "${GITEA_DIR}" && docker compose start # Prüfen, ob der Start erfolgreich war if [ $? -ne 0 ]; then echo "FEHLER: Gitea-Dienste konnten nicht gestartet werden. Bitte manuell prüfen." exit 1 fi echo "--- Gitea Backup (rclone zu JottaCloud) abgeschlossen: $(date) ---" echo "" # Eine leere Zeile für bessere Lesbarkeit zwischen den Läufen