Intro

Wie jedes Kind weiß, ist Mastodon das neue coole föderierte soziale Netzwerk für alle Nackenbärte, die Twitter cringe finden. (Ich habe auch ein Profil.) Mastodon finde ich deshalb cool, weil es hier keine Algorithmen gibt, die mich mittels Missbrauchs meines Dopamin-Systems um meine Freizeit bringen. Für alle, die einen Quick-Start ins Mastodon-Universum wollen, reicht es sicherlich, einfach einen Account auf catch-all Instanzen wie mastodon.social oder mastodon.online zu erstellen. (Sogar von den Mastodon-Entwicklern selbst administriert!1)

Alle anderen, vom Titel dieses Posts Angelockten, gehen den längeren Weg und hosten es sich selbst. Denn es gilt: nur bei selbstgehosteten Shitposts kann man sich sicher sein, dass kein Moderator einspringt und einem dem Spaß verdirbt. 😎

Bleeding Edge Mastodon Server

In diesem lückenbehafteten (da sonst viel zu langem) Tutorial gehe ich davon aus, dass der zukünftige Administrator bereits einen eigenen Server aufzusetzen weiß. (Außerdem maße ich mir es nicht an, da belastbare Tipps geben zu können.) Viel Information steckt bereits in den Mastodon-Docs.2 In diesem Post geht es primär erstmal darum, was nicht in diesen Docs zu finden aber trotzdem nötig ist, um das ganze auf einem Arch-Server ans laufen zu kriegen.

AUR FTW

Mastodon ist im Arch User Repository zu finden: mastodon -git, oder auch im chaotic-aur Repository.3

Abhängig von den eigenen Präferenzen muss man nun entweder mit AUR-Helper (paru, yay) oder mit Pacman (nach dem Hinzufügen von chaotic-aur) sich das ganze erstmal installieren. Für alle, die ihrem Server das Kompilieren des Pakets nicht zumuten wollen, empfiehlt sich die Variante per chaotic-aur.

Eins nach dem Anderen

Nun wird der aufmerksame Installierende merken, dass die Installation von Mastodon ein paar Anweisungen auf die Konsole ausspuckt.4 Diese sind m.E. nicht ganz vollständig, deshalb hier nochmal etwas aufgearbeitet:

Redis

Redis ist einer der nötigen Backend-Services von Mastodon. Dieser sollte als Abhängigkeit von mastodon mitinstalliert worden sein. Nun ist es möglich, Redis so zu konfigurieren, dass mithilfe eines Unix-Sockets Verbindungen zu Services des eigenen Systems ermöglicht werden. Das Ganze hat Sicherheits- und Performancevorteile.5

Hierzu ist in der Redis-Konfiguration folgendes auszukommentieren und anzupassen, oder hinzuzufügen:


port 0
unixsocket /run/redis/redis.sock
unixsocketperm 770

Port 0 deaktiviert dabei das Lauschen auf TCP. Der mastodon-User muss noch der redis-Gruppe hinzugefügt werden:

$ usermod -aG redis mastodon

Das ganze kann nun gestartet werden:

$ systemctl enable --now redis

PostgreSQL

Das andere Backend ist hier PostgreSQL als Datenbank. Die nötige, initiale Konfiguration wird von der Installation des mastodon-Pakets nicht abgedeckt, deshalb hier ein kurzes heads-up:

$ sudo -u postgres initdb --locale=C.UTF-8 --encoding=UTF8 -D /var/lib/postgres/data --data-checksums

Auch hier die Beschränkung auf Unix-Sockets:


listen_addresses = ''

Postgres-User erstellen:

$ sudo -u postgres createuser -d mastodon

Falls hier eine Fehlermeldung kommt, dass der Ordner /home/mastodon nicht erstellt werden kann: ich habe das ignoriert.

PostgreSQL starten:

$ systemctl enable --now postgresql

Mastodon

Nun ans eingemachte:

$ cd /var/lib/mastodon
$ sudo chown mastodon:mastodon -R .
$ sudo -u mastodon RAILS_ENV=production NODE_OPTIONS=--openssl-legacy-provider bundle exec rails mastodon:setup

Der letzte Befehl startet eine Art interaktives Setup, welches nötige Parameter abfragt. Hier gibt es jetzt, aufgrund der vorherigen Konfiguration von Redis und PostgreSQL, folgende Abweichungen zu beachten:

-> PostgreSQL

Host: /run/postgresql

-> Redis

Das Setup berücksichtigt lokale Unix-Sockets nicht, deshalb ist es egal, was hier eingegeben wird. Es reicht, zuerst die Default-Werte zuzulassen und Fehlermeldungen zu ignorieren. Damit die Verbindung zu Redis klappt, muss die Konfiguration nach dem Setup nochmal händisch angepasst werden:


REDIS_URL=unix:///run/redis/redis.sock
REDIS_PORT=0
REDIS_PASSWORD=
Der clou dabei ist jetzt, dass nicht REDIS_HOST, sondern REDIS_URL definiert wird.6

Zu guter Letzt die Mastodon-services herbeirufen:

$ systemctl enable --now mastodon.target

Nginx

Zu früh gefreut! Es fehlt noch ein Webserver, der den Content dem Internetz präsentiert. Die Mastodon-Docs gehen von nginx7 aus. Vorausgesetzt einen bereits konfigurierten Server kann man sich hier an der Beispiel-Konfiguration in /var/lib/mastodon/dist/nginx.conf orientieren. Zusätzlich zur richtigen Domain anstelle von example.com muss hier noch jeder Verweis auf /home/mastodon/live/public zu /var/lib/mastodon/public geändert werden.

Damit der http-User von nginx auf die Daten in /var/lib/mastodon/public zugreifen kann, müssen gegebenenfalls noch Zugriffsberechtigungen geändert werden:8

$ chmod -R o= /var/lib/mastodon
$ usermod -aG mastodon http

??? Profit

Nun kann man seine Mastodon-Instanz aufrufen und damit loslegen sich einen Namen auszusuchen, den ersten Tröt zu verfassen, etc.

Zuletzt noch unverschämte Werbung für meine Instanz: social.sir-photch.xyz. Face reveal?? Lasst mir nen Follow da! 😉

Weiterlesen