Mit dem Kauf Twitters durch Elon Musk werden schlagartig Alternative zu Twitter interessant. Eine davon ist Mastodon eine dezentrale Open Source Alternative, die Teil des Fediverse ist. Die Dezentralität beruht darauf, dass eigentlich jeder einen Mastodon Server betreiben kann.
Dieses Tutorial beschreibt alle notwendigen Schritte um einen eigenen Mastodon Server mit Docker Compose einzurichten.
Voraussetzungen
Diese Tutorial setzt voraus, dass du auf deiner Distribution bereits einige Pakete installiert hast:
- Docker Compose
- Git
Vorbereitungen
Zuerst klonen wir uns das Mastodon Repository an einen entsprechenden Ort, den ihr frei wählen könnt:
cd /opt/
git clone https://github.com/mastodon/mastodon.git
cd /opt/mastodon
Bestimmte Version nutzen
Wenn du eine bestimmte Mastodon Version nutzen möchtest solltest du diese entsprechend auschecken:
git checkout v4.0.2
Konfiguration
Nun müssen wir unseren Mastodon Server konfigurieren bzw. einrichten. Dazu kopieren wir uns die Konfigurationsvorlage:
cp .env.production.sample .env.production
Wir laden alle notwendigen Images herunter:
docker-compose pull
Nun führen wir den Setup Assistent von Mastodon aus:
docker-compose run --rm web bundle exec rake mastodon:setup
Domainname
Als ersten musst du den Domainnamen deiner Mastodon Instanz eintragen. Diese Einstellung kann später nicht einfach angepasst werden, deswegen entscheide dich hier gut.
In meinem Fall wäre das:
social.nubecula.org
Single User Mode
Nun musst du dich entscheiden ob du deinen Mastodon Server allein nutzen willst oder du auch andere Benutzer zulassen willst.
Docker
Nun wirst du gefragt ob du Docker benutzt. Das wäre in diesem Fall natürlich “ja”.
PostgreSQL
Nun geht an die Konfiguration der PostgreSQL Datenbank.
Host
Hier kannst du den Host eines bestehenden PostgreSQL Servers eintragen oder einfach die Vorauswahl “db” mit Enter bestätigen um einen neuen anzulegen.
Port
Hier wird entsprechend der Port eingetragen. Will man den nicht ändern die Vorauswahl “5432” einfach mit Enter bestätigen.
Datenbankname
Einen Namen wählen oder einfach mit Enter bestätigen.
Benutzer
Einen Namen wählen oder einfach mit Enter bestätigen.
Passwort
Du solltest hier ein sicheres Passwort für die Datenbank vergeben! Ich generiere mir das selbst mit OpenSSL. Gebt dafür in einer anderen Konsole folgenden Befehl ein und kopiert das Passwort entsprechend:
openssl rand -base64 32
Redis
Nun müssen wir den Redis Server konfigurieren.
Host
Hier kannst du den Host deines Redis Servers angeben oder einfach einen Neuen erstellen durch drücken von Enter.
Port
Gleiches gilt natürlich auch für den Redis Port.
Passwort
Sollte der angegebene Redis Server ein Passwort benötigen oder du eines definieren willst kannst du das nun tun.
Dateien in Cloud
Prinzipiell werden alle hochgeladenen Dateien auf dem Rechner auf dem der Mastodon Server läuft abgelegt.
Wenn Ihr ein Mehrnutzersystem betreibt, können da schnell ein paar Daten beisammen kommen. Deshalb kannst du wählen, ob die hochgeladenen Dateien wie Bilder, etc. in einem Cloud Speicher wie z.B. einem Amazon S3 Bucket abgelegt werden sollen.
In meinem Fall verzichte ich darauf.
Gerade bei Mehrnutzersystemen muss ein SMTP Server eingerichtet werden, damit Dinge wie Registrierung und Passwort zurücksetzen überhaupt sinnvoll funktionieren können.
Wenn du einen externen SMTP Server angeben willst musst du die Frage mit “N” beantworten
SMTP Server
Hier den Hostnamen deines SMTP Servers eintragen.
SMTP Port
Hier den Port deines SMTP Servers eintragen.
SMTP Benutzername
Hier den Benutzernamen bzw. Email Adresse deines Kontos auf dem SMTP Servers eintragen. Ich habe mir hierfür extra eine eigens Email Konto angelegt.
SMTP Passwort
Hier entsprechend das Passwort für dein Konto eintragen.
SMTP Authentifizierung
Hier die Authentifizierungsmethode des SMTP Servers auswählen.
SMTP OpenSSL
Hier musst du die Verifikationsmethode für das SMTP Server Zertifikats auswählen. Am einfachsten wäre das “none”.
Email Adresse
Hier kannst du nun die nach außen sichtbare Email Adresse in Form von “Mastodon mastodon@example.org” eingeben.
Test Email
Nun kannst du wählen, ob du eine Test Email senden möchtest. Das sollte man unbedingt tun, um zu wissen, ob auch alles richtig funktioniert.
Konfiguration abgeschlossen
Nun ist die Konfiguration des Mastodon Servers abgeschlossen.
Datenbank
Der Setup Assistent fragt nun, ob du die Datenbank anlegen möchtest und warnt aber zugleich, dass er eine bestehende Datenbank mit gleichen Namen löschen wird. Also besser nochmal kontrollieren ob alles so stimmt!
Admin Konto erstellen
Nun wirst du gefragt, ob du ein Admin Konto erstellen möchtest. Das solltest du hier unbedingt tun. Du bekommst im Anschluss ein Passwort mit dem du dich anmelden kannst. Nach dem ersten Login sollte das Passwort unbedingt geändert werden!
Dateiberechtigungen
Nun müssen wir noch ein paar notwendige Datei Berechtigungen setzen, ansonsten funktioniert z.B. der Upload von Bilder nicht:
chown -R 991:991 /opt/mastodon/public
Mastodon starten
Um euren Server zu starten muss der Container gestartet werden:
docker-compose up -d
Nginx Proxy einrichten
In meiner Nginx Konfiguration richte ich eine Proxy Umleitung auf den Mastodon Server ein.
...
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_pass http://localhost:3000;
}
location /api/v1/streaming {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Proxy "";
proxy_pass http://localhost:4000;
proxy_buffering off;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
[1]
tcp_nodelay on;
}
...
Natürlich solltet ihr den Nginx Server mit einem SSL Zertifikat von Let’s Encrypt absichern! Das soll aber nicht Teil dieses Tutorials sein.
Ende
Damit haben wir die Einrichtung eines eigenen Mastodon Server abgeschlossen.
Let’s toot…