Warum das Update so einfach sein kann
Gitea ist ein gutes Beispiel für eine Anwendung, bei der Docker und Ansible sehr sauber zusammenspielen. Wenn die Daten außerhalb des Containers liegen, besteht ein normales Update im Kern aus drei Schritten: neues Image ziehen, Container neu erstellen, Dienst prüfen.
Ansible macht daraus keinen großen Prozess. Es macht den Ablauf nur wiederholbar: dieselben Variablen, dieselben Checks, dieselben Backups, derselbe Rollout auf jedem Host.
Rootless Docker: die wichtigen Besonderheiten
Beim rootless Gitea-Image gibt es ein paar Punkte, die man bewusst setzen sollte:
- –Das Image endet auf
-rootless, zum Beispieldocker.gitea.com/gitea:1.27.1-rootless. - –Die Daten liegen im Container unter
/var/lib/gitea. - –Die Konfiguration liegt unter
/etc/gitea. - –Für SSH nutzt das rootless Image den internen SSH-Server von Gitea.
- –Rootful und rootless Images sind nicht einfach austauschbar. Wer rootless gewählt hat, bleibt bei rootless.
Genau diese Details gehören ins Compose-Template. Danach wird das Update langweilig, und langweilig ist im Betrieb meistens gut.
Die Rolle statt einzelner Handarbeit
Ich habe dafür keine Sammlung loser Shell-Kommandos gebaut, sondern eine eigene Ansible-Rolle für Gitea. Die Rolle kümmert sich um die wiederkehrenden Teile:
- –Installation der Verzeichnisse, Rechte und Docker-Compose-Struktur
- –Konfiguration von Gitea über definierte Variablen
- –Rootless-Docker-Setup mit korrekten Volume-Pfaden
- –Updates über eine zentrale Versionsvariable
- –Backups vor Änderungen
- –Neustart und Prüfung des Dienstes
Damit ist ein Update kein manueller Eingriff auf dem Server. Die Zielversion wird in der Rolle oder im Inventory gesetzt, danach läuft derselbe Ablauf wie bei Installation und Konfiguration.
Was beim Update passiert
Der Update-Pfad ist bewusst unspektakulär:
- –Die Rolle prüft die Verzeichnisstruktur.
- –Die Rolle setzt die Rechte für die rootless Volumes.
- –Die Rolle rendert die aktuelle Compose-Konfiguration.
- –Die Rolle erstellt ein Backup.
- –Docker zieht das neue rootless Image.
- –Der Container wird neu erstellt.
- –Gitea startet und führt bei Bedarf Datenbankmigrationen aus.
- –Danach wird der Dienst geprüft.
Das ist genau der Punkt: Das Update selbst ist nicht kompliziert. Kompliziert wird es nur, wenn Installation, Konfiguration, Backup und Neustart aus vielen manuellen Einzelschritten bestehen.
Installation und Konfiguration sind Teil desselben Modells
Der Vorteil einer Rolle zeigt sich schon vor dem ersten Update. Installation und Konfiguration verwenden dieselbe Struktur, die später auch beim Aktualisieren genutzt wird.
Typische Einstellungen wie Domain, HTTP-Port, SSH-Port, Datenbank, Mail, Registrierungsoptionen oder Security-Optionen stehen nicht verstreut in einer manuell editierten app.ini. Sie kommen aus Variablen und werden reproduzierbar ausgerollt.
Das macht auch Reviews einfacher. Man sieht in Git, was sich ändert: Version, Konfiguration, Backup-Optionen oder Ports. Nicht erst auf dem Server nach dem Login.
Backups gehören in den Ablauf
Bei Gitea heißt Backup mindestens: Datenverzeichnis, Konfiguration und Datenbank sichern. Wenn PostgreSQL oder MySQL extern laufen, gehört der Dump ausdrücklich dazu.
Genau deshalb ist Backup kein optionaler Hinweis im Wiki, sondern Bestandteil der Rolle. Vor einem Update kann die Rolle den aktuellen Stand sichern und danach den Container neu starten. Das reduziert das Risiko und nimmt dem Update den manuellen Stress.
Wichtig ist dabei nicht nur, dass ein Archiv entsteht. Wichtig ist, dass der Ablauf immer gleich ist:
- –Backup vor Änderung
- –klarer Speicherort
- –nachvollziehbarer Zeitstempel
- –passende Rechte
- –Datenbankdump, wenn eine externe Datenbank verwendet wird
Das ersetzt keine Offsite-Backup-Strategie, aber es verhindert den typischen Fehler: ein Update ohne aktuellen lokalen Stand der persistenten Daten.
Warum Ansible hier angenehm ist
Der eigentliche Vorteil ist nicht, dass Ansible Docker-Kommandos ausführen kann. Das kann jeder per SSH. Der Vorteil ist, dass die Rolle den gesamten Betriebsrahmen beschreibt:
- –Versionen stehen im Inventory und sind nachvollziehbar.
- –Dateirechte für rootless Volumes werden immer gleich gesetzt.
- –Compose- und Gitea-Konfiguration werden nicht manuell auf Servern geändert.
- –Backups sind Teil des Update-Ablaufs.
- –Checks laufen nach Änderungen automatisch.
- –Der gleiche Ablauf funktioniert für Test, Staging und Produktion.
Damit wird aus "ich logge mich kurz ein und update das" ein reproduzierbarer Prozess.
Typischer Ablauf im Alltag
In der Praxis ist das Update dann nur noch eine bewusste Änderung der gewünschten Gitea-Version. Die Rolle übernimmt den Rest: Backup, Konfiguration, Image-Update, Neustart und Prüfung.
Wenn Gitea beim Start eine Datenbankmigration durchführen muss, dauert der erste Start etwas länger. Das ist normal. Genau deshalb ist ein Healthcheck in der Rolle sinnvoll.
Fazit
Gitea rootless mit Docker zu aktualisieren ist kein komplizierter Vorgang. Die wichtigen Dinge sind persistent gemountete Daten, saubere Rechte auf den Volumes, ein bewusst gesetztes rootless Image und ein Backup vor dem Neustart.
Mit einer eigenen Ansible-Rolle wird daraus ein kleiner, kontrollierter Ablauf. Version ändern, Rolle laufen lassen, Ergebnis prüfen. Mehr Betrieb muss man daraus nicht machen.
Bei Fragen zu Docker-, Gitea- oder Ansible-Automatisierung – schreiben Sie mir.