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
    • E-Mail
      • b1gMail Plugins
    • Hosting
    • Nextcloud
    • Monitoring
  • Blog
  • Hilfe & Support
    • Remote Support
  • Kontakt
  • Home
  • Blog
  • Linux
  • Debian
  • Der eigene Mastodon Server
15. Juni 2025

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.

 

OneSystems GmbH - Hosting

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://gist.githubusercontent.com/tareq1988/8b189799270ae12ee6665c9088cf9880/raw/31db814f9ed99a70610f1c268a9e04a8c5669fd8/disposable-email-provider-domains)
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

Python PIP ohne APT oder YUM installieren
LVM Festplatte vergrössern ohne neue Partition
LiveConfig mit Fail2Ban absichern

Schreibe einen Kommentar Antworten abbrechen

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

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

Letzten Beiträge

  • 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 ...
  • Windows Server 2025 bereinigen

    Wenn man den Windows Server 2025 (sowie auch äl...
  • Anmelden über die Webcam unter Ubuntu einrichten

    Das einfache Anmelden über die Webcam wie man e...
  • Wie kann man unter Ubuntu den Bildschirm teilen?

    Ich habe ab und an eine Präsentation und muss d...

Neueste Kommentare

  • 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
  • Der Weg von Windows zu Linux (Teil 1) - OneSystems GmbH bei Yubikey Manager und Yubico Authenticator unter Ubuntu installieren
  • Michael Kleger bei Eigener CardDAV- und CalDAV Server mit Baikal

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

Der IT-Dienstleister OneSystems GmbH mit Sitz in Wattwil versteht sich als Full-Service-Dienstleister für die Umsetzung und Betreuung von IT-Infrastrukturen, Internetseiten und individueller Programmierung. Wir betreuen Kunden aus der ganzen Schweiz, Deutschland und Österreich.

Wir legen grossen Wert auf eine technisch einwandfreie Umsetzung nach aktuellen Standards bei nachhaltiger Qualität.

Letzten Blog Posts

  • Migration von Datenbanken in Docker: So gelingt das Upgrade sicher und sauber

  • Automatisierte Backups mit Docker, Cron, Nextcloud Talk & E-Mail

  • Windows Server 2025 bereinigen

Kontakt

Email: Kontaktformular

OneSystems GmbH
Grindlenstrasse 9
9630 Wattwil
Schweiz

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

TOP