Comment stocker les dépôts Gitea sur un volume séparé

Introduction

Gitea est un référentiel de code source basé sur le système de contrôle de version Git. Bien qu’il existe plusieurs solutions auto-hébergées disponibles telles que GitLab et Gogs, Gitea a l’avantage d’être léger, ce qui signifie qu’il peut fonctionner sur un serveur relativement petit.

Cependant, avoir un petit serveur, surtout dans le domaine des VPS, signifie souvent être limité en termes d’espace. Heureusement, de nombreux fournisseurs d’hébergement proposent également un stockage supplémentaire sous forme de volumes externes, de stockage bloc ou de stockage de fichiers en réseau (NFS). Cela donne aux utilisateurs la possibilité d’économiser de l’argent sur des hôtes VPS plus petits pour leurs applications sans sacrifier le stockage.

Avec Gitea et la possibilité de décider où votre code source est stocké, vous pouvez vous assurer que vos projets et fichiers ont de la place pour se développer. Dans ce tutoriel, vous allez monter un volume de stockage externe sur un point de montage et vous assurer que Gitea lit les informations appropriées à partir de ce volume. À la fin, vous disposerez d’une installation de Gitea qui stocke les référentiels et autres informations importantes sur un volume de stockage séparé.

Prérequis

Avant de commencer, vous aurez besoin des éléments suivants :

Notez que si vous avez installé Gitea à l’aide d’une méthode différente de celle décrite dans ces prérequis, les noms et emplacements de certains fichiers et répertoires sur votre système peuvent différer de ce que mentionne ce guide dans les exemples. Cependant, les concepts décrits dans ce tutoriel devraient être applicables à toute installation de Gitea.

Étape 1 — Monter un volume de stockage en bloc

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.

Des volumes tels que ceux-ci seront visibles comme des fichiers de périphériques stockés dans /dev. Ces fichiers sont la manière dont le noyau communique avec les périphériques de stockage eux-mêmes; les fichiers ne sont pas réellement utilisés pour le stockage. Afin de pouvoir stocker des fichiers sur le périphérique de stockage, vous devrez monter les en utilisant la commande mount.

Premièrement, vous devrez créer un point de montage mount point — c’est-à-dire un dossier qui sera associé au périphérique, de sorte que les données stockées à l’intérieur se retrouvent stockées sur ce périphérique. Les points de montage pour les périphériques de stockage comme celui-ci se trouvent généralement dans le répertoire /mnt.

Créez un point de montage nommé gitea comme vous créez un répertoire normal à l’aide de la commande mkdir:

  1. sudo mkdir /mnt/gitea

À partir de là, vous pouvez monter le périphérique dans ce répertoire afin d’y accéder. Utilisez la commande mount pour monter le périphérique:

  1. sudo mount -t ext4 -o defaults,noatime /dev/disk/by-id/your_disk_id /mnt/gitea

La chaîne ext4 spécifie le type de système de fichiers, ext4 dans ce cas, bien que selon le type de système de fichiers de votre volume, il puisse être quelque chose comme xfs ou nfs; pour vérifier quel type votre volume utilise, exécutez la commande mount sans options:

  1. mount

Cela vous donnera une ligne de sortie pour chaque système de fichiers monté. Étant donné que vous venez de monter le vôtre, il sera probablement le dernier de la liste:

Output
. . . /dev/sda on /mnt/gitea type ext4 (rw,noatime,discard)

Cela montre que le type de système de fichiers est ext4.

Cette commande monte le périphérique spécifié par son ID à /mnt/gitea. L’option -o spécifie les options utilisées lors du montage. Dans ce cas, vous utilisez les options par défaut qui permettent de monter un système de fichiers en lecture/écriture, et l’option noatime spécifie que le noyau ne devrait pas mettre à jour la dernière date d’accès pour les fichiers et les répertoires sur le périphérique afin d’être plus efficace.

Maintenant que vous avez monté votre appareil, il restera monté tant que le système sera en cours d’exécution. Cependant, dès que le système redémarre, il ne sera plus monté (bien que les données restent sur le volume), vous devrez donc indiquer au système de monter le volume dès qu’il démarre en utilisant le fichier /etc/fstab (« table des systèmes de fichiers »). Ce fichier répertorie les systèmes de fichiers disponibles et leurs points de montage dans un format séparé par des tabulations.

En utilisant echo et tee, ajoutez une nouvelle ligne à la fin de /etc/fstab:

  1. echo '/dev/disk/by-id/your_disk_id /mnt/gitea ext4 defaults,nofail,noatime 0 0' | sudo tee /etc/fstab

Cette commande ajoute la chaîne /dev/disk/by-uid/votre_identifiant_disque au fichier fstab et l’imprime à votre écran. Comme avec la commande mount précédente, elle monte l’appareil sur le point de montage en utilisant les options defaults, nofail et noatime.

Une fois que vos modifications ont été apportées à /etc/fstab, le noyau montera votre volume au démarrage.

Note: Les dispositifs de stockage sur Linux sont très flexibles et existent dans toutes les tailles différentes, d’un système de fichiers réseau (NFS) à un disque dur ordinaire. Pour en savoir plus sur le stockage de blocs et les appareils sous Linux, vous pouvez lire plus en détail sur les concepts de stockage dans notre Introduction aux Terminologies et Concepts de Stockage sous Linux.

Étape 2 — Configuration de Gitea pour stocker les données sur un volume de stockage en bloc

Gitea maintient tous ses dépôts à un emplacement central. Cela inclut les dépôts de tous les utilisateurs et organisations. Sauf configuration contraire, toutes les informations sont conservées dans un seul répertoire. Ce répertoire est nommé data dans les installations par défaut. Dans le cadre de ce tutoriel, nous utiliserons une version de Gitea en cours d’exécution sur Docker, comme dans le tutoriel lié ci-dessus.

Tout d’abord, prenons une idée de ce que contient ce répertoire de données. Vous pouvez le faire en vous déplaçant dans le répertoire de données et en exécutant la commande ls. L’utilisation du format -l nous donnera plus d’informations sur les fichiers :

  1. cd gitea
  2. ls -l

Cela donnera une liste comme celle-ci :

Output
total 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/

Analysons la sortie de cette commande. Il liste un fichier ou un répertoire par ligne. Dans ce cas, il liste cinq répertoires. L’entrée pour . est une entrée spéciale qui signifie simplement le répertoire courant, et .. représente le répertoire situé une étape au-dessus. Cette sortie montre que le répertoire courant est détenu par l’utilisateur root, ce qui est le cas dans cet exemple car Docker s’exécute en tant qu’utilisateur privilégié, et le répertoire situé une étape au-dessus est détenu par sammy.

Le répertoire git est important pour nous car il contient tous les dépôts que nous pourrions souhaiter stocker sur un volume séparé. Listez le contenu du répertoire :

  1. ls -l git

Cela fournira l’affichage détaillé du répertoire :

Output
total 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/

Au sein de celui-ci se trouvent deux répertoires notables : le répertoire repositories qui contient les dépôts git gérés par Gitea triés par utilisateur/organisation, et le répertoire lfs contenant les données pour la fonctionnalité de stockage de fichiers volumineux de Git. Le répertoire gitea contient les informations que Gitea utilise en arrière-plan, y compris les archives de vieux dépôts, ainsi que la base de données qui contient des informations telles que les utilisateurs et les informations sur les dépôts utilisées par le service web. Le répertoire ssh contient divers paires de clés SSH que Gitea utilise.

Étant donné que toutes les informations stockées dans ce répertoire sont importantes, vous voudrez inclure le contenu entier du répertoire sur notre volume attaché.

Il y a deux chemins à suivre à partir de ce point, en fonction de savoir si vous travaillez avec une nouvelle installation de Gitea et complétez ce tutoriel pendant le processus d’installation. Dans le premier chemin, vous pourrez spécifier les emplacements avant la fin de l’installation, et dans le second, vous apprendrez à déplacer une installation existante.

Configuration d’une nouvelle installation de Gitea

Si vous démarrez avec une nouvelle installation de Gitea, vous pouvez spécifier l’emplacement de tous vos informations lors du processus de configuration. Par exemple, si vous configurez Gitea à l’aide de Docker Compose, vous pouvez mapper les volumes à votre volume attaché.

Ouvrez le fichier docker-compose.yml avec votre éditeur de texte préféré. L’exemple suivant utilise nano:

  1. nano docker-compose.yml

Une fois que vous avez ouvert le fichier, recherchez l’entrée volumes dans le fichier de composition et modifiez le mappage sur le côté gauche de : pour pointer vers des emplacements appropriés sur votre volume de stockage en bloc pour le répertoire de données Gitea

docker-compose.yml
...

    volumes:
      - /mnt/gitea:/data
      - /home/git/.ssh/:/data/git/.ssh
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro

...

Lorsque vous avez terminé de définir les informations, enregistrez et fermez le fichier. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL + X, Y, puis ENTER.

Avertissement: Les serveurs SSH recherchent le répertoire .ssh dans le répertoire personnel de l’utilisateur Git (git, dans ce cas). Ce répertoire contient toutes les clés SSH que Gitea utilisera, il n’est donc pas conseillé de déplacer le montage pour ce volume Docker. Pour avoir cette localisation sauvegardée sur votre volume, il serait préférable d’utiliser une autre solution telle qu’un travail cron pour sauvegarder le répertoire. Pour en savoir plus, consultez ce tutoriel sur l’utilisation de cron pour gérer les tâches planifiées.

Lorsque vous exécutez docker-compose et que Gitea installe, il utilisera votre volume de stockage en bloc pour stocker ses données.

Si vous n’utilisez pas les volumes Docker pour gérer les emplacements de vos données – par exemple, si vous installez Gitea sur votre serveur via les versions binaires selon ces instructions de Gitea – alors vous devrez modifier les emplacements dans le fichier de configuration (généralement /etc/gitea/app.ini) lorsque vous définissez toutes les valeurs et avant de procéder aux dernières étapes d’installation dans le navigateur. Par exemple, vous pourriez les définir comme suit :

app.ini
...

# Si vous utilisez SQLite pour votre base de données, vous devrez modifier le PATH
# de cette section
[database]
...
PATH = /mnt/gitea/gitea.db

[server]
...
LFS_CONTENT_PATH = /mnt/gitea/lfs

[repository]
ROOT = /mnt/gitea/gitea-repositories

...

Remarque : Assurez-vous que votre utilisateur git a l’accès en écriture à cet emplacement. Vous pouvez vous renseigner sur les permissions Linux ici.

Déplacer une installation existante de Gitea

Si vous avez déjà une instance de Gitea installée et en cours d’exécution, vous pourrez toujours stocker vos données sur un volume séparé, mais cela nécessitera une attention particulière pour vous assurer que toutes vos données restent à la fois sûres et accessibles à Gitea.

Il existe deux options pour déplacer vos données vers un nouveau volume. La première façon est de copier vos données Gitea vers un emplacement secondaire, puis de convertir l’emplacement original en point de montage pour votre volume. Lorsque vous copiez vos données dans cet emplacement, vous les copierez sur ce volume, et aucune modification ne sera requise dans Gitea lui-même ; il continuera simplement comme avant. Cependant, si vous ne souhaitez pas monter l’intégralité du périphérique vers cette destination (par exemple, si vos données Gitea ne seront pas les seules sur ce volume), alors une deuxième option est de déplacer toutes vos données Gitea vers un nouvel emplacement sur ce volume et d’instruire Gitea lui-même à utiliser cet emplacement.Peu importe l’option que vous choisissez, tout d’abord, arrêtez le service web Gitea.

Si vous avez installé Gitea via Docker Compose, utilisez docker-compose pour arrêter le service. En étant dans le même répertoire contenant le fichier docker-compose.yml, exécutez :

Si vous l’avez installé en tant que service systemd, utilisez la commande systemctl :

Une fois que Gitea a été arrêté, déplacez l’intégralité du contenu du répertoire de données vers le point de montage créé à l’étape 1 :

  1. docker-compose down

Assurez-vous que tous les fichiers ont été déplacés en listant le contenu du répertoire actuel :

  1. sudo systemctl stop gitea

Cela ne renverra que les entrées du répertoire actuel et parent :

  1. sudo mv * /mnt/gitea

Une fois que toutes les données ont été déplacées, passez au nouveau répertoire de données :

  1. ls -la

En utilisant ls, assurez-vous que tout semble correct :Cela affichera le contenu du répertoire :

total 8
drwxrwxr-x 2 sammy sammy 4096 Jun 27 13:56 ./
drwxr-xr-x 7 sammy sammy 4096 Jun 27 13:56 ../

Une fois tous les données déplacées, passez au nouveau répertoire de données :

  1. cd /mnt/gitea

Utilisez ls pour vous assurer que tout est correct :

  1. ls -l

Cela affichera le contenu du répertoire :

Output
total 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/

Comme précédemment, il devrait contenir les répertoires ssh, git et gitea. Si vous utilisez SQLite comme base de données pour gérer Gitea, il contiendra également un fichier nommé gitea.db dans le répertoire gitea.

Lorsque vous êtes sûr que toutes les données ont été déplacées, il est temps de monter le volume sur le répertoire de données.

Tout d’abord, passez au répertoire parent du répertoire de données dans lequel vous étiez précédemment. Dans cet exemple, en utilisant une installation de Gitea à l’aide de Docker Compose comme décrit dans le tutoriel lié dans les prérequis, c’est le répertoire qui contient votre fichier docker-compose.yml.

  1. cd ~/gitea/

Comme précédemment, utilisez la commande mount, mais cette fois, utilisez le répertoire que vous venez de vider comme destination :

  1. sudo mount -o defaults,noatime /dev/disk/by-id/your_disk_id gitea

Maintenant, lorsque vous listez le contenu de ce répertoire, tous vos fichiers devraient être en place :

  1. ls -la gitea

Cette commande affichera les informations attendues. Notez que, en fonction du type de système de fichiers de votre volume, vous pourriez trouver un répertoire supplémentaire nommé lost+found; c’est normal et fait partie de l’utilisation quotidienne du système de fichiers :

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/

Comme mentionné, si vous souhaitez que Gitea utilise un répertoire dans le volume de stockage en bloc, il y a une étape supplémentaire que vous devez effectuer avant de redémarrer Gitea. Par exemple, disons que vous voulez utiliser un dossier nommé scm sur votre volume monté sur /mnt/gitea. Après avoir déplacé toutes vos données Gitea vers /mnt/gitea/scm, vous devrez créer un lien symbolique depuis votre ancien répertoire de données vers le nouveau. Pour ce faire, vous utiliserez la commande ln :

  1. sudo ln -s /mnt/gitea/scm gitea

À ce stade, vous pouvez redémarrer Gitea. Si vous utilisez Gitea en tant que service systemd, exécutez :

  1. sudo systemctl restart gitea

Si vous exécutez Gitea en tant que conteneur Docker à l’aide de Docker Compose, exécutez :

  1. docker-compose up -d

Maintenant que tout est opérationnel, visitez votre instance Gitea dans le navigateur et assurez-vous que tout fonctionne comme prévu. Vous devriez être en mesure de créer de nouveaux objets dans Gitea tels que des référentiels, des problèmes, etc. Si vous avez configuré Gitea avec un shim SSH, vous devriez également être en mesure de cloner et de pousser des référentiels à l’aide de git clone et git push.

Conclusion

Dans ce tutoriel, vous avez déplacé toutes vos données Gitea vers un volume de stockage en blocs. Les volumes de ce type sont très flexibles et offrent de nombreux avantages, tels que la possibilité de stocker toutes vos données sur des disques plus volumineux, des volumes RAID, des systèmes de fichiers en réseau, ou d’utiliser un stockage en blocs tel que les Volumes DigitalOcean pour réduire les dépenses de stockage. Cela vous permet également de prendre des instantanés de disques entiers pour les sauvegarder, afin de pouvoir restaurer leur contenu en cas de défaillance catastrophique.

Source:
https://www.digitalocean.com/community/tutorials/how-to-store-gitea-repositories-on-a-separate-volume