Einführung
Gitea ist ein Quellcode-Repository basierend auf dem Versionskontrollsystem Git. Obwohl es mehrere selbstgehostete Lösungen wie GitLab und Gogs gibt, hat Gitea den Vorteil, leichtgewichtig zu sein, was bedeutet, dass es auf einem relativ kleinen Server betrieben werden kann.
Ein kleiner Server, insbesondere im Bereich der VPS, bedeutet jedoch oft begrenzten Speicherplatz. Glücklicherweise bieten viele Hosting-Anbieter zusätzlichen Speicherplatz in Form von externen Volumes, Blockspeicher oder vernetztem Dateispeicher (NFS) an. Dies gibt Benutzern die Möglichkeit, Geld für kleinere VPS-Hosts für ihre Anwendungen zu sparen, ohne dabei Speicherplatz einzubüßen.
Mit Gitea und der Möglichkeit, zu entscheiden, wo Ihr Quellcode gespeichert wird, können Sie sicherstellen, dass Ihre Projekte und Dateien Raum zum Wachsen haben. In diesem Tutorial werden Sie ein externes Speichervolumen an einen Einhängepunkt anhängen und sicherstellen, dass Gitea die entsprechenden Informationen von diesem Volume liest. Am Ende werden Sie eine Gitea-Installation haben, die Repositories und andere wichtige Informationen auf einem separaten Speichervolumen speichert.
Voraussetzungen
Vor dem Beginn benötigen Sie Folgendes:
- Ein Ubuntu 20.04 Server, der gemäß unserer Anleitung zur Ersteinrichtung eines Servers für Ubuntu 20.04 eingerichtet ist, mit einem nicht-Root-Benutzer mit sudo-Berechtigungen und einer aktivierten Firewall.
- Ein externes Volume wie ein NFS- oder Blockspeichervolume. Wenn Sie ein Blockspeichervolume von DigitalOcean einrichten möchten, folgen Sie unserer Produktdokumentation.
- Eine Installation von Gitea auf diesem Server, die über einen Domainnamen erreichbar ist. Diese Anleitung setzt voraus, dass Sie Gitea in Docker installiert haben, wie in unserem Tutorial „Wie man Gitea auf Ubuntu 20.04 installiert“ beschrieben. Beachten Sie, dass Sie dafür Docker und Docker Compose auf Ihrem Server installiert haben müssen. Diese Tools können Sie installieren, indem Sie den Anweisungen in folgenden Anleitungen folgen:
- Schritte 1 und 2 von „Wie man Docker auf Ubuntu 20.04 installiert und verwendet“
- Schritt 1 von „Wie man Docker Compose auf Ubuntu 20.04 installiert und verwendet“
Beachten Sie, dass, wenn Sie Gitea mit einer anderen Methode als der in diesen Voraussetzungen beschriebenen installiert haben, die Namen und Speicherorte bestimmter Dateien und Verzeichnisse auf Ihrem System von dem abweichen können, was in diesem Leitfaden in Beispielen erwähnt wird. Die in diesem Tutorial skizzierten Konzepte sollten jedoch auf jede Gitea-Installation anwendbar sein.
Schritt 1 – Einhängen eines Blockspeichervolumes
A volume can take many different forms. It could be an NFS volume, which is storage available on the network provided via a file share. Another possibility is that it takes the form of block storage via a service such as DigitalOcean’s Volumes. In both cases, storage is mounted on a system using the mount
command.
Volumes wie diese sind als Gerätedateien sichtbar, die im Verzeichnis /dev
gespeichert sind. Diese Dateien sind die Art und Weise, wie der Kernel mit den Speichergeräten selbst kommuniziert; die Dateien werden tatsächlich nicht für die Speicherung verwendet. Um Dateien auf dem Speichergerät speichern zu können, müssen Sie sie mit dem Befehl mount
einhängen.
Zuerst müssen Sie einen Einhängepunkt erstellen – das heißt, einen Ordner, der mit dem Gerät verbunden wird, so dass Daten, die darin gespeichert sind, auf diesem Gerät gespeichert werden. Einhängepunkte für Speichergeräte wie dieses befinden sich normalerweise im Verzeichnis /mnt
.
Erstellen Sie einen Einhängepunkt namens gitea
, wie Sie einen normalen Ordner mit dem Befehl mkdir
erstellen würden:
Von hier aus können Sie das Gerät an dieses Verzeichnis anhängen, um es zum Zugriff auf diesen Speicherplatz zu verwenden. Verwenden Sie den Befehl mount
, um das Gerät zu mounten:
Die Zeichenkette ext4
gibt den Dateisystemtyp an, in diesem Fall ext4, obwohl je nach Dateisystemtyp Ihres Volumes etwas wie xfs
oder nfs
sein könnte; Um zu überprüfen, welchen Typ Ihr Volume verwendet, führen Sie den Befehl mount
ohne Optionen aus:
Dies liefert Ihnen eine Zeile Ausgabe für jedes eingehängte Dateisystem. Da Sie gerade Ihres eingehängt haben, wird es wahrscheinlich das letzte in der Liste sein:
Output. . .
/dev/sda on /mnt/gitea type ext4 (rw,noatime,discard)
Dies zeigt an, dass der Dateisystemtyp ext4
ist.
Dieser Befehl bindet das Gerät anhand seiner ID an /mnt/gitea
. Die Option -o
gibt die beim Mounten verwendeten Optionen an. In diesem Fall verwenden Sie die Standardoptionen, die das Einhängen eines Lese-/Schreibdateisystems ermöglichen, und die Option noatime
gibt an, dass der Kernel die letzte Zugriffszeit für Dateien und Verzeichnisse auf dem Gerät nicht aktualisieren soll, um effizienter zu sein.
Jetzt, da Sie Ihr Gerät eingehängt haben, bleibt es so lange eingehängt, wie das System läuft. Sobald das System jedoch neu gestartet wird, wird es nicht mehr eingehängt sein (obwohl die Daten auf dem Volume erhalten bleiben), sodass Sie dem System mitteilen müssen, das Volume beim Starten sofort zu mounten, indem Sie die Datei /etc/fstab
(‚Dateisystemtabelle‘) verwenden. Diese Datei listet die verfügbaren Dateisysteme und ihre Einhängepunkte in einem tabulatorgetrennten Format auf.
Verwenden Sie echo
und tee
, um eine neue Zeile am Ende von /etc/fstab
hinzuzufügen:
Dieser Befehl fügt den String /dev/disk/by-uid/Ihre_Disk_ID
zur Datei fstab
hinzu und gibt ihn auf Ihrem Bildschirm aus. Wie beim vorherigen mount
-Befehl wird das Gerät unter Verwendung der Optionen defaults
, nofail
und noatime
auf das Mount-Punkt gemountet.
Nachdem Ihre Änderungen an /etc/fstab
vorgenommen wurden, wird der Kernel Ihr Volume beim Booten mounten.
Hinweis: Speichergeräte unter Linux sind sehr flexibel und kommen in verschiedenen Typen vor, von einem vernetzten Dateisystem (NFS) bis hin zu einer herkömmlichen Festplatte. Um mehr über Blockspeicher und -geräte in Linux zu erfahren, können Sie in unserem Einführung in die Speicherterminologie und -konzepte in Linux mehr über Speicherkonzepte lesen.
Schritt 2 — Konfigurieren von Gitea zur Speicherung von Daten auf einem Blockspeichervolume
Gitea verwaltet alle seine Repositories an einem zentralen Ort. Dazu gehören Repositories von allen Benutzern und Organisationen. Sofern nicht anders konfiguriert, werden alle Informationen in einem einzigen Verzeichnis aufbewahrt. Dieses Verzeichnis heißt in Standardinstallationen data
. Für die Zwecke dieses Tutorials verwenden wir eine Version von Gitea, die in einem Docker läuft, wie im oben verlinkten Tutorial.
Zuerst werfen wir einen Blick darauf, was sich in diesem Datenverzeichnis befindet. Sie können dies tun, indem Sie zum Datenverzeichnis wechseln und den Befehl ls
ausführen. Die Verwendung des Formats -l
gibt uns mehr Informationen über die Dateien:
Dies liefert eine Auflistung wie folgt:
Outputtotal 20
drwxr-xr-x 5 root root 4096 Jun 23 22:34 ./
drwxrwxr-x 3 sammy sammy 4096 Jun 26 22:35 ../
drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/
drwxr-xr-x 12 git git 4096 Jun 26 22:35 gitea/
drwx------ 2 root root 4096 Jun 23 22:34 ssh/
Lassen Sie uns die Ausgabe dieses Befehls analysieren. Es listet eine Datei oder ein Verzeichnis pro Zeile auf. In diesem Fall listet es fünf Verzeichnisse auf. Der Eintrag für .
ist ein spezieller Eintrag, der einfach das aktuelle Verzeichnis bedeutet, und ..
steht für das Verzeichnis eine Ebene höher. Diese Ausgabe zeigt, dass das aktuelle Verzeichnis dem Benutzer root gehört, was in diesem Fall der Fall ist, weil Docker als privilegierter Benutzer ausgeführt wird, und das Verzeichnis eine Ebene höher gehört zu sammy.
Das Verzeichnis git
ist für uns wichtig, da es alle Repositories enthält, die wir möglicherweise auf einem separaten Volume speichern möchten. Listen Sie die Inhalte des Verzeichnisses auf:
Dies liefert die lange Auflistung des Verzeichnisses:
Outputtotal 24
drwxr-xr-x 5 git git 4096 Jun 23 22:42 ./
drwxr-xr-x 6 root root 4096 Jun 27 14:21 ../
-rw-r--r-- 1 git git 190 Jun 23 22:42 .gitconfig
drwxr-xr-x 2 root root 4096 Jun 23 22:34 .ssh/
drwxr-xr-x 2 git git 4096 Jun 23 22:42 lfs/
drwxr-xr-x 5 git git 4096 Jun 30 20:03 repositories/
Darin befinden sich zwei bemerkenswerte Verzeichnisse: das Verzeichnis repositories
, das die von Gitea verwalteten Git-Repositories sortiert nach Benutzer/Organisation enthält, und das Verzeichnis lfs
, das Daten für die Funktion Large File Storage von Git enthält. Das Verzeichnis gitea
enthält Informationen, die Gitea im Hintergrund verwendet, einschließlich Archive alter Repositories sowie die Datenbank, die Informationen wie Benutzer und Repository-Informationen enthält, die vom Webdienst verwendet werden. Das Verzeichnis ssh
enthält verschiedene SSH-Schlüsselpaare, die von Gitea verwendet werden.
Angesichts der Tatsache, dass alle Informationen in diesem Verzeichnis wichtig sind, möchten Sie den gesamten Inhalt des Verzeichnisses auf unserem angehängten Volume einschließen.
Es gibt zwei Pfade, die Sie von diesem Punkt aus verfolgen können, je nachdem, ob Sie mit einer neuen Installation von Gitea arbeiten und dieses Tutorial während des Installationsprozesses abschließen. Im ersten Pfad können Sie vor Abschluss der Installation Standorte angeben, und im zweiten lernen Sie, wie Sie eine vorhandene Installation verschieben können.
Einrichten einer neuen Installation von Gitea
Wenn Sie mit einer brandneuen Installation von Gitea beginnen, können Sie während des Konfigurationsprozesses angeben, wo alle Ihre Informationen gespeichert sind. Wenn Sie beispielsweise Gitea mithilfe von Docker Compose einrichten, können Sie die Volumes auf Ihr angehängtes Volume abbilden.
Öffnen Sie die Datei docker-compose.yml
mit Ihrem bevorzugten Texteditor. Das folgende Beispiel verwendet nano
:
Sobald Sie die Datei geöffnet haben, suchen Sie nach dem Eintrag volumes
in der Kompositionsdatei und ändern Sie die Zuordnung auf der linken Seite des :
, um auf geeignete Standorte auf Ihrem Blockspeichervolume für das Gitea-Datenverzeichnis zu verweisen.
Wenn Sie mit dem Einstellen der Informationen fertig sind, speichern und schließen Sie die Datei. Wenn Sie nano
verwenden, können Sie dies durch Drücken von CTRL + X
, Y
und dann ENTER
tun.
Warnung: SSH-Server suchen nach dem .ssh
-Verzeichnis im Benutzerverzeichnis des Git-Benutzers (git, in diesem Fall). Dieses Verzeichnis enthält alle SSH-Schlüssel, die von Gitea verwendet werden, daher wird nicht empfohlen, das Mounten dieses Docker-Volumes zu verschieben. Um diesen Speicherort auf Ihrem Volume zu sichern, ist es am besten, eine andere Lösung wie einen cron
-Job zu verwenden, um das Verzeichnis zu sichern. Um mehr zu erfahren, schauen Sie sich dieses Tutorial zur Verwendung von cron
zur Verwaltung von geplanten Aufgaben an.
Wenn Sie docker-compose
ausführen und Gitea installiert wird, verwendet es Ihr Blockspeichervolumen, um seine Daten zu speichern.
Wenn Sie Docker-Volumes nicht verwenden, um die Speicherorte Ihrer Daten zu verwalten – zum Beispiel, wenn Sie Gitea auf Ihrem Server gemäß diesen Anweisungen von Gitea über die binären Versionen installieren – dann müssen Sie die Speicherorte in der Konfigurationsdatei (normalerweise /etc/gitea/app.ini
) ändern, wenn Sie alle Werte einstellen, und bevor Sie die abschließenden Installationsschritte im Browser durchführen. Sie könnten sie zum Beispiel wie folgt setzen:
Hinweis: Stellen Sie sicher, dass Ihr Git-Benutzer Schreibzugriff auf diesen Speicherort hat. Informationen zu Linux-Berechtigungen finden Sie hier.
Umzug einer vorhandenen Installation von Gitea
Wenn Sie bereits eine Instanz von Gitea installiert und ausgeführt haben, können Sie Ihre Daten immer noch auf einem separaten Volume speichern, aber es erfordert einige Sorgfalt, um sicherzustellen, dass alle Ihre Daten sowohl sicher als auch für Gitea zugänglich bleiben.
Hinweis: Wie bei jeder Operation, die Ihre Daten betrifft, ist es wichtig sicherzustellen, dass Sie eine aktuelle Sicherungskopie von allem haben. In diesem Fall bedeutet dies eine Sicherungskopie aller Dateien in Ihrem Datenverzeichnis (die SSH-Dateien, die Verzeichnisse gitea-repositories
und lfs
, die Datenbank usw.) an einem sicheren Ort.
Es gibt zwei Möglichkeiten, Ihre Daten auf ein neues Volume zu verschieben. Die erste Möglichkeit besteht darin, Ihre Gitea-Daten an einen sekundären Speicherort zu kopieren und dann den ursprünglichen Speicherort in einen Einhängepunkt für Ihr Volume umzuwandeln. Wenn Sie Ihre Daten dann an diesen Speicherort zurückkopieren, kopieren Sie sie auf dieses Volume, und es sind keine Änderungen innerhalb von Gitea selbst erforderlich; es wird einfach wie zuvor fortgesetzt. Wenn Sie jedoch nicht das gesamte Gerät an dieses Ziel einhängen möchten (zum Beispiel, wenn Ihre Gitea-Daten nicht das einzige auf diesem Volume sein werden), besteht eine zweite Möglichkeit darin, alle Ihre Gitea-Daten an einen neuen Speicherort auf diesem Volume zu verschieben und Gitea selbst anzuweisen, diesen Speicherort zu verwenden.
Unabhängig von der gewählten Option sollten Sie zunächst den Gitea-Webdienst stoppen.
Wenn Sie Gitea über Docker Compose installiert haben, verwenden Sie docker-compose
, um den Dienst zu stoppen. Führen Sie innerhalb desselben Verzeichnisses, das die Datei docker-compose.yml
enthält, folgenden Befehl aus:
Wenn Sie es als systemd-Dienst installiert haben, verwenden Sie den Befehl systemctl
:
Nachdem Gitea gestoppt wurde, verschieben Sie den gesamten Inhalt des Datenverzeichnisses zum im Schritt 1 erstellten Einhängepunkt:
Stellen Sie sicher, dass alle Dateien verschoben wurden, indem Sie den Inhalt des aktuellen Verzeichnisses auflisten:
Dies gibt nur die Einträge des aktuellen und des übergeordneten Verzeichnisses zurück:
total 8
drwxrwxr-x 2 sammy sammy 4096 Jun 27 13:56 ./
drwxr-xr-x 7 sammy sammy 4096 Jun 27 13:56 ../
Nachdem alle Daten verschoben wurden, wechseln Sie in das neue Datenverzeichnis:
Verwenden Sie ls
, um sicherzustellen, dass alles korrekt aussieht:
Dies zeigt den Inhalt des Verzeichnisses an:
Outputtotal 36
drwxr-xr-x 6 root root 4096 Jun 27 14:21 ./
drwxr-xr-x 3 root root 4096 Jun 27 14:21 ../
drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/
drwxr-xr-x 13 git git 4096 Jul 11 08:25 gitea/
drwx------ 2 root root 16384 Jun 27 03:46 lost+found/
drwx------ 2 root root 4096 Jun 23 22:34 ssh/
Wie zuvor sollte es die Verzeichnisse ssh
, git
und gitea
enthalten. Wenn Sie SQLite als Datenbank verwenden, um Gitea zu verwalten, enthält es auch eine Datei mit dem Namen gitea.db
im Verzeichnis gitea
.
Wenn Sie sicher sind, dass alle Daten verschoben wurden, ist es Zeit, das Volume mit dem Datenverzeichnis zu mounten.
Zuerst wechseln Sie in das übergeordnete Verzeichnis des Datenverzeichnisses, in dem Sie sich zuvor befanden. In diesem Beispiel, das eine Installation von Gitea mit Docker Compose gemäß dem in den Voraussetzungen verlinkten Tutorial verwendet, handelt es sich um das Verzeichnis, das Ihre docker-compose.yml
-Datei enthält.
Wie zuvor verwenden Sie den mount
-Befehl, verwenden jedoch dieses Mal das Verzeichnis, das Sie gerade geleert haben, als Ziel:
Wenn Sie nun den Inhalt dieses Verzeichnisses auflisten, sollten alle Ihre Dateien an ihrem Platz sein:
Dieser Befehl gibt die erwarteten Informationen aus. Beachten Sie, dass je nach Dateisystemtyp Ihres Volumes möglicherweise ein zusätzliches Verzeichnis mit dem Namen lost+found
vorhanden ist. Dies ist normal und Teil der alltäglichen Dateisystemnutzung:
total 36
drwxr-xr-x 6 root root 4096 Jun 27 13:58 ./
drwxrwxr-x 3 sammy sammy 4096 Jun 27 02:23 ../
drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/
drwxr-xr-x 12 git git 4096 Jun 27 00:00 gitea/
drwx------ 2 root root 16384 Jun 27 03:46 lost+found/
drwx------ 2 root root 4096 Jun 23 22:34 ssh/
Wie erwähnt, wenn Sie möchten, dass Gitea ein Verzeichnis innerhalb des Blockspeichervolumes verwendet, müssen Sie einen zusätzlichen Schritt abschließen, bevor Sie Gitea wieder starten. Angenommen, Sie möchten einen Ordner namens scm
auf Ihrem Volume verwenden, das unter /mnt/gitea
gemountet ist. Nachdem Sie alle Ihre Gitea-Daten nach /mnt/gitea/scm
verschoben haben, müssen Sie einen symbolischen Link von Ihrem alten Datenverzeichnis zum neuen erstellen. Dazu verwenden Sie den ln
-Befehl:
An diesem Punkt können Sie Gitea neu starten. Wenn Sie Gitea als systemd-Dienst verwenden, führen Sie Folgendes aus:
Wenn Sie Gitea als Docker-Container mit Docker Compose ausführen, führen Sie Folgendes aus:
Jetzt, da alles läuft, besuchen Sie Ihre Gitea-Instanz im Browser und stellen Sie sicher, dass alles wie erwartet funktioniert. Sie sollten in der Lage sein, neue Objekte in Gitea zu erstellen, wie z.B. Repositories, Issues usw. Wenn Sie Gitea mit einem SSH-Shim eingerichtet haben, sollten Sie auch in der Lage sein, Repositories mit git clone
und git push
abzurufen und zu übertragen.
Abschluss
In diesem Tutorial haben Sie alle Ihre Gitea-Daten auf ein Blockspeichervolumen verschoben. Solche Volumes sind sehr flexibel und bieten viele Vorteile, wie z.B. die Möglichkeit, alle Ihre Daten auf größeren Festplatten, RAID-Volumes, vernetzten Dateisystemen oder durch die Verwendung von Blockspeicher wie DigitalOcean Volumes zur Reduzierung von Speicherkosten zu speichern. Es ermöglicht auch das Snapshoten ganzer Festplatten zur Sicherung, sodass Sie deren Inhalte im Falle eines katastrophalen Ausfalls wiederherstellen können.