Mastodon: Upgrades durchführen

Geschätzte Lesezeit: 2 Minuten

In mehr oder minder regelmäßigen Abständen ist es nötig, der Instanz-Software ein Upgrade zu verpassen.

Pro-Tipp: Um die Veröffentlichung neuer Releases nicht zu verpassen, habe ich mir die GitHub-Announcements per Atom in meinen Feed-Reader geworfen. Antiquiert? Feeds werden meiner Meinung nach zu Unrecht verlacht! Ich arbeite nach wie vor total gerne damit, Feeds sind rock solid, wiegen nichts – und funktionieren halt einfach.

Ich spiele die Updates möglichst zeitnah ein. Es ist ein von außen erreichbarer Dienst, da ist es mir wichtig, auf Stand zu sein.

Ich skizziere also jetzt mal (wie im letzten Artikel versprochen) kurz, wie so ein Upgrade – für mich zumindest – funktioniert.

Ich arbeite bei solchen Dingen üblicherweise in einem screen.

screen -DRS mastodon_upgrade

Der erste Schritt besteht darin, einen Dump der Datenbank zu erzeugen:

cd $HOME/mastodon
docker exec mastodon-db-1 \
pg_dump -Fc -U postgres postgres \
> postgres-$( date +%Y%m%d ).dump

Jetzt alle Container stoppen – in meinem Setup liegen alle Files im $HOME des ausführenden Users.

docker compose down

Zur Sicherheit ziehe ich mit eine Kopie der bisherigen funktionierenden Installation; den Cache lasse ich dabei jedoch außen vor.

cd .. 
rsync -azvpP --progress \
--exclude mastodon/public/system/cache/ \
--exclude mastodon/.git \
mastodon mastodon-$( date +%Y%m%d )

Dann wechsle ich wieder in den Ordner und bringe das Repository auf den neuesten Stand.

cd mastodon
git fetch

In meinem Fall weicht die docker-compose.yml vom GitHub-Default ab, da ich sie an meine Gegebenheiten anpassen musste; über git status lässt sich das einsehen. Deshalb werfe ich die auf den Stapel nicht eingecheckter Änderungen.

git stash

Ich wusste dank des Feeds schon, dass beim heutigen Update die aktuelle Version die v4.1.1 sein würde – git fetch listet mir aber ebenfalls die jeweils neuen Tags.

## git checkout <version/tag>
git checkout v4.1.1

Jetzt muss ich meine vollgekritzelte docker-compose.yml wieder vom Stapel retten.

git stash pop

Anschließend gleiche ich sie mit der des aktuellen Checkouts ab und übernehme eventuelle Änderungen entsprechend. Und dann erstelle ich das Docker-Image – und führe eventuell anstehende Migrationen durch. Letztere sind nicht immer nötig. Das Changelog des Projekts ist bei jedem Upgrade einen Blick wert!

docker compose build
docker compose run --rm web rails db:migrate
docker compose run --rm web rails assets:precompile

Zuguterletzt: ein force recreate aller Container!

docker compose up -d --force-recreate

Welcome back, konfigurationsmanufaktur.de!

Und das war’s dann auch schon 🙂

Edit: Ich betreibe die Instanz nun seit fast zwei Jahren, und für mich funktioniert das so ganz gut. Den vorliegenden Artikel habe ich anhand der gerade veröffentlichten v4.3.1 überarbeitet. Allerdings achte ich inzwischen auch penibler darauf, alte Backups, alte Docker-Container und -Volumes regelmäßig zu trashen, denn das summiert sich schon alles ganz ordentlich… 😇

Alle Bilder dieser Seite: © Marianne Spiller – Alle Rechte vorbehalten
Hintergrundbild: Macintosh SE mit verzweifeltem Holzmann, 1500x 1000px, Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten

Du nutzt etwas ähnliches, aber besser, magst die von mir eingesetzte Software nicht, findest das alles gänzlich überflüssig und würdest es sowieso ganz anders machen? Das ist wunderbar – du solltest unbedingt einen eigenen Artikel in deinem Blog dazu schreiben!

Habe ich jedoch etwas missverständlich formuliert, gar ganz ausgelassen oder mich vertippt?
Artikel in diesem Bereich kannst du überarbeiten und ergänzen!
→ Hier geht es zum öffentlichen Repository... ←

Eure Gedanken zu „Mastodon: Upgrades durchführen“

Ich freue mich über jeden Kommentar, es sei denn, er ist blöd. Deshalb behalte ich mir auch vor, die richtig blöden kurzerhand wieder zu löschen. Die Kommentarfunktion ist über GitHub realisiert, weshalb ihr euch zunächst dort einloggen und „utterances“ bestätigen müsst. Die Kommentare selbst werden im Issue-Tracker und mit dem Label „✨💬✨ comment“ erfasst – jeder Blogartikel ist ein eigenes Issue. Über GitHub könnt ihr eure Kommentare somit jederzeit bearbeiten oder löschen.