#!/bin/bash set -o pipefail ######################################## # Konfiguration ######################################## SFTP_HOST="sftp.example.com" SFTP_PORT="22" SFTP_USER="user" SFTP_PASS="Tpassw0rd" SFTP_REMOTE_DIR="/uploads" MAIL_TO="" MAIL_FROM="" ######################################## # Variablen ######################################## SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" DIR_NAME="$(basename "$SCRIPT_DIR")" DATE=$(date +"%Y-%m-%d_%H-%M-%S") BACKUP_FILE="${DIR_NAME}_${DATE}.tar.gz" LOGFILE="/tmp/${DIR_NAME}_backup.log" ######################################## # Logging ######################################## exec > >(tee -a "$LOGFILE") exec 2>&1 echo "=========================================" echo "Backup gestartet: $(date)" echo "Projekt: $DIR_NAME" echo "=========================================" ######################################## # Fehlerbehandlung ######################################## send_error_mail() { SUBJECT="❌ Backup FEHLGESCHLAGEN - ${DIR_NAME}" mail -s "$SUBJECT" "$MAIL_TO" < "$LOGFILE" } send_success_mail() { SIZE=$(du -h "/tmp/${BACKUP_FILE}" | awk '{print $1}') mail -s "✅ Backup erfolgreich - ${DIR_NAME} (${SIZE})" "$MAIL_TO" << EOF Backup erfolgreich abgeschlossen. Projekt: ${DIR_NAME} Datum: $(date) Backup: ${BACKUP_FILE} Größe: ${SIZE} Log: $(cat "$LOGFILE") EOF } trap 'send_error_mail; exit 1' ERR ######################################## # Docker stoppen ######################################## cd "$SCRIPT_DIR" echo "Stoppe Docker..." docker compose down ######################################## # Archiv erstellen ######################################## echo "Erstelle Backup..." tar \ --same-owner \ --preserve-permissions \ -czpf "/tmp/${BACKUP_FILE}" \ -C "$(dirname "$SCRIPT_DIR")" \ "$DIR_NAME" ######################################## # Docker starten ######################################## echo "Starte Docker..." docker compose up -d ######################################## # Upload ######################################## echo "Upload nach ${SFTP_HOST}..." sshpass -p "$SFTP_PASS" sftp \ -oPort="$SFTP_PORT" \ -oStrictHostKeyChecking=no \ "${SFTP_USER}@${SFTP_HOST}" << EOF cd ${SFTP_REMOTE_DIR} put /tmp/${BACKUP_FILE} bye EOF echo "Upload erfolgreich." ######################################## # Erfolgsmail ######################################## send_success_mail ######################################## # Aufräumen ######################################## rm -f "/tmp/${BACKUP_FILE}" echo "Backup beendet: $(date)" exec 1>&- exec 2>&- exit 0