Diese Anleitung ermöglicht es euch, dass ihr mittels eines Skriptes ein Backup euer Seafile Docker Instanz erstellen könnt.

Seafile ist ein optimaler Speicherort für eure Daten. Aber auch hier gilt, dass man IMMER Backups erstellen soll. Bei Seafile sollten folgende Verzeichnisse gesichert werden:

  • das SeaHub Verzeichnis (z. B. /opt/containers/seafile/seafile-data/seafile/seahub-data“)
  • das Datenverzeichnis (z. B. /opt/containers/seafile/seafile-data/seafile/seafile-data)
  • Das Konfigurationsverzeichnis (z. B. /opt/containers/seafile/seafile-data/seafile/conf)
  • die Datenbank von Seafile

Bei meiner Anleitung beziehe ich mich auf die offizielle Anleitung von Seafile, die ihr hier finden könnt.

1. Backup per Skript erstellen

Mit Hilfe von diesem Skript könnt ihr alles wichtige sichern. Das Skript habe ich hier aus meiner vorherigen Anleitung genommen und angepasst.

Zuerst erstellen wir uns eine neue Datei:

nano /home/Benutzername/seafile-backup.sh

Inhalt:

#
# Bitte nur hier etwas anpassen
#

#loescht Backups, die aelter als 14 Tage sind
backupalter="14"

# Verzeichnis, wo eure Daten gesichert werden sollen
backupMainDir="/sicherung/"

# Verzeichnis, in dem eure Seafile Hub liegt
seafilehubDir="/opt/containers/seafile/seafile-data/seafile/seahub-data"

# Verzeichnis, in dem eure Seafile Data liegt
seafiledataDir="/opt/containers/seafile/seafile-data/seafile/seafile-data"

# Verzeichnis, in dem eure Seafile Conf liegt
seafileconfDir="/opt/containers/seafile/seafile-data/seafile/conf"

# Name eures Seafile Datenbank Users
dbUser="euer Benutzer"

# Passwort eures Seafile Datenbank Users
dbPassword="euer Passwort"


#### ab hier nichts mehr anpassen ####

### Namen der Sicherungsdateien
fileNameBackupDataDir="seafile-datadir.tar.gz"
fileNameBackupconfDir="seafile-confdir.tar.gz"
fileNameBackuphubDir="seafile-hubdir.tar.gz"
fileNameBackupDbccnet="seafile-db-ccnet.sql"
fileNameBackupDbseafile="seafile-db-seafile.sql"
fileNameBackupDbseahub="seafile-db-seahub.sql"

### Datum auslesen
currentDate=$(date +"%Y%m%d_%H%M%S")




#aktuelles Verzeichnis
backupdir="${backupMainDir}/${currentDate}/"



#
# Ausgabe des Datums
#
echo
echo Backup vom $currentDate
echo
#
# Check for root
#
if [ "$(id -u)" != "0" ]
then
        errorecho "ERROR: This script has to be run as root!"
        exit 1
fi
#
# Check if backup dir already exists
#
if [ ! -d "${backupdir}" ]
then
        mkdir -p "${backupdir}"
else
        errorecho "ERROR: The backup directory ${backupdir} already exists!"
        exit 1
fi


#
# Backup file and data directory
#
echo "Erstellung des Backups eurer Seafile Daten"
tar -cpzf "${backupdir}/${fileNameBackuphubDir}"  -C "${seafilehubDir}" .
echo "Status: OK"
echo

echo "Erstellung des Backups eurer Seafile Daten"
tar -cpzf "${backupdir}/${fileNameBackupDataDir}"  -C "${seafiledataDir}" .
echo "Status: OK"
echo


echo "Erstellung des Backups eurer Seafile Daten"
tar -cpzf "${backupdir}/${fileNameBackupconfDir}"  -C "${seafileconfDir}" .
echo "Status: OK"
echo
#
# Backup DB
#
echo "Erstellung des Backups eurer Seafile Datenbank"
docker exec seafile-mysql /usr/bin/mysqldump -u "${dbUser}"  -p"${dbPassword}" "ccnet_db" > "${backupdir}/${fileNameBackupDbccnet}"
docker exec seafile-mysql /usr/bin/mysqldump -u "${dbUser}"  -p"${dbPassword}" "seafile_db" > "${backupdir}/${fileNameBackupDbseafile}"
docker exec seafile-mysql /usr/bin/mysqldump -u "${dbUser}"  -p"${dbPassword}" "seahub_db" > "${backupdir}/${fileNameBackupDbseahub}"
echo "Status: OK"
echo
#
# Alte Dateien loeschen
#
echo "Dateien ueber" "${backupalter}" "Tage loeschen"
find "${backupMainDir}" -type f -mtime +"${backupalter}" -delete
echo "Loesche leere Ordner"
find "${backupMainDir}" -type d -empty -delete

Notwendige Anpassungen

  • Alle Werte im oberen Bereich des Skriptes. Dieser Bereich ist extra gekennzeichnet.

Nun müsst ihr das Skript noch ausführbar machen.

chmod +x /home/Benutzername/seafile-backup.sh

2. Backup Skript automatisch starten per Cron

Nachdem ihr den obigen Befehl erfolgreich ausprobiert habt, legen wir jetzt einen Cronjob an, damit dieser automatisch ausgeführt wird.

Das geht mit

crontab -e

Wenn ihr noch keinen Crontab angelegt habt, dann sollte folgende Meldung erscheinen. Hier drückt ihr einfach „1“.

Nun solltet ihr folgendes sehen.

Mein Backup Script liegt unter „/home/Benutzername/nextcloud-backup.sh“.

Fügt am Ende der Datei folgende Zeile ein:

0 4 * * * /home/Benutzername/seafile-backup.sh >> /home/Benutzername/Log.txt

Erklärung:
>> /home/Benutzername/Log.txt bewirkt, dass die Ausgaben des Skripts in die Datei Log.txt geschrieben werden

Erklärung der obigen Zeile:

1. Stelle: Minute -> 0
2. Stelle: Stunde -> 4
3. Stelle: Tag des Monats -> *
4. Stelle: Monat -> *
5. Stelle: Wochentag -> *

Das Skript wird also jeden Tag nachts um 4 Uhr gestartet.

3. Backup wiederherstellen in neuem Container / Server

Hier gehe ich davon aus, dass ihr eine neue Docker / Server erstellt habt. Für die Einrichtung von Seafile unter Docker könnt ihr diese Anleitung verwenden.

Startet nun eure Seafile Docker Instanz. Ihr braucht euch nicht anzumelden. Sie muss nur im Hintergrund laufen, damit alle Ordner erstellt werden und wir auf die Datenbank zugreifen können.

3.1 Dateien wiederherstellen

Ich gehe davon aus, dass die entsprechenden Ordner bereits vorhanden sind, in die ihr euer Backup wiederherstellen möchtet.

Ihr entpackt also nun die Dateien in die entsprechenden Verzeichnisse:

Seafile Hub
tar -xpzf /sicherung/Datum/seafile-hubdir.tar.gz -C /opt/containers/seafile/seafile-data/seafile/seahub-data/
Nutzerdaten
tar -xpzf /sicherung/Datum/seafile-datadir.tar.gz -C /opt/containers/seafile/seafile-data/seafile/seafile-data/
Konfiguration
tar -xpzf /sicherung/Datum/seafile-confdir.tar.gz -C /opt/containers/seafile/seafile-data/seafile/conf/

3.2 Datenbank wiederherstellen

Nachdem alle Daten wieder vorhanden sind, müsst ihr nur noch die Datenbank wiederherstellen.

Nun kopieren wir unser SQL Backup in diesen Container:

docker cp /sicherung/Datum/seafile-db-ccnet.sql seafile-mysql:/ccnet
docker cp /sicherung/Datum/seafile-db-seafile.sql seafile-mysql:/seafile
docker cp /sicherung/Datum/seafile-db-seahub.sql seafile-mysql:/hub

Nun ist die Dateien im Container „seafile-mysql“. Jetzt können wir diese importieren. Hier bitte euren Nutzernamen / Passwort anpassen.

docker exec seafile-mysql /bin/bash -c "/usr/bin/mysql -u root -ptest ccnet_db < /ccnet"
docker exec seafile-mysql /bin/bash -c "/usr/bin/mysql -u root -ptest seafile_db < /seafile"
docker exec seafile-mysql /bin/bash -c "/usr/bin/mysql -u root -ptest seahub_db < /hub"

Anschließend könnt ihr die Datenbank Sicherung innerhalb von Docker wieder löschen.

docker exec seafile-mysql /bin/bash -c "rm /ccnet"
docker exec seafile-mysql /bin/bash -c "rm /seafile"
docker exec seafile-mysql /bin/bash -c "rm /hub"

Jetzt habt ihr eurer Seafile Backup erfolgreich wiederhergestellt.

4. Quellen

https://download.seafile.com/published/seafile-manual/docker/deploy%20seafile%20with%20docker.md

Teile diesen Beitrag
Christian

Categories:

Keine Kommentare vorhanden

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.