Wiki
Configurazione e migrazione del server
Modificare config.toml, spostare la directory dei dati, usare un database PostgreSQL altrove, eseguire backup e ripristino.
Tutto si imposta in un unico file, /etc/uversion/config.toml. L'installer lo genera; in seguito potete modificarlo liberamente.
Il file di configurazione
Modificate, poi riavviate: il server legge la sua configurazione solo all'avvio.
sudo nano /etc/uversion/config.toml
sudo systemctl restart uversion-server
Ecco i campi che finirete per toccare. È un estratto parziale: il file ne contiene altri, e alcuni campi obbligatori non compaiono qui sotto. Non sovrascrivete mai il vostro file con questo blocco, modificate solo le righe interessate.
# EXTRAIT PARTIEL : le fichier contient d'autres sections.
# N'ecrasez jamais votre fichier avec ce bloc, editez les lignes concernees.
[server]
bind_address = "0.0.0.0"
port = 8080
[database]
# Ou toute base PostgreSQL accessible : autre disque, autre machine, service manage.
url = "postgres://uversion:MOTDEPASSE@127.0.0.1:5432/uversion"
[security]
# Le secret qui signe les sessions. Obligatoire et SANS valeur par defaut :
# absent ou plus court que 32 caracteres, le serveur refuse de demarrer.
# L'installateur en genere un. Le remplacer deconnecte tout le monde une fois.
jwt_secret = "..."
[storage]
# Le contenu des fichiers (les chunks, morceaux de fichiers). C'est ce qui grossit.
path = "/var/lib/uversion/data/chunks"
[tls]
disabled = false
https_port = 8443
[licence]
key = "..."
0640 root:uversion: mantenetelo così.
Dove vivono i dati
Tre posizioni distinte, ed è il punto che sorprende di più. La terza, la configurazione, è anche quella che si dimentica nei backup:
| Che cosa | Dove |
|---|---|
| Contenuto dei file (i chunk, frammenti di file: è ciò che occupa spazio) | /var/lib/uversion/data/chunks |
| Certificato TLS, impronta del server | /var/lib/uversion/data/tls |
| Identità del server, ancoraggio della licenza | /var/lib/uversion/server-id, last-validated-at |
| Metadati (file, revisioni, utenti, blocchi, permessi, attività) | PostgreSQL: /var/lib/postgresql/16/main |
| Configurazione: chiave di licenza, segreto di firma delle sessioni, password del database | /etc/uversion/config.toml, /etc/uversion/licence-key |
Spostare la directory dei dati
È il caso comune: il contenuto cresce, la partizione di sistema è piccola. Il database, invece, resta piccolo (cresce con il numero di revisioni, non con la dimensione dei file).
1. Fermare il servizio
sudo systemctl stop uversion-server
2. Copiare la directory
È il -a che preserva permessi e proprietari. Copiare, anziché spostare, vi lascia un ritorno indietro possibile fino alla verifica finale.
sudo mkdir -p /srv/uversion
sudo rsync -a /var/lib/uversion/ /srv/uversion/
sudo chown -R uversion:uversion /srv/uversion
sudo chmod 0750 /srv/uversion
3. Puntare la configurazione sul nuovo percorso
Questo passaggio è obbligatorio e viene prima del successivo: vedete il riquadro «L'ordine conta» più in basso.
sudo sed -i 's#/var/lib/uversion#/srv/uversion#g' /etc/uversion/config.toml
4. Dichiarare il nuovo percorso all'installer
Rispondete il nuovo percorso alla domanda «Data directory». L'installer riscrive l'unità systemd a partire da questa risposta, poi riavvia il servizio.
sudo dpkg-reconfigure uversion-server
# Data directory : /srv/uversion
5. Verificare che l'unità punti davvero lì
systemctl cat uversion-server | grep -E 'WorkingDirectory|ReadWritePaths'
systemctl status uversion-server
dpkg-reconfigure, non scrivete voi stessi l'unità systemd
L'installer scrive esso stesso /etc/systemd/system/uversion-server.service.d/10-data-dir.conf, e la riscrive a ogni configurazione a partire dalla risposta che gli avete dato. Un file posato a mano vi sopravvive fino all'aggiornamento successivo, compreso quello attivato dal pulsante Update now: l'unità torna allora a puntare sulla vecchia cartella mentre la configurazione scrive nella nuova. Il servizio irrobustito (ProtectSystem=strict) si avvia normalmente, e si rompe al primo invio di file, settimane dopo.
config.toml prima
dpkg-reconfigure da solo non basta. L'installer corregge [storage].path solo se la cartella che vi trova non esiste più: un percorso personalizzato ancora presente è considerato una scelta deliberata e lasciato com'è. Poiché avete copiato anziché spostato, la vecchia cartella esiste ancora, e il passaggio 2 qui sopra è dunque obbligatorio. Una volta verificato tutto e con il server in servizio sul nuovo percorso, potete eliminare la vecchia cartella.
ProtectHome=true, e una directory personale non è attraversabile da un account di sistema). Un percorso sotto /home o /root impedisce l'avvio (226/NAMESPACE o 200/CHDIR). Scegliete un percorso di sistema: /srv, /opt, o un disco montato.
Mettere il database altrove
L'installer crea un database locale, ma nulla vi obbliga a usarlo. Puntate url su qualsiasi database PostgreSQL raggiungibile: un altro disco montato come cluster separato, un'altra macchina, o un servizio gestito.
[database]
url = "postgres://UTILISATEUR:MOTDEPASSE@HOTE:5432/BASE"
Poi riavviate. Il server applica le sue migrazioni all'avvio: aggiorna da solo la struttura del suo database. Un database vuoto viene inizializzato, uno più vecchio viene aggiornato, non avete nulla da lanciare a mano.
Basta semplicemente che il ruolo indicato possa creare tabelle nel database di destinazione.
Database sul disco dati
La sezione precedente presuppone un database che amministrate altrove. Se il vostro obiettivo è diverso: che un solo disco superstite basti a rimettere in piedi il server quando la macchina muore, allora l'installer può collocare il database dentro la directory dei dati, sotto forma di un cluster PostgreSQL dedicato: un'istanza PostgreSQL a parte, con la propria cartella e la propria porta, indipendente da quella del sistema.
La domanda viene posta all'installazione. Per attivarla su un server Debian già presente:
sudo dpkg-reconfigure uversion-server
# Data directory : /srv/uversion
# Put the database on the data directory too? Yes
Su Windows
Stessa promessa, meccanica diversa. Windows non ha cluster con nome: l'installer sposta l'istanza PostgreSQL stessa sulla directory dei dati, ripuntando il servizio. Questa scelta si fa al momento dell'installazione, aggiungendo -DbOnDataDir ai parametri dello script. Non viene proposta da una domanda: lo script chiede solo il codice di attivazione, quindi se non passate questo parametro, il database resterà nella sua posizione predefinita. Vedete Installare su Windows per la forma esatta del comando, tenendo presente che il one-liner non può ricevere alcun parametro.
# PowerShell en administrateur, installation en ligne de commande
& ([scriptblock]::Create((iwr https://uversion.io/downloads/server/install.ps1 -UseBasicParsing).Content)) `
-LicenceKey "UV-XXXX-XXXX-XXXX" -DataDir "D:\uVersion" -DbOnDataDir
# verifier ensuite ou pointe le service PostgreSQL
(Get-CimInstance Win32_Service -Filter "Name='postgresql-x64-16'").PathName
Lo spostamento viene rifiutato, con il motivo visualizzato, se l'istanza ospita database diversi da quello di uVersion, o se la sua directory non è autonoma: presenza di un tablespace, un pg_wal spostato tramite una giunzione, o un percorso assoluto scritto in postgresql.conf. Nulla viene mai eliminato: l'installer copia, verifica, avvia il servizio sulla nuova copia, e solo dopo rinomina la vecchia directory.
RequiresMountsFor. Un disco esterno arrivato in ritardo è quindi recuperato dalle azioni di ripristino del servizio, non da una dipendenza. E PostgreSQL non verifica alcun permesso sulla sua directory sotto Windows: è l'installer a restringerli, non c'è rete di sicurezza dal lato del server.
Il disco contiene allora tutto:
/srv/uversion/
├── data/chunks contenu des fichiers
├── data/tls certificat, empreinte
├── pgdata/16 LA BASE (cluster PostgreSQL dedie)
└── recovery/ procedure + fichiers necessaires a la reprise
├── RESTORE.md
├── pgconf/ postgresql.conf, pg_hba.conf, pg_ident.conf
├── etc/ copie de config.toml et du mot de passe
└── cluster.env
Il cluster riceve la propria porta, assegnata automaticamente (5433 se è libera), e config.toml viene aggiornato per puntarla. Il cluster di sistema non viene toccato: può continuare a ospitare altri database.
pg_dump, creazione del cluster, ripristino, aggiornamento di url).
Rimettere in piedi il server su una macchina nuova
Il disco non contiene i software: prevedete PostgreSQL e il pacchetto uVersion, di cui una copia conservata accanto al disco evita una brutta sorpresa il giorno in cui serve.
# sur la machine neuve
sudo apt install postgresql-16
# montez le disque, par exemple sur /srv/uversion
sudo apt install ./uversion-server_*.deb
# dossier de donnees : le point de montage du disque
# base sur le dossier de donnees : oui
L'installer trova il database sul disco, rimette a posto i file di configurazione di PostgreSQL (che pg_createcluster aveva spostato fuori dalla directory, sul disco di sistema), registra il cluster, corregge i proprietari, poi riallinea la porta e il percorso dei chunk in config.toml. Se il disco viene rimontato su un punto di montaggio diverso da prima, basta indicare il nuovo percorso.
La procedura completa, compresa la variante senza reinstallazione, è scritta sul disco stesso: recovery/RESTORE.md.
Backup e ripristino
Un backup completo sono tre elementi: l'esportazione del database (il dump), la directory dei dati e la directory di configurazione.
Fare il backup del database
I metadati: file, revisioni, utenti, blocchi.
sudo -u postgres pg_dump uversion > uversion-$(date +%F).sql
Fare il backup della directory dei dati
Il contenuto dei file, cioè ciò che occupa spazio.
sudo tar -C /var/lib/uversion -czf uversion-data-$(date +%F).tar.gz .
Fare il backup della configurazione
Chiave di licenza, segreto di firma delle sessioni, password del database. Non vive nella directory dei dati.
sudo tar -C /etc -czf uversion-etc-$(date +%F).tar.gz uversion
/etc/uversion
È il terzo elemento, e il più facile da dimenticare: non vive nella directory dei dati. /etc/uversion/config.toml porta la chiave di licenza, il segreto che firma le sessioni e la password del database; /etc/uversion/licence-key porta la licenza stessa. Senza di essi, un ripristino su una macchina nuova riparte con un segreto nuovo, quindi tutta la squadra viene disconnessa in un colpo solo, e bisogna richiedere una licenza: il codice di attivazione ricevuto all'iscrizione è a uso unico e già consumato, solo la chiave di licenza che ha prodotto si riutilizza.
Per ripristinare su una macchina nuova: installate il pacchetto, poi rimettete a posto i tre elementi, in questo ordine.
1. Ripristinare il database
sudo -u postgres createdb -O uversion uversion # seulement si elle n'existe pas
sudo -u postgres psql uversion < sauvegarde.sql
2. Ripristinare i dati
Rimettere i chunk, con i permessi corretti:
sudo rsync -a /mnt/backup/uversion/ /var/lib/uversion/
sudo chown -R uversion:uversion /var/lib/uversion
sudo chmod 0750 /var/lib/uversion
3. Riportare due righe di configurazione
Non il file intero: quello che l'installer ha appena scritto porta la password del database che ha ridefinito esso stesso.
# N'ECRASEZ PAS le fichier neuf : ouvrez l'ancien a cote et recopiez-en
# deux lignes, et deux seulement.
# [security] jwt_secret -> sinon toute l'equipe est deconnectee
# [licence] key -> sinon il faut redemander une licence
# Gardez le [database] url que l'installateur vient d'ecrire : il porte le
# mot de passe qu'il a lui-meme redefini.
sudo nano /etc/uversion/config.toml
4. Riavviare
sudo systemctl restart uversion-server
uversion, lo riutilizza così com'è e si limita a reimpostare la password del ruolo. Potete quindi ripristinare il vostro dump prima, e installare dopo.
Spostare il cluster PostgreSQL
Raramente necessario: il database è piccolo. Se ci tenete, è un'operazione PostgreSQL standard, non qualcosa che gestisce l'installer di uVersion. Attenzione: questo cluster (l'istanza PostgreSQL del sistema, con la sua cartella e la sua porta) può ospitare database diversi da quello di uVersion.
sudo systemctl stop uversion-server
sudo pg_ctlcluster 16 main stop
sudo mkdir -p /srv/pgdata
sudo rsync -a /var/lib/postgresql/16/main/ /srv/pgdata/16/main/
sudo chown -R postgres:postgres /srv/pgdata
sudo sed -i "s#^data_directory =.*#data_directory = '/srv/pgdata/16/main'#" \
/etc/postgresql/16/main/postgresql.conf
sudo pg_ctlcluster 16 main start
sudo systemctl start uversion-server
Verificate poi con pg_lsclusters che il cluster sia in linea sul nuovo percorso.