forked from schiwagoa/docker-backup-sftp-uploader
script erstellen
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user