Backup Skript

Wie bereits im Backup-Plan erwähnt basierd meine Backup-Strategie auf einem Bash-Skript, welches die Daten der Docker-Container auf das Backup-System kopiert.

Backup Skript

Das Skript basiert auf RSYNC, um die Ordner in effektiver und fehlerfreier Weise zu synchronisieren. Im Oberen Teil werden die Pfade zu den Quell-Ordnern und den gemounteten Netzwerklaufwerken angegeben. Das Skript setzt voraus, das alle Volumes in einem Verzeichnis gespeichert sind.

#!/bin/bash

# Quell- und Zielordner
Docker_SOURCE="/etc/docker_vol/"
Docker_DESTINATION="/etc/backup/Docker"

Immich_SOURCE="/etc/mnt/sda1/"
Immich_DESTINATION="/etc/backup/Immich"

Main_SOURCE="/root/main/"
Main_DESTINATION="/etc/backup/main"

BACKUP_DIR="/etc/backup/4cows"  
REPO_NAME="4Cows-Db"  
MARIADB_ROOT_PASSWORD="4cows"
BACKUP_SERVER="192.168.50.225:84/Backup"  


echo "Docker Backup gestartet..."
# Docker-Backup
sudo rsync -rltDv --delete --copy-links "$Docker_SOURCE" "$Docker_DESTINATION"
if [ $? -eq 0 ]; then
  curl -H "Title: Docker-Backup gelungen" -H "Priority: urgent" -H "Markdown: yes" -H "Tags: heavy_check_mark" -d "Backup erfolgreich ausgeführt." 192.168.50.225:84/Backup
else
  echo "Fehler bei Docker-Backup!"
  curl -H "Title: Docker-Backup fehlgeschlagen" -H "Priority: urgent" -H "Markdown: yes" -H "Tags: triangular_flag_on_post,rotating_light" -d "Fehler beim Docker-Backup. Siehe Konsolenausgabe." 192.168.50.225:84/Backup
fi
echo "Docker Backup beendet"

echo "Immich wird gestoppt..."
# Stop Immich
docker stop immich_redis
docker stop immich_machine_learning
docker stop immich_postgres
docker stop immich_server

echo "Immich Backup gestartet..."
# Immich-Backup
sudo rsync -rltDv --delete --copy-links "$Immich_SOURCE" "$Immich_DESTINATION"

if [ $? -eq 0 ]; then
  curl -H "Title: Immich-Backup gelungen" -H "Priority: urgent" -H "Markdown: yes" -H "Tags: heavy_check_mark" -d "Backup erfolgreich ausgeführt." 192.168.50.225:84/Backup
else
  echo "Fehler bei Immich-Backup!"
  curl -H "Title: Immich-Backup fehlgeschlagen" -H "Priority: urgent" -H "Markdown: yes" -H "Tags: triangular_flag_on_post,rotating_light" -d "Fehler beim Immich-Backup. Siehe Konsolenausgabe." 192.168.50.225:84/Backup
fi
echo "Immich Backup beendet"

echo "Main Backup gestartet..."
# Main-Backup
sudo rsync -rltDv --delete --copy-links "$Main_SOURCE" "$Main_DESTINATION"
if [ $? -eq 0 ]; then
  curl -H "Title: Main-Backup gelungen" -H "Priority: urgent" -H "Markdown: yes" -H "Tags: heavy_check_mark" -d "Backup erfolgreich ausgeführt." 192.168.50.225:84/Backup
else
  echo "Fehler bei Main-Backup!"
  curl -H "Title: Main-Backup fehlgeschlagen" -H "Priority: urgent" -H "Markdown: yes" -H "Tags: triangular_flag_on_post,rotating_light" -d "Fehler beim Main-Backup. Siehe Konsolenausgabe." 192.168.50.225:84/Backup
fi
echo "Main Backup beendet"

echo "4Cows Backup gestartet..."

# 4Cows-Backup
DATE=$(date +\%F)
BACKUP_FILE="$BACKUP_DIR/4Cows-DB-$DATE.sql"

if ! docker exec 4Cows-DB mariadb-dump --all-databases -u root -p"$MARIADB_ROOT_PASSWORD" > "$BACKUP_FILE"; then
  echo "Fehler bei 4Cows-Backup!"
  curl -H "Title: 4Cows-Backup fehlgeschlagen" -H "Priority: urgent" -H "Markdown: yes" -H "Tags: triangular_flag_on_post,rotating_light" -d "Datenbank-Dump fehlgeschlagen." 192.168.50.225:84/Backup
fi

# Start Immich
if cd /root/main; then
  docker compose up -d
else
  echo "Fehler: Verzeichnis /root/main nicht gefunden."
  exit 1
fi

Backup Samba Compose Datei

version: '3.8'

Installation

  1. RSYNC installieren
sudo apt update
sudp apt install rsync
  1. Verzeichnis für das Skript erstellen
sudo mkdir /root/backup
  1. In das Verzeichnis navigieren
cd /root/backup
  1. Backup-Skript erstellen und befüllen
sudo vim backup.sh
  1. Backup-Skript ausführbar machen
chmod +x backup.sh
  1. Automatische Ausführung Einrichten (Crontab)
  # Crontab Datei Öffnen
  crontab -e
  # Diese Zeile anfügen
  0 1 * * * /root/backup/backup.sh
  # Prüfen der aktiven Jobs
  crontab -l