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:
- Een Ubuntu 20.04-server opgezet volgens onze initiële serverinstallatiehandleiding voor Ubuntu 20.04, met een niet-root-gebruiker met sudo-rechten en een ingeschakelde firewall.
- Een externe volume zoals een NFS- of blokopslagvolume. Als je een blokopslagvolume van DigitalOcean wilt instellen, volg dan onze productdocumentatie.
- Een installatie van Gitea op die server toegankelijk via een domeinnaam. Deze handleiding gaat ervan uit dat je Gitea hebt geïnstalleerd op Docker, zoals beschreven in onze tutorial over Hoe Gitea te installeren op Ubuntu 20.04. Merk op dat je Docker en Docker Compose geïnstalleerd moet hebben op je server. Je kunt deze tools installeren door de stappen in deze tutorials te volgen:
- Stappen 1 en 2 van Hoe Docker te installeren en gebruiken op Ubuntu 20.04
- Stap 1 van Hoe Docker Compose te installeren en gebruiken op Ubuntu 20.04
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:
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:
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:
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
:
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:
Dit geeft een lijst zoals de volgende:
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/
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:
Dit geeft de lange lijst van de map:
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/
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
:
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.
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:
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:
Als u het als een systemd-service hebt geïnstalleerd, gebruik dan het systemctl
-commando:
Zodra Gitea is gestopt, verplaats de volledige inhoud van de gegevensmap naar het koppelingspunt dat is gemaakt in stap 1:
Zorg ervoor dat alle bestanden zijn verplaatst door de inhoud van de huidige map op te lijsten:
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:
Gebruik ls
om ervoor te zorgen dat alles er correct uitziet:
Dit zal de inhoud van de map tonen:
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/
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.
Zoals eerder gebruikt u het mount
commando, maar dit keer gebruikt u de zojuist geleegde map als bestemming:
Wanneer u nu de inhoud van die map bekijkt, zouden al uw bestanden op hun plaats moeten zijn:
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:
Op dit punt kun je Gitea opnieuw starten. Als je Gitea als een systemd-service gebruikt, voer dan het volgende uit:
Als je Gitea als een Docker-container gebruikt met Docker Compose, voer dan het volgende uit:
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.