uVersion
Deutsch
Herunterladen →

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 = "..."
Dateirechte Sie enthält den Lizenzschlüssel, das Geheimnis, das die Sitzungen signiert, und das Datenbankpasswort. Sie hat 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:

WasWo
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
Die Datenbank folgt dem Datenverzeichnis nicht Das Ändern des Datenverzeichnisses verschiebt die Chunks und die Zertifikate, nicht die Datenbank. Und die Datenbank referenziert Chunks über den Fingerabdruck: Verschieben Sie das eine ohne das andere, sucht der Server nach Chunks, die nicht da sind. Verschieben Sie beide, oder keines.

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
Gehen Sie über 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.
Die Reihenfolge zählt: bearbeiten Sie 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.
Niemals unter /home oder /root Der Dienst läuft als gehärteter Systembenutzer (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.

Zwei Unterschiede zu Linux Windows kann einen Dienst nicht auf eine Platte warten lassen: Es gibt kein Äquivalent zu 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.

Zwei Kehrseiten, die man kennen sollte, bevor man Ja sagt Ein PostgreSQL-Datenverzeichnis lässt sich nur mit der Hauptversion öffnen, die es erstellt hat: Eine Wiederherstellung in drei Jahren kann verlangen, PostgreSQL 16 ausdrücklich zu installieren. Und die Platte trägt nun den Lizenzschlüssel, das Geheimnis, das die Sitzungen signiert, und das Datenbankpasswort, in einem nur für root zugänglichen Verzeichnis: Behandeln Sie diese Platte wie einen Zugangsnachweis.
Bereits gefüllte Datenbank: Der Installer weigert sich, sie zu verschieben Wenn Ihr Server bereits mit Daten läuft, verschiebt das Aktivieren der Option nichts: Ein Umzug, der mitten in einem Paket-Update unterbrochen wird, wäre schlimmer als gar kein Umzug. Der Installer belässt Sie im aktuellen Zustand und druckt die manuelle Vorgehensweise (Stoppen, 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
Vergessen Sie /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
Über eine bestehende Datenbank installieren Der Installer zerstört nichts: Wenn er die Datenbank 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.