Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Willkommen zu dieser Anleitung zur Installation und Verwaltung einer Mastodon-Instanz auf Ubuntu 24.04.
Mastodon ist ein freies, quelloffenes soziales Netzwerk, das auf dezentraler Technologie basiert und eine Alternative zu zentralisierten Plattformen wie Twitter oder Facebook bietet.
Als föderiertes Netzwerk ermöglicht Mastodon Benutzern, ihre eigenen Server (Instanzen) zu betreiben, während sie gleichzeitig mit Benutzern auf anderen Instanzen kommunizieren können. Dies fördert die Freiheit der Nutzer, gibt ihnen mehr Kontrolle über ihre Daten und ermöglicht die Bildung von Gemeinschaften mit eigenen Regeln und Kulturen.
Diese Anleitung richtet sich nicht nur an Anfänger, sondern auch an fortgeschrittene User mit grundlegenden Linux-Kenntnissen, die ihre eigene Mastodon-Instanz aufsetzen und verwalten möchten. Wir werden Schritt für Schritt durch den gesamten Prozess gehen, von der Installation und Konfiguration bis hin zu fortgeschrittenen Themen wie Skalierung und Sicherheit.
Warum solltest du deine eigene Mastodon-Instanz betreiben?
Bitte beachte, dass der Betrieb einer Mastodon-Instanz Verantwortung und kontinuierliche Pflege erfordert. Diese Anleitung wird dir helfen, einen guten Start zu haben und deine Instanz langfristig erfolgreich zu betreiben .Lass uns nun mit der Einrichtung deiner eigenen Mastodon-Instanz beginnen!
Bevor du beginnst, stelle sicher, dass du Folgendes hast:
sudo apt update
ShellScriptsudo apt upgrade -y
ShellScriptDies aktualisiert alle installierten Pakete auf die neueste Version. Die Option „-y“ beantwortet alle Fragen automatisch mit „Ja“.
sudo apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates
ShellScriptDiese Pakete werden für verschiedene Aufgaben während der Installation benötigt.
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo 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" | sudo tee /etc/apt/sources.list.d/nodesource.list
ShellScriptDiese Befehle fügen den Schlüssel und die Quelle für das Node.js-Repository hinzu.
Aktualisiere die Paketlisten erneut:
sudo apt update
ShellScriptsudo apt install -y nodejs
ShellScriptnode --version
npm --version
ShellScriptcurl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo 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" | sudo tee /etc/apt/sources.list.d/nodesource.list
ShellScriptsudo systemctl status postgresql
ShellScriptDu solltest sehen, dass der PostgreSQL-Dienst aktiv und läuft.
sudo 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 libidn11-dev libicu-dev libjemalloc-dev
ShellScriptDieser Befehl installiert alle notwendigen Abhängigkeiten für Mastodon, einschließlich Bildverarbeitung, Videokonvertierung, Webserver und Datenbanktreiber.
sudo corepack enable
ShellScriptShellScriptsudo yarn set version classic
ShellScriptyarn --version
ShellScriptsudo adduser --disabled-login mastodon
ShellScriptDieser Befehl erstellt einen neuen Benutzer namens „mastodon“ ohne Login-Möglichkeit.
sudo su - mastodon
ShellScriptgit clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec bash
ShellScriptgit clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
ShellScriptRUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.2.3
rbenv global 3.2.3
ShellScriptgem install bundler --no-document
ShellScriptruby --version
bundle --version
ShellScriptVerlasse den Mastodon-Benutzer:
exit
ShellScriptsudo -u postgres psql
ShellScriptCREATE USER mastodon CREATEDB;
SQL\q
ShellScriptsudo su - mastodon
ShellScriptgit clone https://github.com/mastodon/mastodon.git live && cd live
ShellScriptgit checkout $(git tag -l | grep '^v[0-9.]*$' | sort -V | tail -n 1)
ShellScriptbundle config deployment 'true'
bundle config without 'development test'
ShellScriptbundle install -j$(getconf _NPROCESSORS_ONLN)
ShellScriptyarn install --pure-lockfile
ShellScriptDer Setup-Assistent von Mastodon ist ein interaktives Tool, das dich durch dieKonfiguration deiner Instanz führt. Hier ist eine detaillierte Anleitung für diesen Prozess:
RAILS_ENV=production bundle exec rake mastodon:setup
ShellScriptDer Assistent wird dich nun durch eine Reihe von Fragen führen. Hier sind die wichtigsten Punkte und wie du sie beantworten solltest:
.env.production
speichern.Nach Abschluss dieses Prozesses ist deine Mastodon-Instanz grundlegend konfiguriert. Du kannst nun mit den nächsten Schritten fortfahren, wie dem Einrichten der Systemdienste und der Webserver-Konfiguration.
exit
ShellScriptsudo cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
ShellScriptsudo ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon
ShellScriptsudo nano /etc/nginx/sites-available/mastodon
ShellScriptErsetze "example.com
" durch deine Domain und passe die SSL-Zertifikatspfade an.
sudo cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/
ShellScriptsudo systemctl daemon-reload
ShellScriptsudo systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming
ShellScriptsudo systemctl status mastodon-web mastodon-sidekiq mastodon-streaming
ShellScriptsudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d deine-domain.com
ShellScriptErsetze "deine-domain.com
" durch deine tatsächliche Domain.
sudo systemctl restart nginx
ShellScriptSicherheit ist bei der Verwaltung einer Mastodon-Instanz von größter Bedeutung. Hier sind detaillierte Schritte, um deine Instanz abzusichern:
Du hast zwei Hauptoptionen für die Firewall-Konfiguration: UFW (Uncomplicated Firewall) oder iptables. UFW ist ein benutzerfreundliches Frontend für iptables und wird oft für einfachere Konfigurationen empfohlen. Iptables bietet mehr Flexibilität, ist aber komplexerin der Handhabung.
UFW ist standardmäßig auf vielen Ubuntu-Systemen vorinstalliert.
Falls nicht, installiere es mit:
sudo apt install ufw
ShellScriptsudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
ShellScriptsudo ufw enable
ShellScriptsudo ufw status verbose
ShellScriptWenn du iptables bevorzugst, hier eine Basiskonfiguration.
sudo nano /etc/iptables-rules
ShellScript*filter
# Standardrichtlinien setzen
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# Bestehende Verbindungen erlauben
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Loopback-Verbindungen erlauben
-A INPUT -i lo -j ACCEPT
# SSH (Port 22) erlauben
-A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP (Port 80) erlauben
-A INPUT -p tcp --dport 80 -j ACCEPT
# HTTPS (Port 443) erlauben
-A INPUT -p tcp --dport 443 -j ACCEPT
# ICMP (Ping) erlauben
-A INPUT -p icmp -j ACCEPT
COMMIT
ShellScriptShellScriptsudo iptables-restore < /etc/iptables-rules
ShellScriptUm die Regeln dauerhaft zu speichern und beim Neustart zu laden, installiere iptables-persistent:
sudo apt install iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload
ShellScriptUm den aktuellen Status der iptables-Regeln zu überprüfen:
sudo iptables -L -v
ShellScriptUnabhängig von der gewählten Firewall-Lösung solltest du folgende zusätzliche Sicherheitsmaßnahmen implementieren:
sudo apt update
sudo apt upgrade -y
ShellScriptFühre diese Befehle wöchentlich aus.
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
ShellScriptsudo nano /etc/ssh/sshd_config
ShellScriptPermitRootLogin no
PasswordAuthentication no
ShellScriptsudo systemctl restart sshd
ShellScriptInstalliere und konfiguriere Fail2ban, um wiederholte Anmeldeversuche zu blockieren:
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
ShellScriptAktiviere mindestens die SSH-Jail und passe die Einstellungen nach Bedarf an.
#!/bin/bash
# Setze Variablen
BACKUP_DIR="/path/to/backup/directory"
DATE=$(date +"%Y%m%d_%H%M%S")
MASTODON_USER="mastodon"
DB_NAME="mastodon_production"
# Erstelle Backup-Verzeichnis
mkdir -p $BACKUP_DIR/$DATE
# Datenbankbackup
echo "Erstelle Datenbank-Backup..."
sudo -u postgres pg_dump $DB_NAME > $BACKUP_DIR/$DATE/mastodon_db_backup.sql
# Medienbackup
echo "Erstelle Medien-Backup..."
sudo tar -czf $BACKUP_DIR/$DATE/mastodon_media_backup.tar.gz /home/$MASTODON_USER/live/public/system
# Konfigurationsbackup
echo "Erstelle Konfigurations-Backup..."
sudo cp /home/$MASTODON_USER/live/.env.production $BACKUP_DIR/$DATE/env_production_backup
# Setze Berechtigungen
sudo chown -R $MASTODON_USER:$MASTODON_USER $BACKUP_DIR/$DATE
echo "Backup abgeschlossen und gespeichert in $BACKUP_DIR/$DATE"
ShellScriptsudo chmod +x /usr/local/bin/mastodon_backup.sh
ShellScriptsudo apt install ufwShellScript
ShellScriptsudo crontab -e
ShellScriptFüge folgende Zeile hinzu:
0 2 * * * /usr/local/bin/mastodon_backup.sh
YAMLDies führt das Backup täglich um 2 Uhr morgens aus.
sudo systemctl stop mastodon-web mastodon-sidekiq mastodon-streaming
ShellScriptsudo -u postgres psql
ShellScriptDROP DATABASE mastodon_production;
CREATE DATABASE mastodon_production;
\q
SQLDann:
sudo -u postgres psql mastodon_production < /path/to/backup/directory/DATE/mastodon_db_backup.sql
ShellScriptsudo rm -rf /home/mastodon/live/public/system
sudo tar -xzf /path/to/backup/directory/DATE/mastodon_media_backup.tar.gz -C /
ShellScriptsudo systemctl status mastodon-web mastodon-sidekiq mastodon-streamingShellScript
ShellScriptsudo chown -R mastodon:mastodon /home/mastodon/live
ShellScriptsudo systemctl start mastodon-web mastodon-sidekiq mastodon-streaming
ShellScriptsudo systemctl status mastodon-web mastodon-sidekiq mastodon-streaming
ShellScriptsudo journalctl -u mastodon-web
sudo journalctl -u mastodon-sidekiq
sudo journalctl -u mastodon-streaming
ShellScript.env.production
cd /home/mastodon/live
bundle install
yarn install
ShellScriptsudo systemctl status nginx
ShellScriptsudo nginx -t
ShellScriptsudo ufw status # Wenn du UFW verwendest
ShellScriptoder
sudo iptables -L # Wenn du iptables verwendest
ShellScriptsudo certbot certificates
ShellScriptsudo -u postgres psql -c "\l"
ShellScriptStelle sicher, dass die Datenbankkonfiguration in .env.production
korrekt ist:
sudo nano /home/mastodon/live/.env.production
ShellScriptudo systemctl status postgresql
ShellScript.env.production
sudo su - mastodon
cd ~/live
RAILS_ENV=production bundle exec rails console
ShellScriptActionMailer::Base.mail(to: 'deine@email.com', from: 'mastodon@deineinstanz.com', subject: 'Test', body: 'Dies ist ein Test').deliver_now
ShellScriptsudo journalctl -u mastodon-sidekiq
ShellScriptdf -h
ShellScriptsudo du -h /home/mastodon/live | sort -rh | head -n 20
ShellScriptcd /home/mastodon/live
RAILS_ENV=production bundle exec rake mastodon:media:remove_remote
RAILS_ENV=production bundle exec rake mastodon:media:remove_orphans
ShellScriptBei anhaltenden Problemen zögere nicht, in der Mastodon-Community oder bei erfahrenen Systemadministratoren um Hilfe zu bitten. Dokumentiere alle Schritte, die du unternimmst, um das Problem zu lösen, da dies bei der Fehlersuche und für zukünftige Referenzen hilfreich sein kann.
Bei wachsender Nutzerzahl deiner Mastodon-Instanz musst du möglicherweise skalieren. Hier einige Strategien:
a) Separater Datenbankserver:
# Auf dem neuen Datenbankserver
sudo apt install postgresql
# Konfiguriere PostgreSQL für Fernzugriff
sudo nano /etc/postgresql/12/main/postgresql.conf
# Ändere: listen_addresses = '*'
sudo nano /etc/postgresql/12/main/pg_hba.conf
# Füge hinzu: host all all your_mastodon_server_ip/32 md5
ShellScriptb) Separater Redis-Server:
# Auf dem neuen Redis-Server
sudo apt install redis-server
sudo nano /etc/redis/redis.conf
# Ändere: bind 0.0.0.0
ShellScriptc) Aktualisiere .env.production
auf dem Hauptserver mit den neuen Serveradressen.
Setze einen Nginx-Load-Balancer vor mehreren Mastodon-Web-Servern ein.
Aktiviere Redis-Caching in der Mastodon-Konfiguration.
Regelmäßige Updates sind wichtig für Sicherheit und neue Funktionen.
Hier der Prozess:
sudo systemctl stop mastodon-web mastodon-sidekiq mastodon-streaming
ShellScriptsudo su - mastodon
ShellScriptcd ~/live
ShellScriptgit fetch
git checkout $(git tag -l | grep '^v[0-9]*\.[0-9]*\.[0-9]*$' | sort -V | tail -n 1)
ShellScriptbundle install
yarn install
ShellScriptRAILS_ENV=production bundle exec rails db:migrate
ShellScriptRAILS_ENV=production bundle exec rails assets:precompile
ShellScriptexit
ShellScriptsudo systemctl start mastodon-web mastodon-sidekiq mastodon-streaming
ShellScriptÜberprüfe die Funktionalität deiner Instanz im Browser.
sudo apt install htop iotop
ShellScripthtop # CPU und RAM-Nutzung
iotop # Festplattenaktivität
Passe postgresql.conf
an:
sudo nano /etc/postgresql/12/main/postgresql.conf
ShellScriptWichtige Parameter:
shared_buffers = 256MB # 25% des verfügbaren RAM
work_mem = 4MB
maintenance_work_mem = 64MB
effective_cache_size = 768MB # 50% des verfügbaren RAM
YAMLPasse nginx.conf
an:
sudo nano /etc/nginx/nginx.conf
ShellScriptBeispielkonfiguration:
worker_processes auto;
worker_connections 1024;
keepalive_timeout 65;
gzip on;
NginxPasse die Anzahl der Worker an:
sudo nano /etc/systemd/system/mastodon-sidekiq.service
ShellScriptÄndere:
ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push
ShellScriptRAILS_ENV=production bundle exec rake mastodon:media:remove_remote
RAILS_ENV=production bundle exec rake mastodon:media:remove_orphans
ShellScriptHerzlichen Glückwunsch! Du hast nun eine umfassende Anleitung zur Installation, Konfiguration und Verwaltung einer Mastodon-Instanz durchgearbeitet. Mit diesem Wissen bist du gut gerüstet, um deine eigene Instanz im föderierten Netzwerk von Mastodon zu betreiben.
Wir haben viele wichtige Aspekte behandelt, von der grundlegenden Installation über Sicherheitsmaßnahmen bis hin zu fortgeschrittenen Themen wie Skalierung und Leistungsoptimierung.
Denk daran, dass du Teil einer größeren Community von Mastodon-Administratoren bist. Zögere nicht, Hilfe zu suchen oder deine Erfahrungen mit anderen zu teilen. Die Mastodon-Community ist in der Regel sehr hilfsbereit und freut sich über neue Mitglieder.
Mit deiner eigenen Mastodon-Instanz trägst du zur Dezentralisierung des Internets bei und gibst Menschen eine Alternative zu den großen, zentralisierten sozialen Netzwerken. Dies ist ein wichtiger Schritt in Richtung eines freieren und vielfältigeren Internets.
Viel Erfolg mit deiner Mastodon-Instanz und genieße die Reise in die Welt der föderierten sozialen Netzwerke!