Skip to main content
Eine Aktualisierung von GoModel besteht aus einem Pull und einem Neustart. Schemamigrationen sind in das Binary eingebaut und laufen beim ersten Start der neuen Version automatisch. Es gibt also keinen separaten Migrationsschritt und kein Wartungsfenster über den Neustart hinaus.
Sichern Sie Ihre Datenbank vor jeder Aktualisierung. GoModel wird aktiv weiterentwickelt und erscheint häufig in neuen Versionen, und manche Upgrades wandeln gespeicherte Daten um. Nur eine Kopie macht aus einem fehlgeschlagenen Upgrade ein Fünf-Minuten-Problem statt eines verlorenen Audit-Trails, Nutzungsverlaufs und Bestands verwalteter API-Keys.

1. Die Datenbank sichern

Stoppen Sie das Gateway, damit die Datei nicht während des Kopierens beschrieben wird, und archivieren Sie dann das Volume:
Ersetzen Sie gomodel_data durch den Namen Ihres Volumes (docker volume ls). Wenn Sie stattdessen ein Host-Verzeichnis per Bind Mount einbinden, genügt cp -a ./data ./data.bak-$(date +%F).

2. Aktualisieren

Docker Compose

Die Logs sollten in der ersten Zeile die neue Version und eine Zeile storage configured mit Ihrem Datenbankpfad zeigen.
Prüfen Sie vor der Aktualisierung, ob Ihre Datenbank auf einem Volume liegt. Das Image deklariert keines. Ein Container ohne Einbindung unter /app/data hält seine SQLite-Datenbank daher im eigenen Dateisystem des Containers – und verliert alles in dem Moment, in dem der Container durch die Aktualisierung ersetzt wird. Siehe Storage im Produktivbetrieb.

docker run

Beim Neuanlegen des Containers gehen seine Flags verloren. Lesen Sie sie daher zuerst aus dem laufenden Container aus:
Ist unter /app/data nichts eingebunden, liegt die Datenbank im Dateisystem des Containers, und docker rm löscht sie. Kopieren Sie sie heraus und befüllen Sie damit das Volume, das Sie einbinden werden, solange der alte Container noch existiert – ein leeres Volume verdeckt die Kopie, und das Gateway startet ohne Keys, Nutzung oder Logs:
65532 ist die Nicht-Root-UID des Images – das Gateway kann kein Volume beschreiben, das jemand anderem gehört. Ersetzen Sie dann den Container und übergeben Sie dieselben Mount- und Umgebungs-Flags erneut:

Binary

Führen Sie das Installationsskript erneut aus. Es lädt das neueste Release und ersetzt das Binary an Ort und Stelle:
Starten Sie das Gateway anschließend neu – ein Hot-Upgrade im laufenden Betrieb gibt es nicht.

3. Überprüfen

GET /version meldet die laufende Version, das neueste veröffentlichte Release und ob eine Aktualisierung verfügbar ist:
Die Seite Settings im Dashboard zeigt dasselbe Ergebnis. Wie diese Prüfung funktioniert und wie Sie sie deaktivieren, beschreibt Versionsprüfung.

Was Migrationen bewirken

Migrationen laufen beim ersten Start einer neuen Version. Es gibt keinen separaten Migrationsbefehl, und eine Aktualisierung verschiebt oder löscht nie Ihre Datenbank, Konfiguration oder Ihren Cache. Die meisten sind additiv: Fehlende Tabellen, Indizes und Spalten werden angelegt, und ein teilweise angewendetes Schema kann beim nächsten Start gefahrlos erneut versucht werden. Manche Releases wandeln den Speicher dagegen um – als Budgets und Rate-Limits Scopes erhielten, wurden ihre Tabellen neu aufgebaut und die alten verworfen. Beides ist in Vorwärtsrichtung sicher, weshalb die Rückwärtsrichtung Sorgfalt erfordert.

Eine Version festlegen

Aktualisierungen verwenden standardmäßig das neueste Release. Um bei einer bekannten Version zu bleiben, legen Sie diese fest:
Verwenden Sie in Ihrer Compose-Datei den Versions-Tag statt latest.
Ersetzen Sie X.Y.Z durch ein veröffentlichtes Release.

Zurückrollen

Installieren oder pullen Sie die vorherige Version und starten Sie neu. Das genügt nur, wenn jede Migration dazwischen additiv war; nach einer umwandelnden Migration sucht das ältere Binary nach Speicherstrukturen, die das Upgrade neu aufgebaut hat. Von außen lassen sich die beiden Fälle nicht unterscheiden. Stellen Sie daher das Backup aus Schritt 1 wieder her, es sei denn, es ist bekannt, dass die ältere Version mit der migrierten Datenbank startet. Die Wiederherstellung eines SQLite-Volume-Backups ersetzt den Inhalt des Volumes. Stoppen Sie daher zuerst das Gateway – docker compose stop gomodel oder docker stop gomodel für einen eigenständigen Container –, entpacken Sie dann das Archiv und starten Sie es wieder:

Wenn etwas schiefgeht

Kommen Sie nicht weiter? Fragen Sie auf Discord oder eröffnen Sie ein GitHub-Issue.
Zuletzt geändert am 24. Oktober 2026