Wiki
Distribuire con Docker
Il server uVersion e PostgreSQL in container, chiavi in mano: scaricare l'immagine, caricarla, configurare .env, avviare. Posizione di dati e database configurabile.
Un'alternativa al pacchetto .deb: il server uVersion e il suo database
PostgreSQL girano in container, avviati da un solo docker compose up. Ideale
se preferisci un deployment containerizzato, o per provarlo rapidamente.
Prerequisiti: Docker Engine 20.10+ con il plugin Compose v2
(docker compose version) e una chiave di licenza uVersion. Il server si rifiuta
di avviarsi senza una chiave valida e firmata: recuperala dal
tuo account (oppure richiedine una dalla
pagina di registrazione).
docker con podman in tutti i comandi di questa
pagina: podman compose pull, podman load -i,
podman compose up -d. Il docker-compose.yml fornito etichetta già
i suoi mount per SELinux (il controllo degli accessi attivo per impostazione predefinita su
Red Hat, Rocky, Alma e Fedora), con il suffisso :z. Senza questa etichetta, al
container viene negato l'accesso alle directory montate, e il messaggio somiglia più a un
database corrotto che a un problema di permessi.
Installare
1. Recuperare il compose e il modello di ambiente
Due file, in una cartella nuova che diventerà quella dello stack: il
docker-compose.yml e il modello .env.
mkdir uversion && cd uversion
wget -N -O docker-compose.yml https://uversion.io/downloads/server/docker/docker-compose.yml
wget -N -O .env https://uversion.io/downloads/server/docker/env.example
2. Recuperare l'immagine
Online, il registry basta:
docker compose pull
Senza accesso a Internet (rete isolata), scarica invece l'archivio e caricalo: porta lo stesso nome di immagine del compose, quindi l'avvio la trova senza scaricare nulla.
wget -N https://uversion.io/downloads/server/docker/uversion-server_latest_docker.tar.gz
docker load -i uversion-server_latest_docker.tar.gz
3. Compilare .env
Due valori sono obbligatori: UVERSION_LICENCE__KEY (la tua chiave di
licenza, la lunga stringa firmata ricevuta via e-mail) e POSTGRES_PASSWORD (una
password robusta per il database incluso).
nano .env
Il segreto che firma le sessioni viene generato al primo avvio e
conservato nella directory dei dati. Non devi inserire nulla. Fa parte del backup: se
sparisce, ognuno dovrà riconnettersi una volta, non si perde nulla. Se preferisci fissare il
tuo (minimo 32 caratteri), compila UVERSION_SECURITY__JWT_SECRET in
.env: viene effettivamente passato al container, che allora lo usa invece di
generarne uno.
POSTGRES_PASSWORD viene applicata solo alla creazione del database, quando la
sua directory è vuota. Modificarla in seguito in .env non cambia nulla dal lato
PostgreSQL, che tiene la vecchia, mentre il server presenta la nuova: la connessione si
rompe senza che il messaggio lo spieghi. Per cambiarla davvero, cambiala da entrambi i
lati:
# Changer reellement le mot de passe de la base
docker compose exec db psql -U uversion -c "ALTER USER uversion PASSWORD 'nouveau-mot-de-passe'"
# Puis reporter la MEME valeur dans POSTGRES_PASSWORD (.env) et relancer
docker compose up -d
.env insieme ai tuoi dati
Contiene la chiave di licenza e la password del database, e vive accanto al
docker-compose.yml, non nei volumi. Perdere la macchina conservando i dischi
dei dati lascia un database che nessuno può indirizzare e una licenza da richiedere di
nuovo: il codice di attivazione ricevuto alla registrazione è monouso e già
consumato, solo la chiave di licenza che ha prodotto è riutilizzabile, ed è quella
che si trova qui. Tratta questo file come un segreto: chmod 600, e nello stesso
backup del database e dei chunk (i frammenti di file, ciò che occupa lo spazio).
4. Avviare lo stack
docker compose up -d
Il server è allora raggiungibile su https://YOUR-HOST:8443. Non è richiesto
alcun dominio né certificato Let’s Encrypt: se ne occupa il modello TOFU, ossia la fiducia al
primo contatto, come SSH quando ti fa convalidare l'impronta di una macchina la prima
volta.
5. Rilevare l'impronta del server
Viene riscritta nei registri a ogni avvio:
# L'empreinte du serveur, reecrite dans les journaux a chaque demarrage
docker compose logs server | grep -i "TLS fingerprint"
È l'impronta del server (SHA-256 del suo certificato): il server serve HTTPS autofirmato sulla porta 8443, e ogni client la conferma alla prima connessione. Condividila con il tuo team (vedi Impronta TLS). Non confonderla con una somma di controllo, che serve a verificare un file scaricato: questa identifica il tuo server.
6. Rilevare la password amministratore iniziale
Accedi come admin con questa password, poi cambiala. Il file viene eliminato
non appena la cambi.
# Le mot de passe admin initial (le fichier disparait des que vous le changez)
docker compose exec server cat /data/initial-admin-password
Per seguire l'avvio in diretta, docker compose logs -f server va bene, ma non
metterlo in mezzo a una sequenza di comandi: il -f segue i registri
indefinitamente e non restituisce mai il controllo (Ctrl + C per
uscire).
Dati e database
Tutto lo stato del server (store dei chunk, certificato TLS e quindi l'impronta, identità
del server) vive in una directory dell'host, e il database PostgreSQL in un'altra. Entrambi
si impostano in .env:
# Dans .env : placer les donnees et la base sur un disque large et sauvegarde
UVERSION_DATA_DIR=/srv/uversion/data # chunks, cert TLS, identite serveur
UVERSION_DB_DIR=/srv/uversion/db # PostgreSQL fourni
Per un deployment vero, punta UVERSION_DATA_DIR verso un disco ampio e con
backup: i chunk binari di un progetto Unreal possono essere voluminosi. Il container regola da
solo i permessi della directory montata (parte come root giusto il tempo di correggere la
proprietà, poi scende a un utente non privilegiato), quindi non devi fare alcun
chown in anticipo.
Per usare un PostgreSQL esterno già in essere, compila
UVERSION_DATABASE__URL in .env, poi rimuovi il servizio
db e il blocco depends_on nel docker-compose.yml.
# Dans .env : brancher un PostgreSQL existant
UVERSION_DATABASE__URL=postgres://user:motdepasse@db.interne:5432/uversion
Spostare dati e database
Il caso più semplice è impostare le due variabili prima del primo
up: non esiste ancora nulla, non c'è niente da copiare. Se lo stack è
già in esecuzione, bisogna fermarlo e copiare le directory a mano, preservando i
proprietari.
1. Fermare lo stack
Nulla deve scrivere durante la copia:
docker compose down
2. Copiare le due directory
È il -a a preservare proprietari e permessi:
sudo rsync -a ./data/server/ /srv/uversion/data/
sudo rsync -a ./data/db/ /srv/uversion/db/
3. Puntare .env alla nuova posizione
# Dans .env, LES DEUX lignes, pas une seule
UVERSION_DATA_DIR=/srv/uversion/data
UVERSION_DB_DIR=/srv/uversion/db
4. Riavviare
docker compose up -d
UVERSION_DB_DIR che punta a una directory vuota dà un database
vergine: PostgreSQL lo inizializza senza battere ciglio, e ottieni uno store di chunk pieno
associato a un database senza alcun metadato.
Tre trappole di percorso, tutte incontrate:
- Un percorso relativo è risolto rispetto al file compose, non rispetto
alla directory da cui lanci il comando.
./data/serverdesigna sempre il vicino deldocker-compose.yml. - Una condivisione di rete (NFS, CIFS, una condivisione Windows) rifiuta in genere
il
chownche il container effettua all'avvio. Il container esce allora immediatamente, con un errore di permessi che non menziona né uVersion né lo storage. Usa un disco locale o un volume a blocchi. rsync -aè ciò che preserva proprietari e permessi. Una copia fatta concpsenza opzioni, o da un file manager, riporta tutto all'account corrente, e PostgreSQL si rifiuta allora di avviarsi sulla propria directory.
Operatività
Backup: il database
Porta i metadati: file, revisioni, utenti, blocchi.
docker compose exec db pg_dump -U uversion uversion > uversion-db.sql
Backup: i dati del server
È la directory dell'host designata da UVERSION_DATA_DIR. Entrambi i backup
contano: l'uno senza l'altro non ripristina nulla.
# .env n'est pas charge dans votre shell, chargez-le pour reutiliser la variable
set -a; . ./.env; set +a
DATA_DIR="$UVERSION_DATA_DIR"
[ -n "$DATA_DIR" ] || DATA_DIR=./data/server # valeur par defaut
tar czf uversion-data.tar.gz -C "$DATA_DIR" .
Aggiornare
I dati e il database non vengono toccati, le migrazioni si applicano all'avvio.
docker compose pull
docker compose up -d # les migrations s'appliquent au demarrage
Su una rete isolata, carica invece un archivio più recente:
wget -N https://uversion.io/downloads/server/docker/uversion-server_latest_docker.tar.gz
docker load -i uversion-server_latest_docker.tar.gz
docker compose up -d
Fermare
docker compose stop ferma i container, docker compose down li
rimuove. In entrambi i casi i tuoi dati restano al loro posto.
down -v qui non cancella nulla
Il compose pubblicato non usa alcun volume con nome: i tuoi dati e il tuo database sono
nelle due directory dell'host designate da .env. Né down né
down -v le tocca. Per ripartire davvero da zero, devi eliminare tu stesso queste
directory. È importante saperlo: il riflesso, dopo un fallimento di autenticazione, è
lanciare down -v e poi up, e ciò riporta esattamente allo stesso
errore, con lo stesso database e la stessa password.