Steenderen.NET

Domoticz auto-backup naar (S)FTP – Versie 1.3

Status: Dit is de laatste versie van dit script.

Beschrijving

Script voor het automatisch maken van een backup van Domoticz en het wegschrijven hiervan naar een (S)FTP-locatie (bijvoorbeeld naar een NAS).

Van de volgende onderdelen wordt een backup gemaakt:

  1. Domoticz database
  2. Domoticz Script folder
  3. Cronjobs

Middels deze drie items is het mogelijk om Domoticz volledig te herstellen, bijvoorbeeld na de herinstallatie van Raspbian op je Raspberry Pi.

Update

Verbeterde versie van versie 1.2 van dit script. Support toegevoegd voor SFTP, aangezien ik liever geen FTP meer actief heb staan op mijn NAS i.v.m. de onveiligheid daarvan.

Code

# Steenderen.NET
# Domoticz auto-backup naar (S)FTP – Versie 1.3

#!/bin/bash

# Setup
DOMOTICZ_SERVER="x.x.x.x:yy"	# IP-adres:Poort van je Domoticz server
FTP_SERVER="x.x.x.x:yy"		# IP-adres:Poort van je FTP server
FTP_SFTP="yes"			# Vul "yes" i.g.v. SFTP in
FTP_USERNAME="username"		# Gebruikersnaam voor FTP
FTP_PASSWORD="password"		# Wachtwoord voor FTP
FTP_DIRECTORY="/map/map"	# Locatie op je FTP voor de Backup

# No need to edit below here.
echo "Start running backup script."

TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`

# Create temp-directory if it does not already exists.
TEMP_DIR="/home/pi/temp"

if [ -d $TEMP_DIR ] ; then
    echo "- Temp-directory already exists, no need to create it."
else
    echo "- Temp-directory does not exists, creating it now."
    /bin/mkdir $TEMP_DIR
fi

# Create backup file for database.
echo "- Creating backup file for database."
BACKUP_DB=$TIMESTAMP"_db.db"
BACKUP_DB_GZ=$BACKUP_DB".gz"
/usr/bin/curl -s http://$DOMOTICZ_SERVER/backupdatabase.php > $TEMP_DIR/$BACKUP_DB

# TEST URL WITH 512MB DUMMY FILE TO CHECK IF LARGE BACKUP FILES ARE A PROBLEM.
#/usr/bin/curl -s  http://ipv4.download.thinkbroadband.com/512MB.zip > $TEMP_DIR/$BACKUP_DB

gzip -9 $TEMP_DIR/$BACKUP_DB

# Create backup file for scripts directory.
echo "- Creating backup file for scripts-directory."
BACKUP_SCRIPTS=$TIMESTAMP"_scripts.tar.gz"
tar -zcf $TEMP_DIR/$BACKUP_SCRIPTS /home/pi/domoticz/scripts/

# Create backup file for crontab.
echo "- Creating backup file for crontab."
BACKUP_CRONTAB=$TIMESTAMP"_crontab.txt"
crontab -l > $TEMP_DIR/$BACKUP_CRONTAB

# Send backup files to FTP or SFTP location.
if [ $FTP_SFTP = "yes" ] ; then
	echo "- Sending backup files to SFTP location."
	curl -k -s --disable-epsv -T "{$TEMP_DIR/$BACKUP_DB_GZ,$TEMP_DIR/$BACKUP_SCRIPTS,$TEMP_DIR/$BACKUP_CRONTAB}" -u "$FTP_USERNAME:$FTP_PASSWORD" "sftp://"$FTP_SERVER$FTP_DIRECTORY"/"
else
	echo "- Sending backup files to FTP location."
	curl -s --disable-epsv -T "{$TEMP_DIR/$BACKUP_DB_GZ,$TEMP_DIR/$BACKUP_SCRIPTS,$TEMP_DIR/$BACKUP_CRONTAB}" -u "$FTP_USERNAME:$FTP_PASSWORD" "ftp://"$FTP_SERVER$FTP_DIRECTORY"/"
fi

# Remove temp backup file
echo "- Removing temp files."
/bin/rm $TEMP_DIR/$BACKUP_DB_GZ
/bin/rm $TEMP_DIR/$BACKUP_SCRIPTS
/bin/rm $TEMP_DIR/$BACKUP_CRONTAB

# Domoticz logging
echo "- Writing log to Domoticz."
wget -q --delete-after "http://$DOMOTICZ_SERVER/json.htm?type=command&param=addlogmessage&message=Backup to (S)FTP script finished with timestamp ID $TIMESTAMP."

# Done!
echo "Done running backup script."

Installatie-instructies

Script plaatsen in configureren

Persoonlijk heb ik dit script opgeslagen onder /home/pi/domoticz/scripts/backup_ftp.sh. Ik plaats hier al mijn scripts in, zodat die mee worden genomen in de backup die gemaakt worden middels dit script.

In het begin van het script zijn er zes variabelen die je zelf dient in te vullen;

Bij DOMOTICZ_SERVER vul je op de plaats van x.x.x.x:yy het IP-adres of hostname van Domoticz in en de gebruikte poort. Draai je dit script op de Raspberry Pi waarop je ook Domoticz draait en werk je op de standaard poort van Domoticz, dan kan je hier localhost:8080 invullen.

Achter FTP_SERVER vul je op de plaats van x.x.x.x:yy het IP-adres en de gebruikte poort in van de (S)FTP-locatie waar je de backup naar toe wilt schrijven.

Bij FTP_SFPT vul je “yes” in als jouw backup-locatie SFTP ondersteund. Bijvoorbeeld de meeste moderne NAS’en ondersteunen dit wel. Wellicht moet je dit wel apart aanzetten. Mocht je de mogelijkheid voor SFTP hebben, dan is het advies om dat ook vooral te gebruiken. FTP is in principe namelijk geen veilig protocol, aangezien encryptie hierbij ontbreekt.

Voor FTP_USERNAME en FTP_PASSWORD zijn uiteraard de gebruikersnaam en het wachtwoord nodig om in te loggen op de (S)FTP-locatie.

Tot slot is FTP_DIRECTORY het pad op de (S)FTP-locatie waarop je de backup-bestanden opgeslagen wilt hebben.

Testen

Heb je het script opgeslagen, test dan in ieder geval even of het netjes draait en ook daadwerkelijk 3 backup-bestanden oplevert op je (S)FTP-locatie.

Handmatig draaien kan met het volgende commando;

bash /home/pi/domoticz/scripts/backup_ftp.sh

Schedulen van het script

Mocht je niet bekend zijn met crontab, dan adviseer ik je hier even op te Googlen. Voor het aanpassen van je cronjobs gebruik je het volgende commando;

crontab -e

Voor bijvoorbeeld het dagelijks laten draaien van dit script om 23:00 uur gebruik je onderstaande rule;

0 23 * * * /home/pi/domoticz/scripts/backup_ftp.sh

Verder Bericht

Vorige Bericht

2 Reacties

  1. John 28 februari 2021

    Hallo Jos, moet ftp_backup.sh (Handmatig draaien kan met het volgende commando) niet zijn : backup_ftp.sh ?

    Groetjes,

    John

    • jos 2 maart 2021 — Berichtauteur

      Hallo John, je hebt helemaal gelijk. Dankjewel voor het melden, is gelijk gecorrigeerd!

Laat een reactie achter

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

© 2021 Steenderen.NET

Thema door Anders Norén