• Warum dogado?
Wähle ein Artikel
Mastodon-Instanz auf VPS/vServer installieren und hosten
Mastodon-Instanz auf VPS/vServer installieren und hosten

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 vServer über die Dogado 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-dogado.de (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 - bei server_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!):

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-dogado.de

(mastodon.vps-dogado.de durch eigenen Domainnamen ersetzen!)

Kurz darauf sollte die Beantragung ohne Fehlermeldung abgeschlossen sein.

Das Zertifikat installieren:

mkdir -p /etc/tls/mastodon.vps-dogado.de 

acme.sh --install-cert -d mastodon.vps-dogado.de \
    --key-file /etc/tls/mastodon.vps-dogado.de/privkey.pem \
    --fullchain-file /etc/tls/mastodon.vps-dogado.de/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-dogado.de/fullchain.pem;
ssl_certificate_key /etc/tls/mastodon.vps-dogado.de/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-dogado.de 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 sind:

  • https://ap-relay-ger.650thz.de/inbox (Für den deutschsprachigen Raum, betrieben von Thomas Leister)
  • https://relay.chemnitz.social/inbox (Ebenfalls deutschsprachig, betrieben von Mirko S.)

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.

Nächster Artikel
Teamspeak auf vServer installieren
Weitere passende Themen