Haben Sie Fragen? Senden Sie uns doch eine Nachricht

OneSystems GmbH

OneSystems GmbH

System Management aus der Schweiz

+41 44 586 40 18
Email: info@onesystems.ch

OneSystems GmbH
Grindlenstrasse 9, 9630 Wattwil, Schweiz

Open in Google Maps
  • Home
  • Dienstleistungen
    • Web Hosting
    • E-Mail Hosting
    • Ihre eigene Daten Cloud
  • Blog
  • Hilfe & Support
    • Remote Support
  • Kontakt
  • Home
  • Blog
  • Linux
  • Debian
  • Der eigene Mastodon Server
16. Januar 2026

Der eigene Mastodon Server

Der eigene Mastodon Server

by Michael Kleger / Dienstag, 05 November 2024 / Published in Debian, Linux

Was ist Mastodon?

Mastodon ist ein Mikroblogging-Dienst. Er bietet den Nutzern Kurznachrichten, Hashtags, Likes und Follower sowie private Nachrichten. Aber statt mit Herzchen wird auf Mastodon mit Sternchen auf Beiträge reagiert. Auf Mastodon wird „getrötet“ – und nicht „getweetet“. Ein „Tröt“ darf bis zu 500 Zeichen lang sein.

 

Voraussetzungen für deinen Mastodon Server:

  • Debian 12 (mit root Zugang) und für den Start mindestens 2 Prozessorkerne, 8 GB Arbeitsspeicher und 50 GB Speicherplatz
  • Domain, unter der der Server erreichbar sein soll (Bsp.: So wie unser Hauseigene Instanz swissodon.ch)
  • E-Mail Server (kann auch lokal laufen)

 

Installation

System repositories

apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates

 

Installation Node.js

curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list

apt update
apt install nodejs -y

 

PostgreSQL installieren

wget -O /usr/share/keyrings/postgresql.asc https://www.postgresql.org/media/keys/ACCC4CF8.asc
echo "deb [signed-by=/usr/share/keyrings/postgresql.asc] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/postgresql.list

 

System Packages installieren

apt update
apt install -y \
  imagemagick ffmpeg libvips-tools 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 nodejs redis-server redis-tools postgresql postgresql-contrib \
  certbot python3-certbot-nginx libidn11-dev libicu-dev libjemalloc-dev

 

Elasticsearch installieren

apt install -y openjdk-17-jre-headless
wget -O /usr/share/keyrings/elasticsearch.asc https://artifacts.elastic.co/GPG-KEY-elasticsearch
echo "deb [signed-by=/usr/share/keyrings/elasticsearch.asc] https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list
apt update && apt install -y elasticsearch
systemctl daemon-reload
systemctl enable --now elasticsearch

 

Yarn

corepack enable
yarn set version classic

 

Installation Ruby

rbenv muss für einen einzelnen Linux-Benutzer installiert werden, deshalb legen wir erstmal den User an, unter dem Mastodon laufen soll.

useradd -m mastodon
usermod --shell /bin/bash mastodon
su - mastodon

 

ruby-build installieren:

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
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 root)"/plugins/ruby-build

Mit dem folgenden Befehl kann ausgegeben werden welche Versionen verfügbar sind:

rbenv install -l

Installation der ausgewählten Version starten:

RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.3.5
rbenv global 3.3.5

gem install bundler --no-document
exit

 

PostgreSQL Benutzer anlegen

sudo -u postgres psql -c "CREATE USER mastodon CREATEDB"

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/17/main/postgresql.conf am Ende der Datei (unter „Customized options“) angehängt. Danach wird der Datenbankserver neu gestartet:

systemctl restart postgresql

 

Mastodon installieren

su - mastodon
git clone https://github.com/mastodon/mastodon.git live && cd live
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

bundle config deployment 'true'
bundle config without 'development test'
bundle install -j$(getconf _NPROCESSORS_ONLN)

yarn install

 

Mastodon Config File generieren

RAILS_ENV=production bundle exec rake mastodon:setup; exit

 

Die folgenden Fragen für die Konfiguration beantworten:

Your instance is identified by its domain name. Changing it afterward will break things.
Domain name: swissodon.ch

Single user mode disables registrations and redirects the landing page to your public profile.
Do you want to enable single user mode? No

Are you using Docker to run Mastodon? no

PostgreSQL host: /var/run/postgresql
PostgreSQL port: 5432
Name of PostgreSQL database: mastodon_production
Name of PostgreSQL user: mastodon
Password of PostgreSQL user:
Database configuration works!

Redis host: localhost
Redis port: 6379
Redis password:
Redis configuration works!

Do you want to store uploaded files on the cloud? No

Do you want to send e-mails from localhost? No
SMTP server: dein.webserver.ch
SMTP port: 587
SMTP username: dein@webserver.ch
SMTP password:
SMTP authentication: plain
SMTP OpenSSL verify mode: none
Enable STARTTLS: auto
E-mail address to send e-mails "from": Mastodon <dein@webserver.ch>
Send a test e-mail with this configuration right now? Yes
Send test e-mail to: deine@eigeneadresse.ch

Do you want Mastodon to periodically check for important updates and notify you? (Recommended) Yes

This configuration will be written to .env.production
Save configuration? Yes

Now that configuration is saved, the database schema must be loaded.
If the database already exists, this will erase its contents.
Prepare the database now? Yes
Running `RAILS_ENV=production rails db:setup` ...

Do you want to create an admin user straight away? Yes
Username: admin
E-mail: deine@eigeneadresse.ch

Die Produktive Mastodon Konfiguration (.env.production) mit dem Elasticsearch block erweitern:

ES_ENABLED=true
ES_HOST=localhost
ES_PORT=9200
ES_PRESET= single_node_cluster
# ES_USER=
# ES_PASS=

Wenn man die Installation noch absichern möchte, kann die nötige Konfiguration auf der Mastodon Seite nachlesen.

Nginx einrichten

Mastodon bringt gleich eine passende Nginx Konfiguration mit, die wie folgt aktiviert wird:

cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
rm /etc/nginx/sites-enabled/default
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 mit und ohne www. (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

 

SSL / TLS Zertifikat

certbot certonly --nginx -d swissodon.ch -d www.swissodon.ch

Die Nginx Konfiguration nochmals anpassen damit das richtige Zertifikat geladen wird:

ssl_certificate 	/etc/letsencrypt/live/swissodon.ch/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/swissodon.ch/privkey.pem;

 

nginx -t && systemctl reload nginx

 

Systemd

Zum Schluss können die von Mastodon bereitgestellten Systemd Units kopiert und angepasst werden.

cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/

noch einmal kontrollieren, ob alles richtig konfiguriert ist

vim /etc/systemd/system/mastodon-*.service

und die Services enablen und starten

systemctl daemon-reload
systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming

 

Elasticsearch indexierung einleiten

systemctl restart mastodon-sidekiq
systemctl reload mastodon-web

 

su - mastodon
cd live
RAILS_ENV=production bin/tootctl search deploy

 

Konfigurationen und Anpassungen

Relays

Mastodon-Relays sind Server, die in einem föderierten Mastodon-Netzwerk genutzt werden, um Instanzen (also verschiedene Mastodon-Server) miteinander zu verbinden und den Austausch von Inhalten zu fördern.

Folgende Urls verwenden wir bei SwissOdon:

  • https://relay.mp-development.de/inbox
  • https://relay.21314.de/inbox
  • https://relay.molthagen.de/inbox
  • https://relay.kanoa.de/inbox
  • https://relay.infosec.exchange/inbox
  • https://relay.toot.io/inbox
  • https://relay.pissdichal.de/inbox
  • https://rel.re/inbox
  • https://relay.dresden.network/inbox
  • https://relay.intahnet.co.uk/inbox
  • https://relay.mycrowd.ca/inbox

 

Sperren von Wegwerf-Domains

Mit dem folgenden Snippet lassen sich relativ unkompliziert die meisten Wegwerf-Domains auf einmal sperren, einfach das Script unter dem Benutzer mastodon ausführen:

#!/bin/sh

cd /home/mastodon/live

list=$(curl https://files.onesystems.ch/domains/disposable-email-domains.txt)
for domain in $list
do
	RAILS_ENV=production bin/tootctl email-domain-blocks add $domain
done

 

 

Analysieren mit Matomo

Matomo ist eine Open-Source-Software zur Webanalyse, die es ermöglicht, Besucherstatistiken und Interaktionen auf Websites oder Apps zu verfolgen. Sie bietet ähnliche Funktionen wie Google Analytics, aber mit einem starken Fokus auf Datenschutz und Datenhoheit.

Wie fügt man nun Matomo zur eigenen Mastodon Instanz hinzu?
Das ist relativ einfach, muss aber da die Mastodon Templates bearbeitet werden nach jedem Update erneut wieder eingefügt werden.

  1. Die Datei /home/mastodon/live/app/views/layouts/application.html.haml mit dem präferierten Editor öffnen
  2. Nach dem element „%title= html_title“ den folgenden Code einfügen und die MATOMO_URL und die SITE_ID bearbeiten
        / Matomo Tracking-Code
        :javascript
          var _paq = window._paq || [];
          _paq.push(['trackPageView']);
          _paq.push(['enableLinkTracking']);
          (function() {
            var u="//MATOMO_URL/";
            _paq.push(['setTrackerUrl', u+'matomo.php']);
            _paq.push(['setSiteId', 'SITE_ID']);
            var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
            g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
          })();
        / Ende Matomo Tracking-Code
  3. Damit das integrierte Content Security Policy System nicht anspringt muss noch in der Datei /home/mastodon/live/config/initializers/content_security_policy.rb zuunterst den folgenden Code block hinzugefügt werden
    Rails.application.config.content_security_policy do |policy|
      # Andere CSP-Einstellungen
      policy.connect_src :self, 'https://MATOMO_URL'
    end
    
  4. Damit jetzt die Änderungen auch angewendet werden muss noch als allerletztes den „mastodon-web“ Service neugestartet werden
    systemctl restart mastodon-web
    
  • Tweet
Tagged under: Installation, Linux, Mastodon, Matomo, Relays, Wegwerf-Domains

About Michael Kleger

What you can read next

ownCloud mit Fail2Ban absichern
Nextcloud bricht Download ab
Der GNOME-Login ist weg – so bringst du ihn zurück

Schreibe einen Kommentar Antwort abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.

Letzten Beiträge

  • Der GNOME-Login ist weg – so bringst du ihn zurück

    Nach einem Update oder Neustart kann es passier...
  • Wie die Remmina Verbindungen in Tabs statt in neuen Fenstern öffnen

    Wer regelmässig mit Remmina arbeitet, kennt das...
  • Dateien mit Sonderzeichen sicher löschen

    Beim Arbeiten auf Linux-Servern kann es vorkomm...
  • Migration von Datenbanken in Docker: So gelingt das Upgrade sicher und sauber

    Datenbank-Upgrades gehören zu den Aufgaben, die...
  • Automatisierte Backups mit Docker, Cron, Nextcloud Talk & E-Mail

    In diesem Beitrag zeige ich, wie man mit einem ...

Neueste Kommentare

  • Michael Kleger bei Festplatte einer Virtuellen Maschine verkleinern
  • Harald Strauch bei Festplatte einer Virtuellen Maschine verkleinern
  • Michael Kleger bei Mac OS X 10.11El Capitan‎: ISO für Installation erstellen
  • Danyel Gloser bei Mac OS X 10.11El Capitan‎: ISO für Installation erstellen
  • Wie kann man unter Ubuntu den Bildschirm teilen? - OneSystems GmbH bei Flatpack unter Ubuntu installieren

Categories

  • b1gMail
  • CentOS
  • Debian
  • Docker
  • Identitätsanbieter
  • Linux
  • Mac OSX
  • Microsoft Exchange
  • Microsoft Outlook
  • Migration
  • Mint
  • Monitoring
  • Neuigkeiten
  • Nextcloud
  • PowerShell
  • Python
  • Raspberry Pi
  • Sicherheit
  • Tipps und Tricks
  • Ubuntu
  • VMware
  • Webseiten
  • Webserver
  • Windows
  • Windows zu Linux

Die OneSystems GmbH mit Sitz in Wattwil ist ein unabhängiger IT-Dienstleister für die Planung, Umsetzung und den Betrieb moderner IT-Infrastrukturen, Weblösungen und individueller Software. Wir begleiten Unternehmen ganzheitlich von der Konzeption bis zum laufenden Betrieb und übernehmen dabei sowohl technische Verantwortung als auch den langfristigen Support.

Unsere Kunden stammen aus der Schweiz, Deutschland und Österreich und vertrauen auf Lösungen, die stabil, sicher und nachvollziehbar aufgebaut sind. Statt kurzlebiger Trends setzen wir auf saubere Architektur, etablierte Standards und nachhaltige Qualität, damit Systeme nicht nur heute funktionieren, sondern auch morgen noch beherrschbar bleiben.

Letzten Blog Posts

  • Der GNOME-Login ist weg – so bringst du ihn zurück

  • Wie die Remmina Verbindungen in Tabs statt in neuen Fenstern öffnen

  • Dateien mit Sonderzeichen sicher löschen

Kontakt

Email: Kontaktformular

OneSystems GmbH
Grindlenstrasse 9
9630 Wattwil
Schweiz

Copyright © 2018-2026 OneSystems GmbH, Alle Rechte vorbehalten.
Impressum | Datenschutzerklärung | AGBs | Kontakt

TOP