c't 2/2023
S. 164
Praxis
Mastodon
Bild: Rudolf A. Blaha

Ein Königreich für Kurznachrichten

Mastodon-Instanzen selbst hosten

Viele Mastodon-Neulinge registrieren sich bei einer bestehenden Instanz. Sie können aber auch einen eigenen, individuell gestalteten Mastodon-Server aufsetzen, egal ob nur für sich selbst, die Familie oder auch Freunde. Wir zeigen Ihnen, wie Sie Teil des Netzwerks werden.

Von Niklas Dierking

Seit der Übernahme von Twitter durch Elon Musk bekommt das dezentrale soziale Netzwerk Mastodon viel mediale Aufmerksamkeit. Nicht unwahrscheinlich, dass inzwischen einige Ihrer Kontakte vom Vögelchen auf das Mammut umgesattelt haben oder zweigleisig fahren. Vielleicht haben Sie selbst auch schon einen Account bei einer der vielen Instanzen mit offener Registrierung angelegt? Mastodon teilt oberflächlich viele Eigenschaften mit Twitter, ist jedoch ganz anders aufgebaut. Es wird nicht von einer zentralen Entität wie einem Unternehmen kontrolliert, sondern besteht aus einem Netzwerk von Servern, auch Instanzen genannt, die miteinander über das offene Protokoll ActivityPub kommunizieren. Ein beliebter Vergleich ist die E-Mail: Sie können bei E-Mail Provider A registriert sein und trotzdem Mails an Nutzer bei E-Mail-Provider B verschicken. Mastodon ist keine Blackbox, sondern wird quelloffen entwickelt. Jeder kann eine eigene Instanz betreiben und trotzdem Teil des föderierten Netzwerks (Fediverse) sein.

Eine Mastodon-Instanz in Eigenregie zu hosten hat eine Reihe von Vorteilen. Der größte Pluspunkt ist, dass Sie selbst über Ihre Daten bestimmen. Wenn Sie sich auf einer vorhandenen Instanz anmelden, dann geben Sie dem Administrator nämlich einen großen Vertrauensvorschuss. Beispielsweise kann der prinzipiell private Nachrichten mitlesen, denn die sind bislang nicht Ende-zu-Ende-verschlüsselt (siehe ct.de/y6ke). Außerdem gilt das Prinzip „Mein Haus, meine Regeln“. Der Admin handelt mit der Community die Regeln aus, hat aber das letzte Wort. Wenn das der Community nicht passt, stimmt sie mit den Füßen ab und User wechseln auf eine Instanz, die mehr ihren Vorstellungen entspricht oder gründen eine neue. Als Admin legen Sie auch die Grenzverläufe fest und setzen unliebsame Instanzen auf die Blockliste. Letztlich leisten Sie auch einen Beitrag zur Lastverteilung im Netzwerk, denn beliebte Instanzen wie @mastodon.social ächzen bereits unter dem Ansturm und dem gesteigerten Moderationsaufwand; einige haben sich daher dazu entschlossen, keine neuen Nutzer mehr aufzunehmen. Überlegen Sie sich dennoch gut, ob Sie eine Mastodon-Instanz betreiben wollen, denn die zu administrieren und moderieren kostet Zeit, Geld und Nerven. Es ist allerdings nicht unüblich, dass sich Nutzer einer Instanz an den laufenden Kosten beteiligen.

Voraussetzungen

Wege zur eigenen Mastodon-Instanz gibt es viele. In dieser Anleitung erklären wir, wie Sie Mastodon auf einem VPS (Virtual Private Server) unter Debian 11 mit Docker aufsetzen. Die Konfigurationsdateien und Container-Rezepte stellen wir in einem GitHub-Repository zum Projekt zur Verfügung (siehe ct.de/y6ke). Beachten Sie, dass es sich bei Mastodon um eine komplexe Software handelt und die Installation hier mithilfe von Containern vereinfacht wurde. Dadurch eignet sich die Anleitung besonders gut zum Ausprobieren. Insbesondere, wenn Sie planen, Ihre Instanz nicht nur allein zu nutzen, sollten Sie sich der Verantwortung für die Daten anderer bewusst sein und Praxiserfahrung mit Docker und Linux-Servern mitbringen. VPS haben den Vorteil, dass sie günstiger sind und mit einer Community mitwachsen können. Sollten Sie irgendwann mehr Rechenpower benötigen, dann schalten Sie bei Ihrem Hosting-Provider mehr CPU-Kerne oder RAM dazu. Wir haben uns für einen deutschen Hoster entschieden und einen Server mit 2 vCPU-Kernen, 4 GByte RAM und 40 GByte SSD-Platz konfiguriert, der etwa 7 Euro im Monat kostet. Sie können Mastodon prinzipiell auch auf einem Raspi bei sich zu Hause betreiben, beispielsweise wenn Sie eine Instanz nur für sich, einige Bekannte oder für einen kleinen Verein betreiben wollen. In unseren Testläufen hat sich der Raspberry Pi 4 mit 4 GByte RAM gut geschlagen. Um ausreichend Platz für hochgeladene Dateien zu haben, sollten Sie den Raspi mit einer externen SSD ausstatten. Eine einfache Anleitung der Raspberry Pi Foundation finden Sie unter ct.de/y6ke.

Neben Ihrem Server brauchen Sie auch eine eigene Domain, für die Sie DNS-Einträge vornehmen können und wahrscheinlich einen DynDNS-Dienst, beispielsweise den der Fritzbox, wenn Ihr Server an Ihrem privaten Internetanschluss hängt. Setzen Sie einen (Dyn-)DNS-Eintrag, der auf die IP-Adresse Ihres Mastodon-Servers zeigt. Mastodon versendet Mails, um Nutzer zu verifizieren und um ihnen zu ermöglichen, Passwörter zurückzusetzen. Mit SMTP-Providern wie SendinBlue, SendGrid oder Google verschicken Sie eine begrenze Anzahl solcher Transaktionsmails kostenlos. Wie Sie einen eigenen Mailserver mit Mailcow einrichten, haben wir in [1] beschrieben.

Server absichern

Als Administrator sind Sie dafür verantwortlich, die Daten Ihrer Nutzer zu schützen und eine Mastodon-Instanz ist ein attraktives Angriffsziel. Authentifizieren Sie sich besser nur mit Ihrem SSH-Schlüssel und nicht via Passwort, wenn Sie sich mit dem Server verbinden. Gewöhnlich können Sie Ihren öffentlichen Schlüssel beim Hoster hinterlegen, wenn Sie den Server konfigurieren. Sobald Sie via SSH verbunden sind, deaktivieren Sie die Anmeldung mit Passwort, indem Sie in der Datei /etc/ssh/sshd_config beim Schlüssel PasswordAuthentication den Wert no eintragen. Starten Sie dann den SSH-Daemon neu, Ihre Verbindung bleibt bestehen:

systemctl restart ssh.service

Bringen Sie das System danach auf den neuesten Stand:

apt update && apt upgrade -y

Sie sollten außerdem nur Anfragen für SSH, HTTP und HTTPS zulassen. Konfigurieren Sie bei Ihrem Hoster eine Cloudfirewall und blocken Sie alle TCP-Ports bis auf 22, 80 und 443. Achten Sie außerdem stets darauf, Mastodon und den Rest Ihres Servers aktuell zu halten.

Sie bestimmen, ob Sie eine Single-User-Instanz betreiben oder andere Nutzer auf Ihren Server einladen.
Sie bestimmen, ob Sie eine Single-User-Instanz betreiben oder andere Nutzer auf Ihren Server einladen.

Container-Mammut

Installieren Sie als ersten Schritt Docker auf Ihrem Server. Grundsätzliches zu Docker haben wir in [2] aufgeschrieben. Bei einem Produktivsystem sollten Sie die nötigen Pakete über das Docker-Repository beziehen, so wie es in der Dokumentation beschrieben ist, die wir unter ct.de/y6ke verlinkt haben. Schneller und bequemer geht es mit dem Installationsskript, das Sie herunterladen und dann ausführen:

curl -fsSL https://get.docker.com -o \
get-docker.sh
sh get-docker.sh

Die Mastodon-Weboberfläche soll in unserem Aufbau transportverschlüsselt mit dem containerisierten Reverse-Proxy Traefik ausgeliefert werden, der sich um die Beschaffung von TLS-Zertifikaten von Let’s Encrypt kümmert und diese automatisch erneuert. Dazu schaffen Sie folgende Verzeichnisstruktur und legen die nötigen Konfigurationsdateien an:

mkdir -p ~/traefik
mkdir ~/traefik/config
touch ~/traefik/config/traefik.yml
touch ~/traefik/config/acme.json

Die Datei acme.json, in der Traefik Zertifikate ablegt, darf nur root lesen und schreiben:

chmod 600 ~/traefik/config/acme.json

Bearbeiten Sie dann mit einem Texteditor die Datei traefik.yml im Verzeichnis ~/traefik/config. Eine Vorlage der Datei stellen wir in dem GitHub-Repository zu diesem Projekt zur Verfügung, das unter ct.de/y6ke verlinkt ist. Sie müssen lediglich im folgenden Ausschnitt den Platzhalter mail@example.com durch Ihre eigene Mailadresse ersetzen:

certificatesResolvers:
  letsencrypt:
    acme:
      email: mail@example.com
      storage: acme.json
      httpChallenge:
        entryPoint: http

Legen Sie dann ein Netzwerk für Traefik an:

docker network create proxy

Abschließend legen Sie die Datei docker-compose.yml für Traefik im Verzeichnis ~/traefik an. Sie finden die Vorlage ebenfalls im GitHub-Repository. An der Datei müssen Sie keine Änderungen vornehmen. Starten Sie jetzt Traefik mit dem Befehl docker compose up -d.

Jetzt geht es an die Installation von Mastodon. Legen Sie dazu folgendes Verzeichnis an:

mkdir -p ~/mastodon

Damit sich das Mastodon-Installationsskript in einem späteren Schritt nicht beschwert, schaffen Sie die leere Datei .env.production im Mastodon-Ordner:

touch ~/mastodon/.env.production

Kopieren Sie dann die docker-compose.yml-Vorlage aus dem GitHub-Repository in den Mastodon-Ordner. Die Mastodon-Instanz setzt sich aus mehreren Komponenten zusammen. Kernstück ist die eigentliche Mastodon-Anwendung mit einem Webserver. Dazu gesellt sich PostgrSQL als Datenbank und Redis als Cache. Die Streaming-API serviert die (föderierte) Timeline und der Sidekiq-Dienst arbeitet Hintergrundprozesse ab, beispielsweise indem er Benachrichtigungen sendet. In der Compose-Datei müssen Sie den Platzhalter mastodon.example.com in den Abschnitten web und streaming durch Ihre Domain ersetzen, so wie im folgenden Ausschnitt:

web:
   labels:
      - "traefik.http.routers.mastodon.rule=(Host(`mastodon.example.com`))"

streaming:
   labels:
      - "traefik.http.routers.mastodon-api.rule=(Host(`mastodon.example.com`)

Jetzt ist alles bereit, um das interaktive Installationsskript zu starten, das eine Konfiguration für die Datei .env.production erzeugt:

docker compose run \ web bundle exec rake mastodon:setup

Das Skript fragt Sie zuerst nach der Domain, unter der Mastodon erreichbar sein soll. Achtung: Die Adresse kann im Nachhinein nicht ohne Weiteres geändert werden. Anschließend müssen Sie sich entscheiden, ob Sie die Instanz im Single-User-Mode betreiben wollen. Bestätigen Sie vorerst mit y. Sie können die Registrierungen später öffnen, sobald Sie Ihre Mastodon-Instanz fertig eingerichtet haben und sich sicher sind, dass es keine technischen Probleme gibt. Bejahen Sie dann, dass Sie Mastodon als Docker-Container installieren. Die nun folgenden Schritte, die PostgreSQL und Redis betreffen, müssen Sie nur mit Enter bestätigen. Einen Cloudspeicher wie AWS S3 oder Alternativen wie Minio brauchen Sie für kleinere Instanzen nicht.

Wenn Sie einen Server für eine Community betreiben, dann ist kontrolliertes Wachstum eine gute Idee. Mit Einladungslinks, die nach einer festgelegten Zeit oder Anzahl von Registrierungen ablaufen, behalten Sie die Lage im Griff.
Wenn Sie einen Server für eine Community betreiben, dann ist kontrolliertes Wachstum eine gute Idee. Mit Einladungslinks, die nach einer festgelegten Zeit oder Anzahl von Registrierungen ablaufen, behalten Sie die Lage im Griff.

Für den erfolgreichen Versand einer Testmail müssen Sie anschließend die Daten eintragen, die Ihr SMTP-Provider bereitstellt. Wenn Sie das Skript anweisen, die Konfiguration zu speichern, zeigt es alle eingetragenen Werte noch einmal an, inklusive eine Reihe generierter Geheimnisse, wie im folgenden Ausschnitt:

LOCAL_DOMAIN=mastodon.example.com
SINGLE_USER_MODE=true
SECRET_KEY_BASE=XXX
SMTP_FROM_ADDRESS=Mastodon <cttest@example.com>

Kopieren Sie die gesamte Konfiguration aus Ihrem Terminal und fügen Sie sie in eine Textdatei ein, denn die brauchen Sie noch. Initialisieren Sie dann als letzten Schritt mit dem Skript die Datenbank, aber verneinen die Frage, ob Sie bereits einen Admin-Account anlegen wollen – andernfalls brach das Skript in unserem Test mit einer Fehlermeldung ab.

Navigieren Sie auf der Kommandozeile ins Verzeichnis ~/mastodon und passen Sie mit dem Befehl chown -R 991:991 public die Zugriffsrechte für den entstandenen Ordner public an, den der Mastodon-Container erzeugt hat. Anschließend kopieren Sie die Konfiguration, die das Skript ausgegeben hat, in die Datei ~/mastodon/.env.production. Starten Sie dann den gesamten Containerverbund mit docker-compose up -d.

Geben Sie der Mastodon-Anwendung etwa eine Minute Zeit und wechseln in ein interaktives Terminal im Container:

docker exec -it \
mastodon-web-1 /bin/bash

Legen Sie dort mit dem Befehl tootcl einen Admin-Account an:

RAILS_ENV=production bin/tootctl \
accounts create admin --email \
admin@example.com --confirmed \
--role Owner

Ersetzen Sie in dem Befehl admin durch den Namen, den der Admin-User tragen soll und admin@example.com durch Ihre Mailadresse. Heben Sie das zufällig generierte Passwort auf, denn Sie brauchen es beim ersten Login. Sie können es später in der Weboberfläche ändern. Verabschieden Sie sich mit exit wieder aus dem Container.

Das Mammut ist nun gesattelt! Rufen Sie Ihre Mastodon-Adresse im Browser auf und melden sich mit Ihrer Mail-Adresse und dem generierten Passwort an.

Streifzug durch die Weboberfläche

Sie sollten sich als Betreiber einer neuen Instanz erstmal um Ihr öffentliches Aushängeschild kümmern. In den Einstellungen finden Sie im Menü „Administration“ das Untermenü „Servereinstellugen“. Füllen Sie die Felder „Servername“, „Kontakt“ und „Serverbeschreibung“ im Reiter „Branding“ aus. Anhand dieser Informationen unterscheiden Nutzer Ihren Server von anderen. Eine detailliertere Erklärung, wie Ihr Server betrieben wird, inklusive Ihrer Community-Richtlinien und einer Datenschutzerklärung, tragen Sie im Reiter „Über“ ein. Wenn Sie keine Anpassungen an der Datenschutzerklärung vornehmen, wird eine vorgefertigte Datenschutzerklärung angezeigt, die Sie unter ct.de/y6ke nachlesen können.

Wenn alles geklappt hat, können Sie von Ihrer Instanz fleißig in die Welt hinauströten. Damit Ihre Postings auch ein Publikum finden, müssen Sie sich aber noch mit anderen Nutzern vernetzen.
Wenn alles geklappt hat, können Sie von Ihrer Instanz fleißig in die Welt hinauströten. Damit Ihre Postings auch ein Publikum finden, müssen Sie sich aber noch mit anderen Nutzern vernetzen.

Wenn Sie Ihre Instanz für eine Community öffnen wollen, dann sollten Sie die wichtigsten Spielregeln auch im Menü „Server Regeln“ eintragen. In Ihren Admin-Einstellungen finden Sie auch den Punkt „Moderation“, wenn es mal knirscht und Sie tätig werden müssen. Auf den Moderationsaspekt einer Mastodon-Instanz einzugehen ginge über diesen Artikel hinaus, aber bedenken Sie stets, dass Sie als Admin und Moderator einer Community viel Verantwortung tragen und strafrechtlich relevante Inhalte von Ihrem Server löschen müssen. Vielleicht hilft es Ihnen, von anderen Admins zu lernen. Unter ct.de/y6ke haben wir die Blogs der Admins der Instanz @chaos.social verlinkt, die dort ihre Erfahrungen schildern. Inwieweit der neue Digital Service Act (DSA) für Mastodon gilt, ist nicht abschließend geklärt.

Im Menü „Aufbewahrung von Inhalten“ konfigurieren Sie, wie lange bestimmte Assets vorgehalten werden. Die Mastodon-Dokumentation empfiehlt, den Medien-Cache sowie die generierten Vorschau-Kärtchen für externe Links regelmäßig zu löschen. Wie viel Speicherplatz diese Dateien fressen, kommt auf die Betriebsamkeit Ihrer Instanz an. Sie sollten Ihren Admin-Account außerdem durch eine Zwei-Faktor-Authentifizierung schützen, die Sie in den Kontoeinstellungen konfigurieren.

Schlussendlich legen Sie im Menü „Registrierungen“ fest, ob sich andere Nutzer registrieren dürfen. Sollten Sie sich entschließen, die Pforten zu öffnen, dann achten Sie darauf, kontrolliert zu wachsen, beispielsweise indem Sie einstellen, dass neue Accounts von Ihnen freigeschaltet werden müssen. Wenn Ihnen die manuelle Freischaltung zu aufwendig ist, dann erstellen Sie im Menü „Leute einladen“ limitierte Einladungslinks, die beispielsweise nur 25 Mal verwendet werden können oder nach einem festgelegten Zeitraum ablaufen. So können Sie nach jedem neuen Schwung evaluieren, ob der Server den Nutzern und Sie dem Moderationsaufwand gewachsen sind.

Ausblick

Jetzt ist es an der Zeit, Ihre Instanz mit Leben zu füllen, entweder, indem Sie Leute zu sich einladen oder mit Nutzern anderer Instanzen kommunizieren. Beachten Sie, dass bereits getrötete Inhalte von Accounts, denen Sie neu folgen, nicht nachgeladen werden. Das irritiert immer wieder und ist eines der ältesten, noch offenen Issues im GitHub-Repository von Mastodon (siehe ct.de/y6ke). Grundsätzliches zur Nutzung von Mastodon, beispielsweise, wie Sie Ihre Twitter-Bekanntschaften wiederfinden, haben wir in c’t 26/2022 erklärt [3]. Wir wünschen fröhliches Tröten! (ndi@ct.de)

Projekt-Repository bei GitHub, Mastodon-Dokumentation, Admin-Blogs und mehr: ct.de/y6ke

Kommentare lesen (3 Beiträge)