Wiki
Mit Docker bereitstellen
uVersion-Server und PostgreSQL als Container, schlüsselfertig: Image herunterladen, laden, .env konfigurieren, starten. Speicherort von Daten und Datenbank konfigurierbar.
Eine Alternative zum .deb-Paket: Der uVersion-Server und seine
PostgreSQL-Datenbank laufen als Container, gestartet durch ein einziges
docker compose up. Ideal, wenn Sie eine containerisierte Bereitstellung
bevorzugen oder schnell testen möchten.
Voraussetzungen: Docker Engine 20.10+ mit dem Compose-v2-Plugin
(docker compose version) und ein uVersion-Lizenzschlüssel. Der Server
verweigert den Start ohne einen gültigen, signierten Schlüssel: Holen Sie ihn aus
Ihrem Konto (oder fordern Sie einen über
die Registrierungsseite an).
docker durch podman in allen Befehlen dieser
Seite: podman compose pull, podman load -i,
podman compose up -d. Die mitgelieferte docker-compose.yml
versieht ihre Mounts bereits mit SELinux-Labels (der auf Red Hat, Rocky, Alma und Fedora
standardmäßig aktivierten Zugriffskontrolle), mit dem Suffix :z. Ohne dieses
Label wird dem Container der Zugriff auf die eingehängten Verzeichnisse verweigert, und
die Meldung sieht eher nach einer beschädigten Datenbank aus als nach einem
Rechteproblem.
Installieren
1. Die Compose-Datei und die Umgebungsvorlage holen
Zwei Dateien, in einem neuen Ordner, der zu dem des Stacks wird: die
docker-compose.yml und die Vorlage .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. Das Image holen
Online genügt die Registry:
docker compose pull
Ohne Internetzugang (isoliertes Netz) laden Sie stattdessen das Archiv herunter und laden es: Es trägt denselben Image-Namen wie die Compose-Datei, sodass der Start es ohne jeden Download findet.
wget -N https://uversion.io/downloads/server/docker/uversion-server_latest_docker.tar.gz
docker load -i uversion-server_latest_docker.tar.gz
3. .env ausfüllen
Zwei Werte sind zwingend: UVERSION_LICENCE__KEY (Ihr Lizenzschlüssel, die
lange signierte Zeichenkette, die Sie per E-Mail erhalten haben) und
POSTGRES_PASSWORD (ein starkes Passwort für die mitgelieferte Datenbank).
nano .env
Das Geheimnis, das die Sitzungen signiert, wird beim ersten Start
erzeugt und im Datenverzeichnis aufbewahrt. Sie müssen nichts eingeben. Es ist Teil der
Sicherung: Geht es verloren, muss sich jeder einmal neu anmelden, es geht nichts verloren.
Wenn Sie lieber Ihr eigenes festlegen (mindestens 32 Zeichen), tragen Sie
UVERSION_SECURITY__JWT_SECRET in .env ein: Es wird tatsächlich an
den Container übergeben, der es dann verwendet, statt eines zu erzeugen.
POSTGRES_PASSWORD wird nur bei der Erstellung der Datenbank angewandt,
solange ihr Verzeichnis leer ist. Es später in .env zu ändern, ändert auf
der PostgreSQL-Seite nichts, die das alte behält, während der Server das neue vorlegt:
Die Verbindung bricht ab, ohne dass die Meldung es erklärt. Um es wirklich zu ändern,
ändern Sie es auf beiden Seiten:
# 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 zusammen mit Ihren Daten
Sie enthält den Lizenzschlüssel und das Datenbankpasswort und liegt neben der
docker-compose.yml, nicht in den Volumes. Verlieren Sie die Maschine und
behalten die Datenträger, bleibt eine Datenbank, die niemand ansprechen kann, und eine
Lizenz, die neu anzufordern ist: Der bei der Registrierung erhaltene
Aktivierungscode ist einmalig und bereits verbraucht, wiederverwendbar ist
allein der daraus erzeugte Lizenzschlüssel, und der ist hier. Behandeln Sie
diese Datei als Geheimnis: chmod 600, und in derselben Sicherung wie die
Datenbank und die Chunks (die Dateibruchstücke, das, was den Platz belegt).
4. Den Stack starten
docker compose up -d
Der Server ist dann unter https://YOUR-HOST:8443 erreichbar. Keine Domain
und kein Let’s-Encrypt-Zertifikat sind erforderlich: Das TOFU-Modell übernimmt das, also
Vertrauen beim ersten Kontakt, wie SSH, wenn es Sie beim ersten Mal den Fingerabdruck
einer Maschine bestätigen lässt.
5. Den Server-Fingerabdruck ablesen
Er wird bei jedem Start neu in die Protokolle geschrieben:
# L'empreinte du serveur, reecrite dans les journaux a chaque demarrage
docker compose logs server | grep -i "TLS fingerprint"
Das ist der Server-Fingerabdruck (SHA-256 seines Zertifikats): Der Server liefert selbstsigniertes HTTPS auf Port 8443 aus, und jeder Client bestätigt ihn bei der ersten Verbindung. Teilen Sie ihn mit Ihrem Team (siehe TLS-Fingerabdruck). Verwechseln Sie ihn nicht mit einer Prüfsumme, die dem Überprüfen einer heruntergeladenen Datei dient: Dieser hier identifiziert Ihren Server.
6. Das anfängliche Admin-Passwort ablesen
Melden Sie sich als admin mit diesem Passwort an und ändern Sie es dann.
Die Datei wird gelöscht, sobald Sie es ändern.
# Le mot de passe admin initial (le fichier disparait des que vous le changez)
docker compose exec server cat /data/initial-admin-password
Um den Start live zu verfolgen, eignet sich docker compose logs -f server,
aber setzen Sie es nicht mitten in eine Befehlsfolge: Das -f folgt den
Protokollen unbegrenzt und gibt die Kontrolle nie zurück (Ctrl +
C zum Beenden).
Daten und Datenbank
Der gesamte Zustand des Servers (Chunk-Speicher, TLS-Zertifikat und damit der
Fingerabdruck, Serveridentität) lebt in einem Host-Verzeichnis und die
PostgreSQL-Datenbank in einem anderen. Beide werden in .env eingestellt:
# 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
Für eine echte Bereitstellung richten Sie UVERSION_DATA_DIR auf eine
große, gesicherte Platte: Die binären Chunks eines Unreal-Projekts können umfangreich
sein. Der Container passt die Rechte des eingehängten Verzeichnisses von selbst an (er
startet nur so lange als root, wie er den Besitz korrigiert, und steigt dann auf einen
unprivilegierten Benutzer ab), Sie müssen also vorab nichts mit chown tun.
Um ein bereits vorhandenes externes PostgreSQL zu nutzen, tragen Sie
UVERSION_DATABASE__URL in .env ein und entfernen dann den Dienst
db sowie den Block depends_on in der
docker-compose.yml.
# Dans .env : brancher un PostgreSQL existant
UVERSION_DATABASE__URL=postgres://user:motdepasse@db.interne:5432/uversion
Daten und Datenbank verschieben
Der einfachste Fall ist, beide Variablen vor dem ersten up zu
setzen: Noch existiert nichts, es gibt nichts zu kopieren. Läuft der Stack
bereits, müssen Sie ihn anhalten und die Verzeichnisse von Hand kopieren, wobei die
Besitzer erhalten bleiben.
1. Den Stack anhalten
Während des Kopierens darf nichts schreiben:
docker compose down
2. Die beiden Verzeichnisse kopieren
Es ist das -a, das Besitzer und Rechte erhält:
sudo rsync -a ./data/server/ /srv/uversion/data/
sudo rsync -a ./data/db/ /srv/uversion/db/
3. .env auf den neuen Ort richten
# Dans .env, LES DEUX lignes, pas une seule
UVERSION_DATA_DIR=/srv/uversion/data
UVERSION_DB_DIR=/srv/uversion/db
4. Neu starten
docker compose up -d
UVERSION_DB_DIR, das auf ein leeres
Verzeichnis zeigt, ergibt eine leere Datenbank: PostgreSQL initialisiert sie ohne mit der
Wimper zu zucken, und Sie erhalten einen vollen Chunk-Speicher, gekoppelt an eine
Datenbank ganz ohne Metadaten.
Drei Pfadfallen, alle erlebt:
- Ein relativer Pfad wird relativ zur Compose-Datei aufgelöst, nicht
relativ zu dem Verzeichnis, aus dem Sie den Befehl ausführen.
./data/serverbezeichnet immer den Nachbarn derdocker-compose.yml. - Eine Netzwerkfreigabe (NFS, CIFS, eine Windows-Freigabe) verweigert in der
Regel das
chown, das der Container beim Start ausführt. Der Container beendet sich dann sofort mit einem Rechtefehler, der weder uVersion noch den Speicher erwähnt. Verwenden Sie eine lokale Platte oder ein Block-Volume. rsync -aist das, was Besitzer und Rechte erhält. Eine Kopie mitcpohne Optionen oder aus einem Dateimanager setzt alles auf das aktuelle Konto zurück, und PostgreSQL verweigert dann den Start auf seinem eigenen Verzeichnis.
Betrieb
Sichern: die Datenbank
Sie trägt die Metadaten: Dateien, Revisionen, Benutzer, Sperren.
docker compose exec db pg_dump -U uversion uversion > uversion-db.sql
Sichern: die Serverdaten
Das ist das von UVERSION_DATA_DIR bezeichnete Host-Verzeichnis. Beide
Sicherungen zählen: die eine ohne die andere stellt nichts wieder her.
# .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" .
Aktualisieren
Die Daten und die Datenbank werden nicht angetastet, die Migrationen greifen beim Start.
docker compose pull
docker compose up -d # les migrations s'appliquent au demarrage
In einem isolierten Netz laden Sie stattdessen ein neueres Archiv:
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
Anhalten
docker compose stop hält die Container an, docker compose down
entfernt sie. In beiden Fällen bleiben Ihre Daten an Ort und Stelle.
down -v löscht hier nichts
Die veröffentlichte Compose-Datei verwendet kein benanntes Volume: Ihre Daten und Ihre
Datenbank liegen in den beiden von .env bezeichneten Host-Verzeichnissen.
Weder down noch down -v rührt sie an. Um wirklich bei null zu
beginnen, müssen Sie diese Verzeichnisse selbst löschen. Das ist wichtig zu wissen: Der
Reflex nach einem fehlgeschlagenen Login ist, down -v und dann
up auszuführen, und das kehrt mit derselben Datenbank und demselben Passwort
genau zum selben Fehler zurück.