Mit dem großen Release 4.0, welches Mastodon Mitte November herausgebracht hat, sind einige neue Funktionen hinzugekommen. Eine lange Erwartete war die Übersetzung einzelner Beiträge innerhalb der Plattform ohne Medienbruch. Allerdings ist die Übersetzung nicht Bestandteil der Plattform, es gibt lediglich eine Schnittstelle um einen Dienst dafür einzusetzen. Zur Wahl stehen dabei zwei Lösungen.
- DeepL, eine KI unterstützte Lösung eines Kölner Unternehmens, dass einen kostenlosen Plan zur Nutzung seiner API bereitstellt, mit dem monatlich 500.000 Worte übersetzt werden können. Das mag für eine kleinere Instanz, die lediglich deutsch und englisch bespielt ausreichen, das sind aber lediglich ca. 1000 Übersetzungen im Monat. Danach fällt die Übersetzung weg oder ein kostenpflichtiger Plan muss her.
- LibreTranslate ist eine Open Source Software, die sich auch als Dienstleistung einkaufen lässt, die man aber selbst bereitstellen und so nicht nur Kosten einsparen kann, es müssen auch keine Daten an Dritte weitergegeben werden.
Die Einrichtung in Mastodon beschränkt sich bei beiden Lösungen auf das setzen zweier Variablen, wenn man einen Dienstleister bemüht diesen Dienst bereitzustellen und den Neustart des Puma Dienstes. Ich möchte aber kurz skizzieren, wie man diesen Dienst selbst bereitstellen kann. Ich habe mit dem Gedanken gespielt den Dienst direkt auf die Maschine mit dem Webserver zu installieren und habe das je einmal lokal und auf einem produktiven Webserver durchgespielt und möchte dringend davon abraten. Währen die aufgetretenen, unterschiedlichen Meldungen nicht Abschreckung genug für ein produktives System, sei darauf verwiesen, dass Mastodon zur Verwendung eines lokalen Dienstes erst gezwungen werden müsste und solche Sicherheitsschranken einen nicht unbedingt gleich ersichtlichen Grund haben.
Ich brauchte also einen Server ungleich dem Webserver der Instanz und eine Möglichkeit die Umgebung für den Dienst in einen definierten Zustand zu bringen, unabhängig zum vorhandenen Betriebssystem und den davon abhängigen Komponenten: Docker. Auch das wollte ich zunächst lieber ausprobieren und habe dabei ein strukturelles Problem ausgemacht. Das bestehende Dockerimage lädt die Sprachdateien erst beim Starten und das könnte bei einem benötigten Reboot des Systems zu Ausfallzeiten führen. Wir werden also das Image selbst erstellen, auf einem zusätzlichen Server, der einen Docker Deamon ausführt.
git clone https://github.com/LibreTranslate/LibreTranslate
cd LibreTranslate
sudo docker build --build-arg with_models=true -t libretranslate .
Der Punkt am Ende gehört zum Kommando! Die Zusammenstellung des Image wird einige Zeit in Anspruch nehmen, aber selbst wenn die ssh Verbindung abbricht, starte den Docker Build einfach noch mal – bis zur Erfolgsmeldung. Danach kann das Image gestartet werden.
sudo docker run -it -p 5000:5000 --restart=always libretranslate
Auf der Github Seite des Projektes stehen weitere mögliche Parameter, an dieser Stelle ist der Dienst aber einsatzbereit und stellt zusätzlich eine WebUI zur Übersetzung bereit.
http://domain.tld:5000
Um die Funktion zu prüfen kann folgender Befehl auf einem mit curl ausgestatteten Client genutzt werden. Da aber der Webserver der Instanz noch um Anschluss bittet, kann das auch aus dessen Shell erfolgen. So ist gleich klar ob der den Dienst erreichen kann.
curl --request POST \
--header "Content-type: application/json" \
--data '{ "q": "Dzisiaj jest Czwartek, 17 listopada 2022", \
"source": "pl", "target": "de"}' \
http://domain.tld:5000/translate
Wenn das einen deutschen Satz zurück liefert, noch die zwei benötigten Variablen eintragen in /home/mastodon/live/.env.production
DEFAULT_LOCALE=de
LIBRE_TRANSLATE_ENDPOINT=http://domain.tld:5000
Jetzt nur noch die Puma Dienste der Instanz neu starten und die Übersetzung sollte automatisch bei allen fremdsprachigen Beiträgen bereitstehen.
sudo systemctl restart mastodon-web
Nachdem die Installation dann ein paar Wochen gearbeitet hat, sollte doch einmal ein Blick auf die Github Seite geworfen werden ob es evtl. Änderungen gibt, die eine Aktualisierung sinnvoll oder gar notwendig erscheinen lassen. Auf dem Mastodon Server muss dazu nichts geändert werden, während die Aktualisierung des Docker Images für LibreTranslate mit wenigen Kommandos erledigt ist.
cd LibreTranslate
git pull
docker build --build-arg with_models=true -t libretranslate .
sudo docker run -it -p 5000:5000 --restart=always libretranslate
Das Image wird dabei nicht aktualisiert, sondern vollständig neu gebildet. So ist sichergestellt, dass falls zusätzliche Sprachdateien eingepflegt wurden, diese auch verwendet werden. Die lange Laufzeit des Build-Prozesses ist an dieser Stelle nicht mehr relevant, da der Container noch mit dem alten Image läuft, bis er im letzten Kommando ersetzt und neu gestartet wird.