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
Guten Abend,
habe das bereits 2 mal versucht, leider endet es nach dem letzten Schritt wenn ich ein docker-compose down / dann up -d mache immer mit einem “502 Bad Gatewaynginx/1.18.0 (Ubuntu)”
Habe Seafile auf einen neuen VServer umgezogen und ebenfalls die Domain in der docker-compose.yml angepasst – sowie in der “seafile-data/seafile/conf/seahub_settings.py
” hinterlegt. von https://cloud.alt.de auf https://cloud.neu.de.
Vor dem zurück spielen, also nach der erfolgreichen Einrichtung bis zum login-Screen (ohne sich anzumelden) hat alles gepasst.
Gibt es hier noch ideen, irgendetwas was ich übersehen haben könnte?
Danke und Gruß
Auch wenn ich in der docker-compose das alte DB-root Passwort wähle sehe ich im Log:
| waiting for mysql server to be ready: %s (2003, “Can’t connect to MySQL server on ‘seafile-db’ ([Errno 111] Connection refused)”)
seafile | waiting for mysql server to be ready: %s (1045, “Access denied for user ‘seafile’@’172.29.0.4’ (using password: YES)”)