Soziales Netzwerk Mastodon auf VPS installieren und hosten
Mastodon ist ein freier Social Network Server, der sich mithilfe des ActivityPub-Protokolls mit anderen Servern aus dem ActivityPub-Netzwerk austauschen und mit diesen zusammen ein dezentrales soziales Netzwerk bilden kann (siehe Video: „Was ist Mastodon?„). Diese Anleitung erklärt, wie ein eigener Mastodon-Server auf einem easyname VPS installiert wird.
Info: Eine Alternative zur manuellen Installation besteht darin, Mastodon in Docker-Containern auszuführen. Diese Art des Setups wird allerdings nicht für Produktivinstanzen empfohlen daher in dieser Anleitung nicht näher erläutert.
Vorbereitung des Servers
Bestelle einen passend dimensionierten VPS über die easyname Homepage. Stelle dabei sicher, dass Ubuntu Server 20.04 (LTS) vorinstalliert ist und verzichte auf die Installation von Plesk.
Nach der Bestellung eines passenden VPS wird im Cloudpit unter „Netzwerkeinstellungen“ zuerst der Hostname des Servers angepasst und auf den Domainnamen gesetzt:
Danach folgt die Anpassung der IP-Adressen. Stelle sicher, dass dein Server über eine IPv4- und eine IPv6-Adresse verfügt und beide Adressen mit dem Domainnamen als Reverse-DNS-Eintrag versehen sind (siehe Screenshot).
Nun müssen in den DNS-Einstellungen deiner eigenen Domain noch zwei Einträge angelegt werden, die jeweils auf die IPv4-Adresse und die IPv6-Adresse deines Servers verweisen:
Logge dich dann auf dem Server ein und aktualisiere das System:
apt update
apt upgrade -y
Nun wird der Server neu gestartet, um den neuen Hostname und die Updates zu übernehmen:
reboot
Laufzeitumgebung installieren
Mastodon besteht aus Ruby- und NodeJS-Komponenten. Zurück in der root-Kommandozeile werden nun die entsprechenden Laufzeitumgebungen installiert. Voraussetzung dafür ist jedoch, dass curl
auf dem System installiert ist:
apt install curl
Abhängigkeiten installieren
Der bereits vorinstallierte Apache2 Webserver wird nicht benötigt und entfernt:
systemctl stop apache2
apt remove --purge apache2
Neben verschiedenen von Mastodon verwendeten Bibliotheken werden auch PostgreSQL, Redis und ein Nginx Webserver installiert:
apt install -y \ imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core \ g++ libprotobuf-dev protobuf-compiler pkg-config gcc autoconf \ bison build-essential libssl-dev libyaml-dev libreadline6-dev \ zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev \ nginx redis-server redis-tools postgresql postgresql-contrib \ libidn11-dev libicu-dev libjemalloc-dev
Node.js und Yarn installieren
Paketquellen registrieren:
curl -sL https://deb.nodesource.com/setup_12.x | bash -
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
apt update
Nodejs und Yarn Pakete installieren:
apt install -y \
nodejs \
yarn
Ruby-Umgebung installieren
Die Ruby-Laufzeitumgebung für Mastodon wird nur für den Mastodon-User installiert, unter welchem die Software ausgeführt wird. Der mastodon
User wird wie folgt angelegt:
adduser --disabled-login mastodon
Wechsle dann zum Mastodon-User:
su - mastodon
… und installiere rbenv
– ein Tools zur Verwaltung von Ruby-Umgebungen:
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec bash
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
Nun kann Ruby 2.7.2 installiert und als default-Rubyversion gesetzt werden:
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 2.7.2
rbenv global 2.7.2
Version 2.7.2 muss ersetzt werden durch die aktuell benötigte Ruby-Version. Diese kann den Mastodon-Releasenotes entnommen werden. Zum Stand der Veröffentlichung dieser Anleitung wird Version 2.7.2 empfohlen.
Schließlich wird die Ruby-Paketverwaltung „bundler“ installiert…
gem install bundler --no-document
und zurück zum root-User gewechselt:
exit
Postgres-Datenbank konfigurieren
Der PostgreSQL Datenbankserver wurde bereits installiert – nun fehlt noch ein passender Zugang für den mastodon
Systembenutzer. Die Mastodon-Software soll sich ohne Passwort am Datenbankserver anmelden können. Stattdessen wird sie über den Linux-Systembenutzernamen authentifiziert. Damit das funktioniert, muss der Benutzername für den PostgreSQL-Datenbankbenutzer identisch mit dem Systembenutzer sein. Logge dich als Admin in PostgreSQL ein:
sudo -u postgres psql
… und erstelle dann den passenden mastodon
User:
CREATE USER mastodon CREATEDB;
Mit
\q
Kann die PostgreSQL Kommandozeile wieder verlassen werden.
Die Performance der PostgreSQL-Datenbank kann je nach verfügbaren Systemressourcen optimiert werden. Dazu gibt es unter https://pgtune.leopard.in.ua/#/ einen Konfigurationsgenerator, der nach Eingabe verschiedener Systemmerkmale wie Anzahl der CPU-Cores und RAM eine optimierte PostgreSQL-Konfiguration ausgibt.
Die so entstandene Konfiguration wird unter /etc/postgresql/12/main/postgresql.conf
am Ende der Datei (unter „Customized options“) angehängt. Danach wird der Datenbankserver neu gestartet:
systemctl restart postgresql
Mastodon herunterladen
Zurück zu Mastodon-Benutzer:
su - mastodon
Nun wird der neueste Mastododon-Release über einen Git Checkout heruntergeladen:
git clone https://github.com/tootsuite/mastodon.git live && cd live
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
Informationen zu allen Releases stehen auf https://github.com/tootsuite/mastodon/releases bereit.
Dann werden Ruby- und NodeJS-Abhängigkeiten installiert:
bundle config deployment 'true'
bundle config without 'development test'
bundle install -j$(getconf _NPROCESSORS_ONLN)
yarn install --pure-lockfile
Der Prozess kann einige Minuten dauern.
Mastodon Setup Wizard ausführen
Nun ist es an der Zeit, den Mastodon Setup Wizard zu starten. Dieser frägt einige wichtige Einstellungen für deine Mastodon-Instanz ab und speichert sie am Ende in der versteckten Datei .env.production
.
RAILS_ENV=production bundle exec rake mastodon:setup
ausführen, um das Setup zu starten.
- Domain name:
mastodon.vps-easyname.at
(durch eigenen Domainnamen ersetzen!) - Do you want to enable single user mode?: N
- Are you using Docker to run Mastodon?: N
- PostgreSQL host: (auf default lassen, Enter)
- PostgreSQL port: (auf default lassen, Enter)
- Name of PostgreSQL database: (auf default lassen, Enter)
- Name of PostgreSQL user: (auf default lassen, Enter)
- Password of PostgreSQL user: (leer lassen, Enter)
- Redis host: (auf default lassen, Enter)
- Redis port: (auf default lassen, Enter)
- Redis password: (auf default lassen, Enter)
- Do you want to store uploaded files on the cloud?: N
- Do you want to send e-mails from localhost?: N
- SMTP server: (hier den smtp-Server für die Verbindung zu dem Mailaccount angeben. Meist:
smtp.anbieter.tld
) - SMTP port: (hier den Port des SMTP-Servers angeben. Meist
587
.) - SMTP username: (die Mailadresse für die Anmeldung)
- SMTP authentication: (in den meisten Fällen:
plain
) - SMTP OpenSSL verify mode: none
- E-mail address to send e-mails „from“: (gleich, wie Mailadresse für Login)
- Send a test e-mail with this configuration right now?: Y (ja, E-Mail Test durchführen.)
- Send test e-mail to: (beliebige Mailadresse als Empfänger eingeben)
- Save configuration?: Y
- Prepare the database now?: Y
- Compile the assets now?: Y
- Do you want to create an admin user straight away?: Y
- Username: admin
- E-Mail: (eigene Mailadresse für Adminaccount eingeben)
Nach dem Anlegen des Adminsaccounts wird ein automatisch generiertes Passwort angezeigt. Speichere es dir gut ab – du kannst es später in Deinen Kontoeinstellungen ändern!
Im Hintergrund werden die Datenbanken angelegt und Caches erzeugt. Die fertige Konfiguration wird unter .env.production
abgelegt und kann später von Hand nachkorrigiert werden, wenn spezielle Einstellungen gesetzt werden sollen. Vorerst ist das jedoch nicht notwendig.
Mastodon-User wieder verlassen:
exit
Nginx Webserver konfigurieren
Nginx bekommt eine neue Virtual Host Konfiguration für Mastodon, welche aus dem Mastodon Sourcecode-Verzeichnis kopiert und dann angepasst wird:
cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon
Die Datei /etc/nginx/sites-enabled/mastodon
nun öffnen und bearbeiten:
example.com
wird ersetzt durch eigenen Domainnamen. (2x – beiserver_name
)- Snakeoil-Zertifikate temporär nutzen, damit der Server starten kann. Die folgenden Zeilen werden unter „Uncomment these lines once you acquire a certificate“ eingefügt:ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
Nginx (neu)starten:
systemctl restart nginx
Im nächsten Schritt werden die Demo-Zertifikate durch echte ersetzt.
SSL-Zertifikate einrichten
Acme.sh herunterladen und installieren (Mailadresse durch eigene ersetzen!):
![](Bildschirmfoto%202021-06-02%20um%2011.57.00.png)
An die Mailadresse my@example.com
werden Benachrichtigungen gesendet, falls bei der automatischen Erneuerung der Zertifikate etwas schiefgelaufen ist und die Zertifikate auszulaufen drohen.
Profil neu laden, damit acme.sh
Kommandos verfügbar werden:
source ~/.profile
Neues Zertifikat beantragen:
acme.sh --issue --nginx -d mastodon.vps-easyname.at
(mastodon.vps-easyname.at durch eigenen Domainnamen ersetzen!)
Kurz darauf sollte die Beantragung ohne Fehlermeldung abgeschlossen sein.
Das Zertifikat installieren:
mkdir -p /etc/tls/mastodon.vps-easyname.at
acme.sh --install-cert -d mastodon.vps-easyname.at \
--key-file /etc/tls/mastodon.vps-easyname.at/privkey.pem \
--fullchain-file /etc/tls/mastodon.vps-easyname.at/fullchain.pem \
--reloadcmd "/bin/systemctl reload nginx"
Das Zertifikat kann nun in Nginx genutzt werden. Dazu wird die Nginx-vHost Konfiguration in /etc/nginx/sites-enabled/mastodon
noch einmal angepasst:
ssl_certificate /etc/tls/mastodon.vps-easyname.at/fullchain.pem;
ssl_certificate_key /etc/tls/mastodon.vps-easyname.at/privkey.pem;
Nun wird Nginx ein letztes Mal neu gestartet, um das neue Zertifikat zu laden:
systemctl restart nginx
Systemd-Services erstellen und starten
Um die einzelnen Mastodon-Komponenten einfacher starten und steuern zu können, werden nun Startup-Definitionen für Systemd in das passende Verzeichnis kopiert:
cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/
Danach können die Dienste aktiviert und gestartet werden:
systemctl daemon-reload
systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming
Mastodon sollte nun starten. Das kann je nach Server einige Sekunden dauern. Unter https://mastodon.vps-easyname.at solltest du kurz darauf das Mastodon Webinterface sehen können. Logge dich mit deinem vorher erstellten Benutzeraccount ein.
Den Server mit einem ActivityPub-Relay verbinden
Die Timeslines werden zu beginn noch sehr leer sein, weil dein Server noch keine anderen Benutzer oder Server kennt, mit denen er Posts austauschen kann. Indem du dich mit anderen Benutzern auf anderen Mastodon-Servern vernetzt (Nachrichten schreiben, Benutzern folgen), knüpft dein Server im Hintergrund Verbindungen zu anderen Instanzen und beginnt, die Timelines mit Inhalten zu füllen. Je nach Intensität deiner Interaktionen im Mastodon-Netzwerk kann dies etwas dauern. Wenn du den Vorgang etwas beschleunigen willst, kann du deinen Server mit einem sog. „ActivityPub Relay“ verbinden. Das sind Server, an denen Posts zwischen mehreren Servern ausgetauscht und geteilt werden können. Der Vorteil für neue Server: Sie nehmen direkt am Austausch teil und lernen so schnell andere Server kennen.
Beispiele für solche Relays findest du z.B. hier:
https://the-federation.info/activityrelay
Unter „Einstellungen > Administration > Relais“ können Verbindungen zu einem oder mehreren Relays hergestellt werden. Um eine Verbindung zu einem Relay aufzubauen, klicke auf „Relaisverbindung einrichten“. Gib dann eine oder beide der obenstehenden Adressen ein und klicke auf „Speichern und aktivieren“. Das Relay erscheint dann in der Übersicht. Unter Umständen wird „Warte auf Zustimmung des Relays“ eingeblendet. Die Zustimmung wird in der Regel sofort (Seite neu laden) oder nach einer Wartezeit von wenigen Stunden erteilt und der Server kann am Post-Austausch teilnehmen.
Die Öffentliche Timeline („Föderation“) sollte sich nun langsam mit Posts füllen. Doch denke daran: Jeder eingehende Post (vor allem solche mit Grafiken) benötigen Speicher. Je mehr sich dein Server mit anderen austauscht, desto mehr Speicher wird mit der Zeit benötigt. Halte daher den Speicherverbrauch deines Servers regelmäßig im Auge und verzeichte auf Relays, wenn zu viele Daten eingehen.
Sonstige Servereinstellungen vornehmen
Zunächst sollte unter „Einstellungen > Profil“ das eigene Administrator-Profil gepflegt werden. Neben dem Anzeigenamen können auch ein Profilbild und ein persönliches Hintergrundbild für die Profilseite sowie weitere Informationen zum Nutzer eingegeben werden. Wenn du Deinen Server für andere Nutzer öffnen willst, solltest du hier einige Informationen hinterlegen, um das Vertrauen der Community zu erlangen.
Unter „Einstellungen > Administration > Servereinstellungen“ kannst weitere wichtige Einstellungen vornehmen, die den Server als Ganzes betreffen. Hier kannst du Beschreibungen eingeben, die auf der Startseite oder in den Nutzungsbedingungen erscheinen und neuen Nutzern angezeigt werden. Versuche, hier die Eigenschaften deines Servers zu beschreiben, wie zum Beispiel Zielgruppe oder Themen, die auf deinem Server behandelt werden. Viele Mastodon-Server widmen sich eigenen Themenbereichen, zum Beispiel Fotografie, Politik oder Musik. Der Vorteil: Die Lokale Timeline ist dann mit besonders interessanten Inhalten gefüllt. Nichtsdestotrotz schließen die meisten Server auch Diskussionen und Beiträge zu anderen Themen nicht aus.
Eine Einstellung verdient noch besondere Beachtung: Auf der gerade erwähnten Seite kann oben der Registrierungsmodus geändert werden. Mit dieser Einstellung lässt sich festlegen, ob eine Mastodon-Instanz von jedem beliebigen Interessenten genutzt werden kann, oder ob der Zugang durch Einladungen reguliert werden soll. Um Spam zu verhindern, hat sich die Einstellung „Zustimmung benötigt zur Registrierung“ in Kombination mit der weiter unten stehenden Option „Neue Benutzer müssen einen Einladungstext ausfüllen“ als günstig erwiesen: So werden Spamaccounts frühzeitig vermieden und ernsthafte Interessenten können kurz erklären, wieso sie deine Instanz interessant finden und gerne beitreten würden. Du kannst ihnen denn Einlass gewähren, wenn Du sie auf deinem Server aufnehmen willst.
An dieser Stelle sei noch einmal ausdrücklich darauf hingewiesen, dass Mastodon ein föderiertes Netzwerk ist: Um mit anderen Mastodon-Nutzern zu kommunizieren, muss man in der Regel nicht auf demselben Server registriert sein. Die ganze Idee hinter Mastodon ist, dass sich das Netzwerk ähnlich wie eine einzige Plattform verhält, obwohl sie auf verschiedene eigenständige Server verteilt ist.
Auch, wenn sich die meisten Mastodon-Nutzer benehmen, gibt es immer wieder Störenfriede, die durch Spam oder anderes schädliches Verhalten negativ auffallen. In solchen Fällen können die Moderationsfunktionen unter „Einstellungen > Moderation“ genutzt werden. Hier lassen sich einzelne Nutzer oder sogar ganze Server in verschiedenen Schärfegraden blockieren. Es empfiehlt sich, als Serveradministrator Moderatoren zu ernennen oder selbst immer wieder einen Blick in die Timeslines zu werfen und ggf. Maßnahmen zu ergreifen.
Hilfsangebote
Das Betreiben einer Mastodon-Instanz kann bei technischen Unregelmäßigkeiten durchaus anspruchsvoll sein. Wenn man sich im Ruby-Dschungel nicht zurecht findet oder die Datenbank streikt, kannst du versuchen, Entwickler und andere Admins im Mastodon Forum zu erreichen: https://discourse.joinmastodon.org/
Zudem findet sich auch über die Beiträge in den Timeslines oftmals der ein oder andere Administrator, mit dem man sich zum Betrieb austauschen kann.
Updates
Updates gehören mit dazu! Mastodon wird nicht mehr in der hohen Geschwindkeit weiterentwickelt, wie es einmal der Fall war. Denn die wichtigsten Funktionen sind implementiert und funktionieren zuverlässig. Doch Detailverbesserungen und Security-Fixes werden noch immer regelmäßig bereitgestellt. Um kein Update zu verpassen, solltest du das Github-Repo abonniert haben und dich bei Neuigkeiten wie z.B. neuen Releases via E-Mail benachrichtigen lassen.
Neuen Releases hängen immer Release-Notes an, die die Änderungen beschreiben und am Ende Anweisungen zur Updateprozedur geben. Wichtig: Wenn du Update-Kommandos über die Kommandozeile ausführst, muss das in der Regel als mastodon
Benutzer geschehen – nicht als root!
Üblicherweise sieht eine Befehlsfolge für ein Mastodon-Update so oder so ähnlich aus: (Beispiel für Update auf Version 4.0.0)
su - mastodon
cd live
git fetch
git checkout v4.0.0
bundle install
yarn install
RAILS_ENV=production bundle exec rails assets:precompile
exit
systemctl restart mastodon-sidekiq
systemctl restart mastodon-streaming
systemctl restart mastodon-web
Wichtig! Release-spezifische Kommandos, die für ein Update ausgeführt werden müssen, werden immer explizit in den Release Notes genannt. Es genügt nicht, diese Kommandos stur bei jedem Update auszuführen. So müssen bei einigen Releases zusätzlich noch Datenbankmigrationen ausgeführt werden, die in dieser Befehlsfolge an der richtigen Stelle eingebettet werden müssen! Ein Blick in die Release-Notes ist also essentiell, wenn man seine Mastodon-Instanz mit dem nächsten Update nicht beschädigen will.
easyname ist ein erfolgreicher und bekannter österreichischer Anbieter von Cloud-Services, Domains sowie Webhosting bis hin zur Server-Infrastruktur und gehört seit 2020 zur dogado group.
Das Unternehmen ist seit 2006 in Österreich erfolgreich am Markt und inzwischen auch in vielen anderen Ländern weltweit tätig. Sowohl das Team als auch die gehosteten Daten befinden sich in Österreich.
easyname liegt die Datensicherheit besonders am Herzen und stellt daher zu jedem Hosting-Paket auch kostenlose SSL-Zertifikate zur Verfügung. Mit intuitiven Tools zur Erstellung von Websites und Webshops und mit Easy Install Apps wie WordPress, Joomla oder PrestaShop können alle easyname-Kunden schnell in die Online-Welt einsteigen.