Wie installiert man Mastodon Social Network mit Docker auf Ubuntu 18.04 LTS

Mastodon ist ein freies, dezentralisiertes und quelloffenes soziales Netzwerk. Es wurde als Alternative zu Twitter geschaffen. Genau wie bei Twitter können die Menschen einander folgen, Nachrichten, Bilder und Videos posten. Aber im Gegensatz zu Twitter gibt es keine zentrale Speicherung oder Autorität für den Inhalt.

Stattdessen arbeitet Mastodon auf Tausenden von verschiedenen Servern, auf denen jeweils verschiedene Mitglieder der Gemeinschaft laufen. Benutzer, die sich auf einem Server angemeldet haben, können sich leicht mit Benutzern im anderen Netzwerk verbinden und sich gegenseitig über Instanzen hinweg verfolgen.

Jeder kann seine eigene Instanz eines Mastodon-Servers installieren (Mastodon Eigener Server). In diesem Tutorial lernen Sie, wie Sie Ihre Instanz von Mastodon auf einem Server mit Ubuntu 18.04 mit Hilfe von Docker einrichten.

Voraussetzungen

  • Ein Ubuntu 18.04-basierter Server mit einem Nicht-Root-Sudo-Benutzer für Deinen Eigener Mastodon Server.
  • Stellen Sie sicher, dass Ihr System auf dem neuesten Stand ist.
    $ sudo apt update
    $ sudo apt upgrade
    
  • Mastodon sendet E-Mail-Benachrichtigungen an die Benutzer. Eine Möglichkeit, dies zu ermöglichen, ist die Einrichtung eines eigenen Mail-Servers. Sie können es auf demselben Server tun, auf dem Sie mastodon installieren werden, oder auf einem anderen Server. Dies zu tun, liegt außerhalb des Rahmens dieses Leitfadens.Wir empfehlen Ihnen die Nutzung eines Transaktions-Mail-Dienstes von Drittanbietern wie Mailgun, Sendgrid, Amazon SES oder Sparkpost. Die Anweisungen in der Anleitung verwenden Mailgun als Ihren SMTP-Provider.
  • Stellen Sie sicher, dass ein Domänenname auf den Server zeigt. Für dieses Tutorial verwenden wir example.com als Domäne.

Schritt 1 – Installieren von Abhängigkeiten

Bevor wir Mastodon installieren (Mastodon Server setup), müssen wir sicherstellen, dass unser Server über bestimmte Software verfügt, die er ordnungsgemäß installieren muss. Führen Sie die folgenden Befehle aus, um die Abhängigkeiten zu installieren.

$ sudo apt update
$ sudo apt install ca-certificates curl ufw apt-transport-https software-properties-common git -y

Einige der oben genannten Software kann für Sie vorinstalliert sein.

Da wir Git installiert haben, sollten wir es konfigurieren, bevor wir fortfahren.

$ git config --global user.name "Your Name" 
$ git config --global user.email "youremail@domain.com"

Schritt 2 – Konfigurieren der Firewall

In unserem vorherigen Schritt haben wir, ufw (Unkomplizierte Firewall) installiert. Bevor wir mit der Installation von Mastodon fortfahren können, müssen wir es konfigurieren.

Aktivieren Sie SSH und den soeben erstellten Port, damit wir nicht ausgesperrt werden.

$ sudo ufw allow OpenSSH

Aktivieren Sie die ufw-Firewall.

$ sudo ufw enable

Wir müssen auch http und https für Mastodon ermöglichen.

$ sudo ufw allow http
$ sudo ufw allow https

Überprüfen Sie den Status der Firewall.

$ sudo ufw status

Sie sollten eine Ausgabe wie die folgende sehen.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             

Schritt 3 – Docker installieren

Fügen Sie den GPG-Schlüssel von Docker zu Ihrem System hinzu.

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Überprüfen Sie den Fingerabdruck des heruntergeladenen Schlüssels.

$ sudo apt-key fingerprint 0EBFCD88

Sie sollten eine Ausgabe wie die folgende sehen.

pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]

Fügen Sie das Docker-Repository hinzu.

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Aktualisieren Sie Ihre Paketdatenbank.

$ sudo apt update

Docker-CE installieren. CE ist die Gemeinschaftsausgabe des Dockers.

$ sudo apt install docker-ce -y

Der Docker sollte jetzt installiert sein. Prüfen Sie, ob es läuft.

$ sudo systemctl status docker

Die Ausgabe sollte ähnlich wie die folgende sein.

? docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-10-22 18:26:29 UTC; 25min ago
     Docs: https://docs.docker.com
 Main PID: 3574 (dockerd)
    Tasks: 8
   CGroup: /system.slice/docker.service
   ??3574 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Drücken Sie q zum Verlassen.

Fügen Sie Ihr eingeschränktes Linux-Benutzerkonto zur Docker-Gruppe hinzu, so dass Sie Docker ohne sudo ausführen können.

sudo usermod -aG docker $USER

Die Variable $USER wählt den aktuell angemeldeten Benutzer aus und fügt ihn der Docker-Gruppe hinzu. Ersetzen Sie $USER durch den tatsächlichen Benutzernamen, wenn Sie derzeit nicht mit diesem Benutzer angemeldet sind.

Wechseln Sie zu dem Benutzer, den wir gerade hinzugefügt haben. Auch wenn Sie bereits angemeldet waren, müssen Sie noch einmal darauf wechseln, um die Berechtigungen neu zu laden.

$ su - ${USER}

Überprüfen Sie, ob alles einwandfrei läuft, indem Sie das eingebaute „Hello World“-Programm ausführen.

$ docker run hello-world

Sie sollten die folgende Ausgabe sehen, die Ihnen mitteilt, dass Docker installiert ist und ordnungsgemäß funktioniert.

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

Schritt 4 – Installieren Sie Docker Compose

Es ist möglich, diesen Schritt zu überspringen und fortzufahren, aber wenn Docker Compose installiert ist, wird das Ausführen von Mastodon viel einfacher, besonders wenn Sie es auf mehr als einem Server machen wollen.

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Zum Zeitpunkt der Erstellung dieses Tutorials ist 1.24.1 die aktuelle stabile Version von Docker Compose. Sie können auf der Github-Seite nach der neuesten Version suchen.

Ausführbare Berechtigungen auf den Docker anwenden, um Binärdateien zu erstellen.

$ sudo chmod +x /usr/local/bin/docker-compose

Befehlsvervollständigung zum Dockersetzen hinzufügen.

$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

Überprüfen Sie, ob Ihre Installation erfolgreich war.

$ docker-compose --version

Es wird die folgende Ausgabe ausgedruckt.

docker-compose version 1.24.1, build 4667896b

Schritt 5 – Mastodon installieren

Klonen Sie das Mastodon-Repository auf Ihren Server.

$ git clone https://github.com/tootsuite/mastodon

Navigieren Sie zu dem Verzeichnis, in das wir gerade Dateien kopiert haben.

$ cd mastodon

Mastodon wird mit einer Beispielkonfigurationsdatei geliefert. Wir müssen es umbenennen, damit Mastodon funktioniert.

$ cp .env.production.sample .env.production

Wir müssen geheime Schlüssel für unsere Konfigurationsdatei erzeugen. Aber vorher müssen wir das Docker-Image aufbauen.

$ docker-compose build

Nun, da das Bild erfolgreich erstellt wurde, müssen Sie mehrere Schlüssel erstellen, die zur Konfiguration von Mastodon benötigt werden.

Erzeugen Sie zuerst SECRET_KEY_BASE.

$ SECRET_KEY_BASE=$(docker-compose run --rm web bundle exec rake secret)

Fügen Sie den obigen Schlüssel in die Konfigurationsdatei ein.

$ sed -i -e "s/SECRET_KEY_BASE=/&${SECRET_KEY_BASE}/" .env.production

Generieren Sie das OTP_SECRET und fügen Sie es in die Konfigurationsdatei ein.

$ OTP_SECRET=$(docker-compose run --rm web bundle exec rake secret)
$ sed -i -e "s/OTP_SECRET=/&${OTP_SECRET}/" .env.production

Generieren Sie das PAPERCLIP_SECRET und fügen Sie es in die Konfigurationsdatei ein.

$ PAPERCLIP_SECRET=$(docker-compose run --rm web bundle exec rake secret)
$ sed -i -e "s/PAPERCLIP_SECRET=/&${PAPERCLIP_SECRET}/" .env.production

Generieren Sie Werte für VAPID_PRIVATE_KEY und VAPID_PUBLIC_KEY.

$ docker-compose run --rm web bundle exec rake mastodon:webpush:generate_vapid_key

Öffnen Sie die Datei .env.production.

$ sudo nano ./.env.production

Suchen Sie nach VAPID_PRIVATE_KEY und VAPID_PUBLIC_KEY in der Datei und kopieren Sie die Ausgabe des vorherigen Befehls.

Suchen Sie die Variable LOCAL_DOMAIN und ändern Sie ihren Wert von example.com in den Domänennamen, den Sie für Ihre Mastodon-Installation gewählt haben.

Geben Sie die Werte ein, die Sie von Ihrem SMTP-Provider erhalten haben.

SMTP_SERVER = smtp.mailgun.org
SMTP_PORT = 587
SMTP_LOGIN = username
SMTP_PASSWORD = password
SMTP_FROM_ADDRESS = notifications@example.com

Drücken Sie Strg + X und speichern Sie die Datei, wenn Sie fertig sind.

Sie müssen das Docker-Image neu erstellen, um alle oben vorgenommenen Änderungen zu implementieren.

$ docker-compose build

Richten Sie die Datenbank ein.

$ docker-compose run --rm web rails db:migrate

Mastodons Vermögen vor der Zusammenstellung.

$ docker-compose run --rm web rails assets:precompile

Führen Sie den folgenden Befehl aus, um den Container auszuführen.

$ docker-compose up -d

Schritt 6 – Installieren und Konfigurieren von Nginx

Der nächste Schritt in unserem Leitfaden ist die Installation des Nginx-Servers, damit die Website von Mastodon funktioniert.

Führen Sie den folgenden Befehl aus, um den Nginx-Server zu installieren.

$ sudo apt install nginx -y

Nginx wird mit einer standardmäßig konfigurierten Website geliefert. Entfernen Sie das.

$ sudo rm /etc/nginx/sites-available/default

Entfernen Sie auch den Symlink für die Standardsite.

$ sudo rm /etc/nginx/sites-enabled/default

Erstellen Sie eine Nginx-Konfigurationsdatei für Mastodon.

$ sudo touch /etc/nginx/sites-available/mastodon

Erstellen Sie einen Symlink für die Konfiguration von Mastodon.

$ sudo ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon

Öffnen Sie die Konfiguration von Mastodon im Nano-Editor. (Sie können jeden beliebigen Editor wählen)

$ sudo nano /etc/nginx/sites-available/mastodon

Kopieren – Fügen Sie den folgenden Text ein.

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 80;
  listen [::]:80;
  server_name example.com;
  root /home/user/mastodon/public;
  # Useful for Let's Encrypt
  location /.well-known/acme-challenge/ { allow all; }
  location / { return 301 https://$host$request_uri; }
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name example.com;

  ssl_protocols TLSv1.2;
  ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;

  ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 80m;

  root /home/user/mastodon/public;

  gzip on;
  gzip_disable "msie6";
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

  add_header Strict-Transport-Security "max-age=31536000";

  location / {
    try_files $uri @proxy;
  }

  location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {
    add_header Cache-Control "public, max-age=31536000, immutable";
    try_files $uri @proxy;
  }
  
  location /sw.js {
    add_header Cache-Control "public, max-age=0";
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";
    proxy_pass_header Server;

    proxy_pass http://127.0.0.1:3000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  location /api/v1/streaming {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";

    proxy_pass http://127.0.0.1:4000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  error_page 500 501 502 503 504 /500.html;
}

Die obige Konfiguration nimmt an, dass Sie Let’s encrypt als Ihren SSL-Provider verwenden. Wenn Sie einen anderen SSL-Dienst verwenden, müssen Sie die Position der Schlüssel bearbeiten und den nächsten Abschnitt der Anleitung überspringen.

Schritt 7 – Installieren und Konfigurieren von Let’s Encrypt

Stellen Sie sicher, dass Nginx gestoppt wird.

$ sudo systemctl stop nginx

Certbot-Repository hinzufügen.

$ sudo add-apt-repository ppa:certbot/certbot

System-Pakete aktualisieren.

$ sudo apt update

Installieren Sie das Certbot-Werkzeug.

$ sudo apt install certbot

Sie müssen das Zertifikat zweimal erstellen – einmal mit der TLS SNI-Methode und das zweite Mal mit der Webroot-Methode.

sudo certbot certonly --standalone -d example.com

Erstellen Sie nun das Zertifikat mit der Webroot-Methode. Dazu muss Nginx laufen.

sudo systemctl start nginx
sudo certbot certonly --webroot -d example.com -w /home/user/mastodon/public/

Das Tool fragt Sie, ob Sie das Zertifikat behalten oder erneuern möchten. Wählen Sie die Option zur Verlängerung.

Automatische Erneuerung von SSL-Zertifikaten einrichten

Let’s Encrypt-Zertifikate haben eine Gültigkeit von 90 Tagen. Danach müssen Sie sie wieder erneuern. Dafür können Sie einen Cron-Job erstellen, der dies automatisch für Sie erledigt.

Erstellen Sie einen Cron-Job.

$ sudo nano /etc/cron.daily/letsencrypt-renew

Kopieren Sie Folgendes und fügen Sie es in die Datei ein.

#!/usr/bin/env bash
certbot renew
systemctl reload nginx

Speichern und beenden Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Machen Sie das Skript ausführbar und starten Sie den Cron-Dämon neu, damit unser Skript täglich läuft.

$ sudo chmod +x /etc/cron.daily/letsencrypt-renew
$ sudo systemctl restart cron

Schritt 8 – Erstellen Sie Ihren Mastodon-Benutzer

Besuchen Sie Ihre Mastodon-Site in einem Browser. Sie sollten das folgende Bild sehen.

Mastodon-Benutzer hinzufügen

Geben Sie Ihren gewünschten Benutzernamen, Ihre E-Mail-Adresse und Ihr Passwort ein, um ein neues Konto (Account) auf Ihrer Mastodon-Instanz zu erstellen. Ihr vollständiger Benutzername, den Sie benötigen, um sich mit Benutzern anderer Mastodon-Server zu verbinden, ist howtoforge@example.com.

Mastodon schickt Ihnen eine Bestätigungsmail via smtp server, um die Anmeldung zu überprüfen.

Sie können die Anmeldung auch manuell bestätigen. Dazu müssen Sie SSH in Ihre Docker-Instanz einbinden. Führen Sie alle aktuellen Docker-Instanzen auf.

$ docker ps

Sie werden eine Ausgabe wie unten sehen.

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                  PORTS                      NAMES
32f2c4cd2598        tootsuite/mastodon    "/tini -- bash -c 'r…"   16 hours ago        Up 16 hours (healthy)   127.0.0.1:3000->3000/tcp   mastodon_web_1
76beca2b858d        tootsuite/mastodon    "/tini -- node ./str…"   16 hours ago        Up 16 hours (healthy)   127.0.0.1:4000->4000/tcp   mastodon_streaming_1
08f7a42b75ac        tootsuite/mastodon    "/tini -- bundle exe…"   16 hours ago        Up 16 hours                                        mastodon_sidekiq_1
bacaa8c09a85        redis:5.0-alpine      "docker-entrypoint.s…"   17 hours ago        Up 17 hours (healthy)                              mastodon_redis_1
62e9b2175a53        postgres:9.6-alpine   "docker-entrypoint.s…"   17 hours ago        Up 17 hours (healthy)                              mastodon_db_1

Um die erforderlichen Änderungen vorzunehmen, müssen wir auf den Streaming-Container zugreifen. SSH in den Container mastodon_streaming_1.

$ docker exec -it mastodon_streaming_1 /bin/bash

Dadurch wird eine Bash-Shell in Ihrem Container gestartet.

Führen Sie den folgenden Befehl aus, um Ihren neu erstellten Benutzernamen zu genehmigen.

mastodon@76beca2b858d:~$ RAILS_ENV=production bin/tootctl accounts modify howtoforge --confirm

Führen Sie den folgenden Befehl aus, um Ihr neu erstelltes Konto zum Administrator zu machen.

mastodon@76beca2b858d:~$ RAILS_ENV=production bin/tootctl accounts modify howtoforge --role admin

Verlassen Sie den Container.

mastodon@76beca2b858d:~$ exit

Loggen Sie sich mit Ihrem Benutzernamen und Passwort in Ihre Instanz ein und Sie werden mit dem folgenden Bildschirm begrüßt.

Erste Schritte von Mastodon

Klicken Sie auf „Let’s Go“ und Sie gelangen zu den folgenden Seiten, die Sie über einige Grundlagen der Funktionsweise von Mastodon informieren.

Wie Mastodon funktioniert

Antwort - Verstärkung - Favorit

Klicken Sie auf Tutorial beenden, um die Homepage Ihres Mastodon zu erhalten, wo Sie nach Herzenslust mit dem Schreiben von Beiträgen beginnen können.

Mastodon Dashboard

Über das Menü Einstellungen können Sie auf die Einstellungen und den Administrationsbereich zugreifen.

Schritt 9 – Wartung

Um die Leistung und die Protokolle Ihrer Mastodon-Instanz anzusehen, gehen Sie zu https://example.com/sidekiq/.

Hier können Sie eine Liste verschiedener Prozesse und geplanter Aufgaben im Zusammenhang mit Ihrer Mastodon-Instanz einsehen. Sie können auch unter dem Abschnitt Tot oder Wiederholungen nach fehlgeschlagenen Aufgaben suchen. Sie gibt Ihnen auch Auskunft über den Speicherverbrauch Ihrer Instanz.

Mastodon-Wartung

Sie können den Zustand der Datenbank Ihrer Instanz unter https://example.com/pghero/ überprüfen.

pghero

Sie können die Wartung Ihrer Datenbank durchführen, SQL-Abfragen ausführen und nicht verwendete Indizes entfernen.

Wenn Ihre Website aus irgendeinem Grund überhaupt nicht geladen wird, können Sie die von Docker erzeugten Protokolle überprüfen.

Schließen Sie dazu zuerst Ihre Container.

$ docker-compose down

Run Docker komponieren in einem angehängten Zustand, so dass Sie die von jedem Container erzeugten Protokolle anzeigen können.

$ docker-compose up

Schritt 10: Mastodon updaten

Wechseln Sie zu Ihrem Mastodon-Verzeichnis.

$ cd /home/user/mastdon

Aktualisierungen aus dem Repository herunterladen

$ git fetch

Wenn Sie Ihre docker-compose.yml-Datei aus irgendeinem Grund geändert haben, müssen Sie zuerst den folgenden Befehl ausführen.

$ git status

Hier erfahren Sie alle Änderungen, die daran vorgenommen wurden. Wenn die Datei geändert wird, dann speichern Sie Ihre Änderungen zuerst.

$ git stash

Sehen Sie sich die neueste Mastodon-Version an. Prüfen Sie die neueste Version von der Veröffentlichungsseite.

$ git checkout <version/tag>

Wenn Sie Git Stash früher ausgeführt haben, führen Sie den folgenden Befehl aus, um Ihre Änderungen an der Datei docker-compose.yml zu wiederholen.

$ git stash pop

Erstellen Sie das Docker-Image.

$ docker-compose build

Durchführung von Datenbankmigrationen.

$ docker-compose run --rm web rails db:migrate

Mastodons Vermögen vor der Zusammenstellung.

$ docker-compose run --rm web rails assets:precompile

Führen Sie den folgenden Befehl aus, um den Container auszuführen.

$ docker-compose up -d

Das ist alles für dieses Tutorial. Mehr Informationen zu Mastodon findne Sie heir, in der Dokumentation erfahren Sie z.B. wie man Themen (Themes) installiert.

Das könnte dich auch interessieren …