Hoe Gitea-repositories op een apart volume op te slaan

Introductie

Gitea is een broncode-opslagplaats gebaseerd op het versiebeheersysteem Git. Hoewel er verschillende zelfgehoste oplossingen beschikbaar zijn zoals GitLab en Gogs, heeft Gitea het voordeel dat het lichtgewicht is, wat betekent dat het op een relatief kleine server kan draaien.

Maar het hebben van een kleine server, vooral op het gebied van VPS’en, betekent vaak dat je beperkt bent in ruimte. Gelukkig bieden veel hostingproviders ook extra opslag aan in de vorm van externe volumes, blokopslag of genetwerkte bestandsopslag (NFS). Dit geeft gebruikers de mogelijkheid om geld te besparen op kleinere VPS-hosts voor hun toepassingen zonder opslag op te offeren.

Met Gitea en de mogelijkheid om te beslissen waar uw broncode wordt opgeslagen, kunt u ervoor zorgen dat uw projecten en bestanden ruimte hebben om uit te breiden. In deze tutorial gaat u een externe opslagvolume koppelen aan een aankoppelpunt en ervoor zorgen dat Gitea de juiste informatie van dat volume leest. Tegen het einde heeft u een Gitea-installatie die repositories en andere belangrijke informatie op een apart opslagvolume opslaat.

Vereisten

Voordat u begint, heeft u het volgende nodig:

Merk op dat als je Gitea hebt geïnstalleerd met een andere methode dan die in deze vereisten wordt beschreven, de namen en locaties van bepaalde bestanden en mappen op je systeem kunnen verschillen van wat in deze handleiding als voorbeeld wordt genoemd. De concepten die in deze tutorial worden beschreven, zouden echter van toepassing moeten zijn op elke Gitea-installatie.

Stap 1 — Het koppelen van een blokopslagvolume

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 zoals deze zullen zichtbaar zijn als apparaatbestanden die zijn opgeslagen binnen /dev. Deze bestanden zijn hoe de kernel communiceert met de opslagapparaten zelf; de bestanden worden feitelijk niet gebruikt voor opslag. Om bestanden op het opslagapparaat op te kunnen slaan, moet je ze koppelen met behulp van het mount-commando.

Allereerst moet je een koppelingspunt creëren — dat wil zeggen, een map die wordt geassocieerd met het apparaat, zodat gegevens die erin zijn opgeslagen, op dat apparaat terechtkomen. Koppelingspunten voor opslagapparaten zoals deze bevinden zich meestal in de /mnt-directory.

Maak een koppelingspunt met de naam gitea zoals je een normale directory zou maken met het mkdir-commando:

  1. sudo mkdir /mnt/gitea

Vanaf hier kunt u het apparaat aan die map koppelen om het te gebruiken om toegang te krijgen tot die opslagruimte. Gebruik het mount-commando om het apparaat te monteren:

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

De tekenreeks ext4 optie geeft het bestandssysteemtype aan, ext4 in dit geval, hoewel afhankelijk van het bestandssysteemtype van uw volume, het iets als xfs of nfs kan zijn; om te controleren welk type uw volume gebruikt, voert u het mount-commando uit zonder opties:

  1. mount

Dit geeft u een regel uitvoer voor elk gemonteerd bestandssysteem. Aangezien u zojuist de uwe hebt gemonteerd, zal het waarschijnlijk de laatste in de lijst zijn:

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

Dit toont aan dat het bestandssysteemtype ext4 is.

Dit commando koppelt het apparaat dat is gespecificeerd door zijn ID aan /mnt/gitea. De -o optie specificeert de opties die worden gebruikt bij het monteren. In dit geval gebruikt u de standaardopties die het monteren van een lees-/schrijfbestandssysteem mogelijk maken, en de noatime optie specificeert dat de kernel de laatste toegangstijd voor bestanden en mappen op het apparaat niet moet bijwerken om efficiënter te zijn.

Nu u uw apparaat hebt gemonteerd, blijft het gemonteerd zolang het systeem actief is. Maar zodra het systeem opnieuw wordt opgestart, zal het niet langer worden gemonteerd (hoewel de gegevens op het volume blijven), dus moet u het systeem vertellen om het volume te monteren zodra het start met behulp van het /etc/fstab (‘bestandssysteemtabel’)-bestand. Dit bestand bevat een lijst met beschikbare bestandssystemen en hun koppelingspunten in een tab-delimited formaat.

Gebruikmakend van echo en tee, voeg een nieuwe regel toe aan het einde van /etc/fstab:

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

Deze opdracht voegt de string /dev/disk/by-uid/uw_disk_id toe aan het fstab-bestand en geeft het weer op uw scherm. Net als bij de vorige mount-opdracht, koppelt het apparaat aan het aankoppelpunt met behulp van de opties defaults, nofail en noatime.

Zodra uw wijzigingen zijn aangebracht in /etc/fstab, zal de kernel uw volume bij het opstarten aankoppelen.

Opmerking: Opslagapparaten op Linux zijn zeer flexibel en komen in allerlei verschillende typen, van een genetwerkt bestandssysteem (NFS) tot een ouderwetse harde schijf. Om meer te weten te komen over blokopslag en apparaten in Linux, kunt u meer lezen over opslagconcepten in onze Inleiding tot opslagterminologie en -concepten in Linux.

Stap 2 — Gitea configureren om gegevens op te slaan op een blokopslagvolume

Gitea houdt al zijn repositories bij op een centrale locatie. Dit omvat repositories van alle gebruikers en organisaties. Tenzij anders geconfigureerd, worden alle gegevens bewaard in een enkele map. Deze map heet data in standaardinstallaties. Voor de doeleinden van deze tutorial zullen we een versie van Gitea gebruiken die wordt uitgevoerd op Docker zoals in de bovenstaande tutorial gelinkt.

Eerst gaan we een idee krijgen van wat deze gegevensdirectory bevat. Dit kun je doen door naar de gegevensdirectory te gaan en het ls-commando uit te voeren. Met het -l-formaat krijgen we meer informatie over de bestanden:

  1. cd gitea
  2. ls -l

Dit geeft een lijst zoals de volgende:

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/

Laten we de uitvoer van dit commando uitleggen. Het vermeldt één bestand of map per regel. In dit geval vermeldt het vijf mappen. De vermelding voor . is een speciale vermelding die gewoon betekent de huidige map, en .. staat voor de map één niveau hoger. Deze uitvoer laat zien dat de huidige map eigendom is van de root-gebruiker, wat in dit geval het geval is omdat Docker wordt uitgevoerd als een bevoorrechte gebruiker, en de map één niveau hoger is eigendom van sammy.

De git-map is belangrijk voor ons omdat deze alle repositories bevat die we mogelijk op een apart volume willen opslaan. Lijst de inhoud van de map op:

  1. ls -l git

Dit geeft de lange lijst van de map:

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/

Daarin zijn twee opmerkelijke mappen: de repositories-map die de door Gitea beheerde git-repositories bevat, gesorteerd op gebruiker/organisatie, en de lfs-map met gegevens voor de Large File Storage-functionaliteit van Git. De gitea-map bevat informatie die Gitea gebruikt op de achtergrond, waaronder archieven van oude repositories, evenals de database die informatie bevat zoals gebruikers- en repository-informatie die door de webservice wordt gebruikt. De ssh-map bevat verschillende SSH-sleutelparen die Gitea gebruikt.

Gezien alle informatie die is opgeslagen in deze directory belangrijk is, wilt u de volledige inhoud van de directory op ons bijgevoegde volume opnemen.

Vanaf dit punt zijn er twee paden te volgen, afhankelijk van of u werkt met een nieuwe installatie van Gitea en deze tutorial voltooit tijdens het installatieproces. In het eerste pad kunt u locaties specificeren voordat u de installatie voltooit, en in het tweede leert u hoe u een bestaande installatie kunt verplaatsen.

Het opzetten van een nieuwe installatie van Gitea

Als u begint met een gloednieuwe installatie van Gitea, kunt u tijdens het configuratieproces specificeren waar al uw informatie wordt opgeslagen. Bijvoorbeeld, als u Gitea instelt met behulp van Docker Compose, kunt u de volumes toewijzen aan uw bijgevoegde volume.

Open het bestand docker-compose.yml met uw voorkeurteksteditor. Het volgende voorbeeld gebruikt nano:

  1. nano docker-compose.yml

Zodra u het bestand open heeft, zoek dan naar de invoer volumes in het samenstelbestand en pas de mapping aan de linkerkant van de : aan om naar de juiste locaties op uw blokopslagvolume te wijzen voor de Gitea-gegevensdirectory.

docker-compose.yml
...

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

...

Als u klaar bent met het instellen van de informatie, slaat u het bestand op en sluit u het af. Als u nano gebruikt, kunt u dit doen door op CTRL + X, Y en vervolgens ENTER te drukken.

Waarschuwing: SSH-servers zoeken naar de .ssh-directory in de home directory van de Git-gebruiker (git, in dit geval). Deze directory bevat alle SSH-sleutels die Gitea zal gebruiken, dus het wordt niet aangeraden om de koppeling voor dit Docker-volume te verplaatsen. Om deze locatie op je volume te laten back-uppen, is het het beste om een andere oplossing te gebruiken zoals een cron-taak om de directory te back-uppen. Om meer te leren, bekijk deze handleiding over het gebruiken van cron om geplande taken te beheren.

Wanneer je docker-compose uitvoert en Gitea installeert, zal het jouw blokopslagvolume gebruiken om zijn gegevens op te slaan.

Als je geen Docker-volumes gebruikt om de locaties van je gegevens te beheren — bijvoorbeeld, als je Gitea op je server installeert via de binaire releases volgens deze instructies van Gitea — dan moet je de locaties in het configuratiebestand aanpassen (meestal /etc/gitea/app.ini) wanneer je alle waarden instelt en voordat je de definitieve installatiestappen in de browser uitvoert. Bijvoorbeeld, je zou ze als volgt instellen:

app.ini
...

# Als je SQLite gebruikt voor je database, moet je het PAD wijzigen
# variabele in deze sectie
[database]
...
PATH = /mnt/gitea/gitea.db

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

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

...

Opmerking: Zorg ervoor dat je git-gebruiker schrijftoegang heeft tot deze locatie. Je kunt hier meer lezen over Linux-machtigingen hier.

Het verplaatsen van een bestaande installatie van Gitea

Als je al een exemplaar van Gitea hebt geïnstalleerd en in gebruik hebt, kun je nog steeds je gegevens op een apart volume opslaan, maar het vereist enige zorg om ervoor te zorgen dat al je gegevens zowel veilig als toegankelijk blijven voor Gitea.

Opmerking: Zoals bij elke operatie die je gegevens betreft, is het belangrijk om ervoor te zorgen dat je een actuele back-up hebt van alles. In dit geval betekent dit een back-up van alle bestanden in je gegevensdirectory (de SSH-bestanden, de gitea-repositories en lfs mappen, de database, enzovoort) naar een veilige locatie.

Er zijn twee opties om uw gegevens naar een nieuw volume te verplaatsen. De eerste manier is om uw Gitea-gegevens naar een secundaire locatie te kopiëren en vervolgens de oorspronkelijke locatie om te zetten in een koppelingspunt voor uw volume. Wanneer u uw gegevens terug kopieert naar die locatie, kopieert u deze naar dat volume en zijn er geen wijzigingen vereist binnen Gitea zelf; het zal gewoon doorgaan zoals het eerder deed. Als u echter niet het hele apparaat aan die bestemming wilt koppelen (bijvoorbeeld als uw Gitea-gegevens niet het enige zijn op dat volume), dan is een tweede optie om al uw Gitea-gegevens naar een nieuwe locatie op dat volume te verplaatsen en Gitea zelf te instrueren om die locatie te gebruiken.

Ongeacht welke optie u kiest, stop eerst de Gitea-webdienst.

Als u Gitea hebt geïnstalleerd via Docker Compose, gebruik dan docker-compose om de dienst te stoppen. Terwijl u zich in dezelfde map bevindt als het docker-compose.yml-bestand, voer het volgende uit:

  1. docker-compose down

Als u het als een systemd-service hebt geïnstalleerd, gebruik dan het systemctl-commando:

  1. sudo systemctl stop gitea

Zodra Gitea is gestopt, verplaats de volledige inhoud van de gegevensmap naar het koppelingspunt dat is gemaakt in stap 1:

  1. sudo mv * /mnt/gitea

Zorg ervoor dat alle bestanden zijn verplaatst door de inhoud van de huidige map op te lijsten:

  1. ls -la

Dit zal alleen de vermeldingen van de huidige en bovenliggende map teruggeven:

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

Zodra alle gegevens zijn verplaatst, ga naar de nieuwe gegevensmap:

  1. cd /mnt/gitea

Gebruik ls om ervoor te zorgen dat alles er correct uitziet:

  1. ls -l

Dit zal de inhoud van de map tonen:

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/

Zoals eerder moet het de ssh, git en gitea mappen bevatten. Als u SQLite gebruikt als een database om Gitea te beheren, bevat het ook een bestand genaamd gitea.db in de gitea map.

Wanneer u er zeker van bent dat alle gegevens zijn verplaatst, is het tijd om het volume te koppelen aan de datamap.

Eerst gaat u naar de bovenliggende map van de datamap waarin u eerder zat. In dit voorbeeld, waarbij een installatie van Gitea wordt gebruikt met Docker Compose zoals beschreven in de tutorial die wordt genoemd in de vereisten, is dit de map die uw docker-compose.yml bestand bevat.

  1. cd ~/gitea/

Zoals eerder gebruikt u het mount commando, maar dit keer gebruikt u de zojuist geleegde map als bestemming:

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

Wanneer u nu de inhoud van die map bekijkt, zouden al uw bestanden op hun plaats moeten zijn:

  1. ls -la gitea

Dit commando zal de verwachte informatie weergeven. Let op, afhankelijk van het bestandssysteemtype van uw volume, kunt u een extra map genaamd lost+found vinden; dit is normaal en onderdeel van dagelijks gebruik van het bestandssysteem:

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/

Zoals vermeld, als u wilt dat Gitea een map binnen het blokopslagvolume gebruikt, is er een extra stap die u moet voltooien voordat u Gitea weer opstart. Stel bijvoorbeeld dat u een map met de naam scm op uw volume wilt gebruiken, gemonteerd op /mnt/gitea. Nadat u al uw Gitea-gegevens naar /mnt/gitea/scm hebt verplaatst, moet u een symbolische koppeling maken van uw oude datamap naar de nieuwe. Hiervoor gebruikt u het ln commando:

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

Op dit punt kun je Gitea opnieuw starten. Als je Gitea als een systemd-service gebruikt, voer dan het volgende uit:

  1. sudo systemctl restart gitea

Als je Gitea als een Docker-container gebruikt met Docker Compose, voer dan het volgende uit:

  1. docker-compose up -d

Nu alles draait, bezoek je Gitea-instantie in de browser en controleer of alles werkt zoals verwacht. Je zou nieuwe objecten moeten kunnen aanmaken in Gitea, zoals repositories, issues, enzovoort. Als je Gitea hebt ingesteld met een SSH-shim, zou je ook repositories moeten kunnen controleren en pushen met git clone en git push.

Conclusie

In deze tutorial heb je al je Gitea-gegevens verplaatst naar een blokopslagvolume. Dergelijke volumes zijn zeer flexibel en bieden vele voordelen, zoals de mogelijkheid om al je gegevens op grotere schijven, RAID-volumes, genetwerkte bestandssystemen op te slaan, of het gebruik van blokopslag zoals DigitalOcean Volumes om opslagkosten te verlagen. Het stelt je ook in staat om volledige schijven te snapshoten voor back-up, zodat je de inhoud kunt herstellen in geval van een catastrofale storing.

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