Come memorizzare i repository di Gitea su un volume separato

Introduzione

Gitea è un repository di codice sorgente basato sul sistema di controllo versione Git. Mentre ci sono diverse soluzioni auto-ospitate disponibili come GitLab e Gogs, Gitea ha il vantaggio di essere leggero, il che significa che può essere eseguito su un server relativamente piccolo.

Tuttavia, avere un server piccolo, specialmente nel campo dei VPS, spesso significa essere limitati nello spazio. Fortunatamente, molti fornitori di hosting offrono anche spazio di archiviazione aggiuntivo sotto forma di volumi esterni, storage a blocchi o archiviazione file in rete (NFS). Ciò dà agli utenti la possibilità di risparmiare su host VPS più piccoli per le loro applicazioni senza sacrificare lo spazio di archiviazione.

Con Gitea e la possibilità di decidere dove viene archiviato il tuo codice sorgente, puoi garantire che i tuoi progetti e file abbiano spazio per espandersi. In questo tutorial, monterai un volume di archiviazione esterno su un punto di montaggio e ti assicurerai che Gitea stia leggendo le informazioni appropriate da quel volume. Alla fine, avrai un’installazione di Gitea che memorizza repository e altre informazioni importanti su un volume di archiviazione separato.

Prerequisiti

Prima di iniziare, avrai bisogno dei seguenti:

Nota che se hai installato Gitea usando un metodo diverso da quello descritto in questi prerequisiti, i nomi e le posizioni di determinati file e directory nel tuo sistema potrebbero essere diversi da quelli menzionati negli esempi di questa guida. Tuttavia, i concetti illustrati in questo tutorial dovrebbero essere applicabili a qualsiasi installazione di Gitea.

Passo 1 — Montaggio di un Volume di Archiviazione a Blocchi

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.

Volumi come questi saranno visibili come file di dispositivo memorizzati all’interno di /dev. Questi file sono il modo in cui il kernel comunica con i dispositivi di archiviazione stessi; i file non vengono effettivamente utilizzati per l’archiviazione. Per poter archiviare file sul dispositivo di archiviazione, dovrai montarli utilizzando il comando mount.

Prima, dovrai creare un punto di montaggio — cioè, una cartella che sarà associata al dispositivo, in modo che i dati memorizzati al suo interno finiscano per essere archiviati su quel dispositivo. I punti di montaggio per dispositivi di archiviazione come questo di solito risiedono nella directory /mnt.

Crea un punto di montaggio chiamato gitea come faresti con una normale directory utilizzando il comando mkdir:

  1. sudo mkdir /mnt/gitea

Da qui, puoi montare il dispositivo su quella directory per utilizzarlo per accedere a quello spazio di archiviazione. Usa il comando mount per montare il dispositivo:

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

La stringa ext4 specifica il tipo di sistema di file, ext4 in questo caso, anche se a seconda del tipo di sistema di file del tuo volume, potrebbe essere qualcosa come xfs o nfs; per verificare quale tipo usa il tuo volume, esegui il comando mount senza opzioni:

  1. mount

Questo ti fornirà una riga di output per ogni sistema di file montato. Poiché hai appena montato il tuo, probabilmente sarà l’ultimo nell’elenco:

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

Questo mostra che il tipo di sistema di file è ext4.

Questo comando monta il dispositivo specificato dal suo ID su /mnt/gitea. L’opzione -o specifica le opzioni utilizzate durante il montaggio. In questo caso, stai usando le opzioni predefinite che consentono il montaggio di un sistema di file in lettura/scrittura, e l’opzione noatime specifica che il kernel non deve aggiornare l’ultima data di accesso per file e directory sul dispositivo per essere più efficiente.

Ora che hai montato il tuo dispositivo, rimarrà montato finché il sistema sarà acceso e in esecuzione. Tuttavia, non appena il sistema si riavvia, non sarà più montato (anche se i dati rimarranno sul volume), quindi dovrai dire al sistema di montare il volume non appena si avvia utilizzando il file /etc/fstab (‘tabella dei sistemi di file’). Questo file elenca i sistemi di file disponibili e i loro punti di montaggio in un formato delimitato da tabulazioni.

Usando echo e tee, aggiungi una nuova riga alla fine di /etc/fstab:

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

Questo comando aggiunge la stringa /dev/disk/by-uid/your_disk_id al file fstab e lo stampa sullo schermo. Come per il precedente comando mount, monta il dispositivo sul punto di montaggio utilizzando le opzioni defaults, nofail e noatime.

Una volta apportate le modifiche a /etc/fstab, il kernel monterà il tuo volume all’avvio.

Nota: I dispositivi di archiviazione su Linux sono molto flessibili e disponibili in tutti i tipi diversi, da un file system di rete (NFS) a un semplice vecchio disco rigido. Per saperne di più su storage di blocchi e dispositivi su Linux, puoi leggere di più sui concetti di archiviazione nella nostra Introduzione alla Terminologia e ai Concetti di Archiviazione in Linux.

Passaggio 2 — Configurazione di Gitea per Archiviare Dati su un Volume di Archiviazione di Blocchi

Gitea mantiene tutti i suoi repository in una posizione centrale. Questo include i repository di tutti gli utenti e delle organizzazioni. A meno che non sia configurato diversamente, tutte le informazioni sono conservate in una singola directory. Questa directory è denominata data nelle installazioni predefinite. Ai fini di questo tutorial, utilizzeremo una versione di Gitea in esecuzione su Docker come nel tutorial collegato sopra.

Prima di tutto, cerchiamo di capire cosa contiene questa directory dei dati. Puoi farlo spostandoti nella directory dei dati ed eseguendo il comando ls. Utilizzando il formato -l ci fornirà più informazioni sui file:

  1. cd gitea
  2. ls -l

Questo fornirà un elenco simile al seguente:

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/

Analizziamo l’output di questo comando. Elenca un file o una directory per riga. In questo caso, elenca cinque directory. L’ingresso per . è un’voce speciale che significa semplicemente la directory corrente, e .. sta per la directory un livello sopra. Questo output mostra che la directory corrente è di proprietà dell’utente root, che è il caso in questo esempio perché Docker viene eseguito come utente privilegiato, e la directory un livello sopra è di proprietà di sammy.

La directory git è importante per noi perché contiene tutti i repository che potremmo voler memorizzare su un volume separato. Elenca i contenuti della directory:

  1. ls -l git

Questo fornirà l’elenco dettagliato della directory:

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/

All’interno ci sono due directory degne di nota: la directory repositories che contiene i repository git gestiti da Gitea ordinati per utente/organizzazione, e la directory lfs che contiene dati per la funzionalità di archiviazione file di grandi dimensioni di Git. La directory gitea contiene informazioni che Gitea utilizza sullo sfondo, compresi gli archivi dei vecchi repository, nonché il database che contiene informazioni come utenti e informazioni sui repository utilizzate dal servizio web. La directory ssh contiene varie coppie di chiavi SSH che Gitea utilizza.

Dato che tutte le informazioni memorizzate in questa directory sono importanti, vorrai includere i contenuti dell’intera directory sul nostro volume allegato.

Ci sono due percorsi da seguire da questo punto, a seconda che tu stia lavorando con una nuova installazione di Gitea e completando questo tutorial durante il processo di installazione. Nel primo percorso, sarai in grado di specificare le posizioni prima di completare l’installazione, e nel secondo, imparerai come spostare un’installazione esistente.

Configurazione di una nuova installazione di Gitea

Se stai iniziando con una nuova installazione di Gitea, puoi specificare dove vengono memorizzate tutte le tue informazioni durante il processo di configurazione. Ad esempio, se stai configurando Gitea usando Docker Compose, puoi mappare i volumi sul tuo volume allegato.

Apri il file docker-compose.yml con il tuo editor di testo preferito. L’esempio seguente utilizza nano:

  1. nano docker-compose.yml

Una volta che hai il file aperto, cerca la voce volumes nel file di composizione e modifica la mappatura sul lato sinistro dei due punti : per puntare alle posizioni appropriate sul tuo volume di archiviazione a blocchi per la directory dei dati di Gitea.

docker-compose.yml
...

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

...

Quando hai finito di impostare le informazioni, salva e chiudi il file. Se stai utilizzando nano, puoi farlo premendo CTRL + X, Y, e poi ENTER.

Avviso: I server SSH cercano la directory .ssh nella directory home dell’utente Git (git, in questo caso). Questa directory contiene tutte le chiavi SSH che Gitea utilizzerà, quindi non è consigliabile spostare il mount per questo volume Docker. Per avere questa posizione salvata nel tuo volume, sarebbe meglio utilizzare un’altra soluzione come un lavoro cron per fare il backup della directory. Per saperne di più, consulta questo tutorial sull’uso di cron per gestire le attività pianificate.

Quando esegui docker-compose e Gitea si installa, utilizzerà il tuo volume di archiviazione a blocchi per memorizzare i suoi dati.

Se non stai utilizzando volumi Docker per gestire le posizioni dei tuoi dati — ad esempio, se stai installando Gitea sul tuo server tramite le release binarie secondo queste istruzioni da Gitea — allora dovrai modificare le posizioni all’interno del file di configurazione (di solito /etc/gitea/app.ini) quando stai impostando tutti i valori e prima di eseguire i passaggi finali di installazione nel browser. Ad esempio, potresti impostarli come segue:

app.ini
...

# Se stai utilizzando SQLite per il tuo database, dovrai modificare il percorso
# variabile in questa sezione
[database]
...
PATH = /mnt/gitea/gitea.db

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

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

...

Nota: Assicurati che il tuo utente git abbia accesso in scrittura a questa posizione. Puoi leggere informazioni sulle autorizzazioni di Linux qui.

Spostamento di un’installazione esistente di Gitea

Se hai già un’istanza di Gitea installata e in esecuzione, sarai comunque in grado di archiviare i tuoi dati su un volume separato, ma sarà necessario fare attenzione affinché tutti i tuoi dati rimangano sia sicuri che accessibili a Gitea.

Nota: Come per qualsiasi operazione che coinvolga i tuoi dati, è importante assicurarsi di avere un backup aggiornato di tutto. In questo caso, ciò significa un backup di tutti i file nella tua directory dei dati (i file SSH, le directory gitea-repositories e lfs, il database, e così via) in una posizione sicura.

Ci sono due opzioni per spostare i tuoi dati su un nuovo volume. Il primo modo è copiare i tuoi dati di Gitea in una posizione secondaria, quindi trasformare la posizione originale in un punto di montaggio per il tuo volume. Quando copi i tuoi dati in quella posizione, li copierai su quel volume e non saranno necessarie modifiche all’interno di Gitea stesso; continuerà semplicemente come prima. Tuttavia, se non desideri montare l’intero dispositivo in quella destinazione (ad esempio, se i tuoi dati di Gitea non saranno l’unica cosa su quel volume), allora una seconda opzione è spostare tutti i tuoi dati di Gitea in una nuova posizione su quel volume e istruire Gitea stesso a utilizzare quella posizione.

Indipendentemente dall’opzione che scegli, prima fermare il servizio web di Gitea.

Se hai installato Gitea tramite Docker Compose, utilizza docker-compose per fermare il servizio. Mentre sei nella stessa directory contenente il file docker-compose.yml, esegui:

  1. docker-compose down

Se l’hai installato come servizio systemd, utilizza il comando systemctl:

  1. sudo systemctl stop gitea

Una volta che Gitea è stato arrestato, sposta l’intero contenuto della directory dei dati nel punto di montaggio creato nel Passaggio 1:

  1. sudo mv * /mnt/gitea

Assicurati che tutti i file siano stati spostati elencando il contenuto della directory corrente:

  1. ls -la

Questo restituirà solo le voci della directory corrente e quella genitore:

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

Una volta spostati tutti i dati, passa alla nuova directory dei dati:

  1. cd /mnt/gitea

Usando ls, assicurati che tutto sembri corretto:

  1. ls -l

Questo mostrerà il contenuto della directory:

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/

Come prima, dovrebbe contenere le directory ssh, git e gitea. Se stai utilizzando SQLite come database per gestire Gitea, conterrà anche un file chiamato gitea.db nella directory gitea.

Quando sei sicuro che tutti i dati sono stati spostati, è il momento di montare il volume sulla directory dei dati.

Innanzitutto, spostati nella directory principale della directory dei dati in cui eri precedentemente. In questo esempio di un’installazione di Gitea utilizzando Docker Compose come descritto nel tutorial collegato nei prerequisiti, questa è la directory che contiene il tuo file docker-compose.yml.

  1. cd ~/gitea/

Come prima, usa il comando mount, ma questa volta, utilizza la directory appena svuotata come destinazione:

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

Ora, quando elenchi i contenuti di quella directory, tutti i tuoi file dovrebbero essere al loro posto:

  1. ls -la gitea

Questo comando restituirà le informazioni attese. Nota che, a seconda del tipo di file system del tuo volume, potresti trovare una directory aggiuntiva chiamata lost+found; questo è normale e fa parte dell’uso quotidiano del file system:

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/

Come accennato, se desideri che Gitea utilizzi una directory all’interno del volume di memorizzazione a blocchi, c’è un passaggio aggiuntivo che devi completare prima di riavviare Gitea. Ad esempio, diciamo che vuoi utilizzare una cartella chiamata scm sul tuo volume montato su /mnt/gitea. Dopo aver spostato tutti i tuoi dati di Gitea in /mnt/gitea/scm, dovrai creare un collegamento simbolico dalla tua vecchia directory dei dati alla nuova. Per questo utilizzerai il comando ln:

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

A questo punto, puoi riavviare Gitea. Se stai utilizzando Gitea come servizio systemd, esegui:

  1. sudo systemctl restart gitea

Se stai eseguendo Gitea come container Docker utilizzando Docker Compose, esegui:

  1. docker-compose up -d

Ora che tutto è attivo e funzionante, visita la tua istanza di Gitea nel browser e assicurati che tutto funzioni come previsto. Dovresti essere in grado di creare nuovi oggetti in Gitea come repository, problemi, e così via. Se hai configurato Gitea con uno shim SSH, dovresti anche essere in grado di fare il checkout e il push ai repository utilizzando git clone e git push.

Conclusione

In questo tutorial, hai spostato tutti i tuoi dati di Gitea su un volume di archiviazione a blocchi. I volumi come questi sono molto flessibili e forniscono molti vantaggi, come consentire di memorizzare tutti i tuoi dati su dischi più grandi, volumi RAID, sistemi di file in rete o utilizzando archiviazione a blocchi come i Volumi DigitalOcean per ridurre le spese di archiviazione. Ti consente inoltre di fare snapshot di interi dischi per il backup in modo da poter ripristinare i loro contenuti in caso di guasto catastrofico.

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