Meine Gitea-Instanz läuft seit einiger Zeit auf meiner Synology NAS in einem Docker-Container, jedoch ohne eine Sicherung. Ohne ein komplettes Backup ist es auch schwer Gitea mal auf einen anderen Server umzuziehen. Gitea bietet da zum Glück eine recht einfache Möglichkeit einen vollständigen Dump zu erstellen. Der enthält alle Daten und kann auf einem neuen Server wieder hergestellt werden.
Die Anleitung zum Installieren von Gitea auf eine Synology findet ihr hier
➡ Gitea auf einem Synology NAS installieren
In der offiziellen Gitea-Dokumentation findet ihr die Anleitung für den Backup & Restore Prozess.
➡ https://docs.gitea.io/en-us/backup-and-restore/. Den Weg habe ich auch ausprobiert, leider hat das nicht ganz so funktioniert, wie ich mir das vorgestellt habe. Deshalb habe ich mich daran gemacht einen anderen Weg zu finden, der dann von Erfolg gekrönt war.
Schritt 1
Im ersten Schritt ist ein Terminal direkt im installierten Docker Container über die Weboberfläche zu öffnen.

Schritt 2
Im zweiten Schritt wird der Dump von Gitea erstellt. Es ist folgendes zu beachten:
- Das Terminal gilt nur für das Docker-Image. Ihr könnt nicht in ein andere Verzeichnis auf der Synology wechseln, z.B. euer Home-Verzeichnis
- In dem Verzeichnis in dem ihr den Dump-Befehl ausführt wird dieser abgelegt, in diesem Beispiel wird es in das Verzeichnis /tmp gelegt.
- Den Dump-Befehl müsst ihr zwingend als User git ausführen.
Nachdem das Terminal geöffnet wurde könnt ihr kontrollieren, mit welchem Benutzer ihr angemeldet seit
bash-5.1# whoami
root
In diesem Fall ist es der Benutzer root
Wir wechseln mal in das Verzeichnis /tmp
bash-5.1# cd /tmp
Nun können wir den Benutzer wechseln und den Dump-Befehl ausführen.
bash-5.1# su git
bash-5.1# /app/gitea/gitea dump -c /data/gitea/conf/app.ini
Der Befehl braucht je nach Größe von Gitea einige Zeit, bis er durchgelaufen ist. Danach könnt ihr mit ls den Inhalt des Verzeichnisses /tmp auflisten lassen und siehe da, es ist ein zip-Ordner vorhanden
bash-5.1# ls
git-dump-****.zip

Gib mir gerne einen Kaffee ☕ aus!
Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕ ausgeben.
bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj
Schritt 3
Der Gitea-Dump liegt nun im Docker-Verzeichnis eurer Gitea-Instanz. Damit der Dump auch entsprechend gesichert werden kann oder auf einem anderen Server wieder hergestellt werde kann, müssen wir den in ein anderes Verzeichnis kopieren.
In diesem Beispiel kopiere ich das zip-Archiv in das Home-Verzeichnis meines Benutzers. Dabei ist zu beachten, dass das Kopieren über eine SSH-Sitzung durchgeführt wird, mit der ich vollen Zugriff auf die Ordner und Verzeichnisstruktur der Synology erhalte.
Das zip-Archiv suche ich über den Befehl find. Ihr benötigt dafür sudo-Rechte, da sonst nicht jedes Verzeichnis durchsucht werden kann.
sudo find -name gitea-dump-***.zip
Das Ergebnis sieht dann in etwa so aus:
sudo find -name gitea-dump-1628841406.zip
./volume1/@docker/btrfs/subvolumes/2ab4ca5373f218cc4e13255a65c1014decda2ab650bbb8ae2eddb32be21417bf/tmp/gitea-dump-1628841406.zip

Damit haben wir da zip-Archiv gefunden und wir können es in das Home-Verzeichnis kopieren. Nach dem Kopieren wird es auf der Weboberfläche in der File Station angezeigt.
Prüft den Pfad zum Home-Verzeichnis eures Benutzers.
sudo cp /volume1/@docker/btrfs/subvolumes/2ab4ca5373f218cc4e13255a65c1014decda2ab650bbb8ae2eddb32be21417bf/tmp/gitea-dump-1628841406.zip /var/services/homes/benutzer

Schritt 4
Nun könnt ihr ganz bequem das zip-Archiv über die File Station herunterladen, entpacken und anschauen.

Gallery
Photo by Markus Spiske on Unsplash

ist absolut technik-begeistert und großer Fan von Linux und Open Source. Raspberry Pi Bastler der ersten Stunde und nach wie vor begeistert von dem kleinen Stück Hardware, auf dem er tolle Projekte umsetzt. Teilt hier seine Erfahrungen mit Nextcloud, Pi-hole, YubiKey, Synology und openmediavault und anderen spannenden IT-Themen. Nutzt Markdown und LaTeX zum Dokumentieren seiner Projekte und Gitea zum Versionieren. Sitzt vor einem 49“ Monitor, nutzt Windows und MacOS zum Arbeiten, Linux auf seinen Servern und virtuellen Maschinen und hört dabei Spotify und MP3s und Radio-Streams über seinen RadioPi.
Hi Stefan,
zunächst einmal vielen Dank für deine Beiträge zum Thema Gitea! Ich habe heute von Gitlab auf Gitea migriert (Gitlab war für unsere Anwendung einfach zu mächtig und Ressourcenhungrig/träge) und bin soweit sehr zufrieden und überrascht, wie performant Gitea ist. Deine Beiträge waren hierfür sehr hilfreich.
Ich habe noch einen kleinen Verbesserungsvorschlag zum Thema Backup. Ich vertraue mir selber nicht regelmäßige Backups zu erstellen, daher brauche ich dafür eine automatische Lösung. Ich konnte meine Lösung die ich bei Gitlab Jahrelang benutzt habe erfolgreich anpassen und wollte sie mit dir und anderen Lesern teilen.
Folgende Schritte habe ich durchgeführt:
1. In Docker auf die Details der Gitea Instanz gehen, unter Volume einen neuen Ordner vom NAS in den Container mappen (In meinem Fall xyz/Backups/Gitea -> /backup). Nach einem reboot des Containers erscheint dieser Ordner im root. In diesem Ordner liegen später die Backups.
2. In der DSM Systemsteuerung -> Aufgabenplaner eine neue Geplante Aufgabe mit einem Benutzerdefinierten Skript anlegen. Bei mir ist der Name „Gitea Backup“, Benutzer root, Zeitplan täglich um 4 Uhr.
3. Unter Aufgabeneinstellungen kommt die eigentliche Aufgabe rein (Zum Debuggen kann man das Häkchen setzen und sich E-Mails zu der Aufgabe zusenden lassen):
—————-
docker exec -u git -i -w /tmp gitea-gitea1 bash -c ‚/app/gitea/gitea dump -c data/gitea/conf/app.ini‘
docker exec -u root -i gitea-gitea1 bash -c ‚mv /tmp/* /backup/‘
—————-
Dieses Skript erstellt im Container zunächst ein dump als User „git“ im Ordner „/tmp“. Mit dem zweiten Befehl wird der gesamte Inhalt des „/tmp“ Ordners in den von uns angelegten „/backup“ Ordner als user „root“ verschoben. „gitea-gitea1“ ist der Name meiner Gitea Instanz
Da dieser Ordner irgendwann vollläuft, muss dort natürlich aufgeräumt werden ? Dieses Skript habe ich noch nicht in der Praxis getestet, dieser lief aber mit einem anderen Pfad bei mir lange Zeit problemlos.
1. Wie oben eine neue tägliche Aufgabe um 5 Uhr anlegen (Heißt bei mir „Gitea Backup cleanup“). Skript:
—————-
find /volume1/xyz/Backups/Gitea -mtime +30 -delete
—————-
Dieser löscht Dateien die zuletzt vor ungefähr einem Monat modifiziert worden sind.
Die Namen, Zeiten, Pfade etc. müssen natürlich auf die jeweiligen Anforderungen bei euch angepasst werden.
Ich hoffe mein Kommentar hilft weiter. Bei Fragen einfach Antworten ?
Hi Bayram,
super, vielen Dank für deine Anleitung!
Coole Sache das so zu automatisieren.
Grüße
Stefan