Wiki
Serverkonfiguration & Migration
config.toml bearbeiten, das Datenverzeichnis verschieben, eine PostgreSQL-Datenbank anderswo nutzen, sichern und wiederherstellen.
Alles wird in einer einzigen Datei eingestellt, /etc/uversion/config.toml. Der Installer erzeugt sie; danach können Sie sie frei bearbeiten.
Die Konfigurationsdatei
Bearbeiten, dann neu starten: Der Server liest seine Konfiguration nur beim Start.
sudo nano /etc/uversion/config.toml
sudo systemctl restart uversion-server
Hier sind die Felder, die Sie anfassen werden. Dies ist ein Teilauszug: Die Datei enthält weitere Abschnitte, und einige Pflichtfelder erscheinen unten nicht. Überschreiben Sie Ihre Datei niemals mit diesem Block, bearbeiten Sie nur die betreffenden Zeilen.
# 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: Belassen Sie es so.
Wo die Daten liegen
Drei verschiedene Orte, und das ist der Punkt, der am meisten überrascht. Der dritte, die Konfiguration, wird bei Sicherungen auch am ehesten vergessen:
| Was | Wo |
|---|---|
| Dateiinhalt (die Chunks, Dateistücke: das ist es, was den Platz belegt) | /var/lib/uversion/data/chunks |
| TLS-Zertifikat, Server-Fingerabdruck | /var/lib/uversion/data/tls |
| Serveridentität, Lizenzanker | /var/lib/uversion/server-id, last-validated-at |
| Metadaten (Dateien, Revisionen, Benutzer, Sperren, Berechtigungen, Aufgaben) | PostgreSQL: /var/lib/postgresql/16/main |
| Konfiguration: Lizenzschlüssel, Sitzungssignatur-Geheimnis, Datenbankpasswort | /etc/uversion/config.toml, /etc/uversion/licence-key |
Das Datenverzeichnis verschieben
Das ist der übliche Fall: Der Inhalt wächst, die Systempartition ist klein. Die Datenbank selbst bleibt klein (sie wächst mit der Anzahl der Revisionen, nicht mit der Größe der Dateien).
1. Den Dienst stoppen
sudo systemctl stop uversion-server
2. Das Verzeichnis kopieren
Es ist das -a, das Rechte und Eigentümer bewahrt. Kopieren statt Verschieben lässt Ihnen bis zur letzten Prüfung einen Rückweg.
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. Die Konfiguration auf den neuen Pfad zeigen lassen
Dieser Schritt ist zwingend und kommt vor dem nächsten: siehe den Kasten „Die Reihenfolge zählt“ weiter unten.
sudo sed -i 's#/var/lib/uversion#/srv/uversion#g' /etc/uversion/config.toml
4. Den neuen Pfad dem Installer mitteilen
Antworten Sie den neuen Pfad auf die Frage „Data directory“. Der Installer schreibt die systemd-Unit aus dieser Antwort neu und startet dann den Dienst neu.
sudo dpkg-reconfigure uversion-server
# Data directory : /srv/uversion
5. Prüfen, dass die Unit wirklich dorthin zeigt
systemctl cat uversion-server | grep -E 'WorkingDirectory|ReadWritePaths'
systemctl status uversion-server
dpkg-reconfigure, schreiben Sie die systemd-Unit nicht selbst
Der Installer schreibt /etc/systemd/system/uversion-server.service.d/10-data-dir.conf selbst und schreibt sie bei jeder Konfiguration neu, aus der Antwort, die Sie ihm gegeben haben. Eine von Hand abgelegte Datei überlebt bis zum nächsten Update, einschließlich desjenigen, das die Schaltfläche Update now auslöst: Die Unit zeigt dann wieder auf das alte Verzeichnis, während die Konfiguration in das neue schreibt. Der gehärtete Dienst (ProtectSystem=strict) startet normal und bricht Wochen später beim ersten Datei-Upload.
config.toml zuerst
dpkg-reconfigure allein genügt nicht. Der Installer korrigiert [storage].path nur, wenn das Verzeichnis, das er dort vorfindet, nicht mehr existiert: Ein noch vorhandener eigener Pfad gilt als bewusste Wahl und bleibt unverändert. Da Sie kopiert und nicht verschoben haben, existiert das alte Verzeichnis noch, und Schritt 2 oben ist daher zwingend. Sobald alles geprüft ist und der Server auf dem neuen Pfad läuft, können Sie das alte Verzeichnis löschen.
ProtectHome=true, und ein Heimatverzeichnis ist für ein Systemkonto nicht durchquerbar). Ein Pfad unter /home oder /root verhindert den Start (226/NAMESPACE oder 200/CHDIR). Wählen Sie einen Systempfad: /srv, /opt oder eine eingebundene Platte.
Die Datenbank anderswo ablegen
Der Installer erstellt eine lokale Datenbank, aber nichts bindet Sie daran. Zeigen Sie url auf eine beliebige erreichbare PostgreSQL-Datenbank: eine andere als eigener Cluster eingebundene Platte, eine andere Maschine oder ein verwalteter Dienst.
[database]
url = "postgres://UTILISATEUR:MOTDEPASSE@HOTE:5432/BASE"
Dann neu starten. Der Server wendet seine Migrationen beim Start an: Er aktualisiert die Struktur seiner Datenbank von selbst. Eine leere Datenbank wird initialisiert, eine ältere wird hochgestuft, Sie müssen nichts von Hand ausführen.
Erforderlich ist lediglich, dass die angegebene Rolle in der Zieldatenbank Tabellen anlegen kann.
Datenbank auf der Datenplatte
Der vorige Abschnitt setzt eine Datenbank voraus, die Sie anderswo verwalten. Wenn Ihr Ziel ein anderes ist: dass eine einzige überlebende Platte genügt, um den Server wiederaufzubauen, wenn die Maschine stirbt, dann kann der Installer die Datenbank in das Datenverzeichnis legen, in Form eines dedizierten PostgreSQL-Clusters: eine eigene PostgreSQL-Instanz mit eigenem Verzeichnis und eigenem Port, unabhängig von der des Systems.
Die Frage wird bei der Installation gestellt. Um sie auf einem bereits laufenden Debian-Server zu aktivieren:
sudo dpkg-reconfigure uversion-server
# Data directory : /srv/uversion
# Put the database on the data directory too? Yes
Unter Windows
Dasselbe Versprechen, andere Mechanik. Windows hat keine benannten Cluster: Der Installer verschiebt die PostgreSQL-Instanz selbst auf das Datenverzeichnis und richtet den Dienst neu aus. Diese Wahl trifft man zum Installationszeitpunkt, indem man den Parametern des Skripts -DbOnDataDir hinzufügt. Sie wird nicht per Frage angeboten: Das Skript fragt nur nach dem Aktivierungscode, also bleibt die Datenbank, wenn Sie diesen Parameter nicht übergeben, an ihrem Standardort. Die genaue Form des Befehls finden Sie unter Installation unter Windows, wobei der Einzeiler keinen Parameter entgegennehmen kann.
# 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
Das Verschieben wird mit angezeigtem Grund abgelehnt, wenn die Instanz andere Datenbanken als die von uVersion beherbergt oder wenn ihr Verzeichnis nicht eigenständig ist: Vorhandensein eines Tablespace, ein per Junction verschobenes pg_wal oder ein in postgresql.conf eingetragener absoluter Pfad. Es wird nie etwas gelöscht: Der Installer kopiert, prüft, startet den Dienst auf der neuen Kopie und benennt erst dann das alte Verzeichnis um.
RequiresMountsFor. Eine verspätet erschienene externe Platte wird daher von den Wiederherstellungsaktionen des Dienstes aufgefangen, nicht von einer Abhängigkeit. Und PostgreSQL prüft unter Windows keine Berechtigung an seinem Verzeichnis: Es ist der Installer, der sie einschränkt, es gibt kein Netz auf der Serverseite.
Die Platte enthält dann alles:
/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
Der Cluster erhält seinen eigenen, automatisch zugewiesenen Port (5433, wenn er frei ist), und config.toml wird aktualisiert, um darauf zu zeigen. Der System-Cluster bleibt unberührt: Er kann weiterhin andere Datenbanken beherbergen.
pg_dump, Cluster erstellen, wiederherstellen, url aktualisieren).
Den Server auf einer neuen Maschine wiederaufbauen
Die Platte enthält die Software nicht: Halten Sie PostgreSQL und das uVersion-Paket bereit; eine neben der Platte aufbewahrte Kopie beider erspart am entscheidenden Tag eine unangenehme Überraschung.
# 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
Der Installer findet die Datenbank auf der Platte, setzt die PostgreSQL-Konfigurationsdateien wieder an ihren Platz (die pg_createcluster aus dem Verzeichnis heraus auf die Systemplatte verschoben hatte), registriert den Cluster, korrigiert die Eigentümer und richtet dann Port und Chunk-Pfad in config.toml neu aus. Wenn die Platte an einem anderen Einhängepunkt als zuvor wieder erscheint, geben Sie einfach den neuen Pfad an.
Die vollständige Vorgehensweise, einschließlich der Variante ohne Neuinstallation, steht auf der Platte selbst geschrieben: recovery/RESTORE.md.
Sichern und wiederherstellen
Eine vollständige Sicherung besteht aus drei Elementen: dem Export der Datenbank (dem Dump), dem Datenverzeichnis und dem Konfigurationsverzeichnis.
Die Datenbank sichern
Die Metadaten: Dateien, Revisionen, Benutzer, Sperren.
sudo -u postgres pg_dump uversion > uversion-$(date +%F).sql
Das Datenverzeichnis sichern
Der Inhalt der Dateien, also das, was den Platz belegt.
sudo tar -C /var/lib/uversion -czf uversion-data-$(date +%F).tar.gz .
Die Konfiguration sichern
Lizenzschlüssel, Sitzungssignatur-Geheimnis, Datenbankpasswort. Sie liegt nicht im Datenverzeichnis.
sudo tar -C /etc -czf uversion-etc-$(date +%F).tar.gz uversion
/etc/uversion nicht
Es ist das dritte Element und das am leichtesten zu vergessende: Es liegt nicht im Datenverzeichnis. /etc/uversion/config.toml trägt den Lizenzschlüssel, das Geheimnis, das die Sitzungen signiert, und das Datenbankpasswort; /etc/uversion/licence-key trägt die Lizenz selbst. Ohne sie startet eine Wiederherstellung auf einer neuen Maschine mit einem neuen Geheimnis, sodass das gesamte Team auf einen Schlag abgemeldet wird und eine Lizenz erneut angefordert werden muss: Der Aktivierungscode, den man bei der Anmeldung erhält, ist einmalig und bereits verbraucht, nur der Lizenzschlüssel, den er erzeugt hat, lässt sich wiederverwenden.
Zum Wiederherstellen auf einer neuen Maschine: Installieren Sie das Paket, setzen Sie dann die drei Elemente in dieser Reihenfolge wieder ein.
1. Die Datenbank wiederherstellen
sudo -u postgres createdb -O uversion uversion # seulement si elle n'existe pas
sudo -u postgres psql uversion < sauvegarde.sql
2. Die Daten wiederherstellen
Die Chunks mit den richtigen Rechten zurücklegen:
sudo rsync -a /mnt/backup/uversion/ /var/lib/uversion/
sudo chown -R uversion:uversion /var/lib/uversion
sudo chmod 0750 /var/lib/uversion
3. Zwei Konfigurationszeilen übertragen
Nicht die ganze Datei: Diejenige, die der Installer gerade geschrieben hat, trägt das Datenbankpasswort, das er selbst neu festgelegt hat.
# 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. Neu starten
sudo systemctl restart uversion-server
uversion bereits vorfindet, verwendet er sie unverändert weiter und setzt lediglich das Rollenpasswort zurück. Sie können also zuerst Ihren Dump wiederherstellen und danach installieren.
Den PostgreSQL-Cluster verschieben
Selten nötig: Die Datenbank ist klein. Wenn Sie darauf bestehen, ist es eine Standard-PostgreSQL-Operation, nichts, was der uVersion-Installer übernimmt. Achtung: Dieser Cluster (die PostgreSQL-Instanz des Systems, mit ihrem Verzeichnis und ihrem Port) kann andere Datenbanken als die von uVersion beherbergen.
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
Prüfen Sie anschließend mit pg_lsclusters, dass der Cluster auf dem neuen Pfad online ist.