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.
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.
Klicken Sie auf „Let’s Go“ und Sie gelangen zu den folgenden Seiten, die Sie über einige Grundlagen der Funktionsweise von Mastodon informieren.
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.
Ü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.
Sie können den Zustand der Datenbank Ihrer Instanz unter https://example.com/pghero/ überprüfen.
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.