Das Fediverse wird immer größer und bekannter, nicht zuletzt durch die Ankündigung von Elon Musk, Twitter zu kaufen. Daher wundert es einen nicht, dass es immer mehr Server und Ideen gibt, wie man die dezentralen Sozialen Netzwerke aufbaut und was man an Software dort verwendet. Schon vor einigen Jahren (genauer gesagt 2013) gab es mit StatusNet, heute GNU Social, die erste dezentrale Variante eines Twitter ähnlichen Dienstes, doch erst durch Mastodon gewann die Idee eines dezntralen Microblogging Dienstes an Bedeutung. Viele „Standards“ des heutigen Fediverse wurden durch Mastodon festgelegt. Allerdings ist Mastodon nicht die einzige Software, die Microblogging in das Fediverse bringt.
In diesem Blog Beitrag möchte ich euch Misskey vorstellen und auch direkt eine Anleitung zur Installation der Software mitgeben.
Misskey wurde 2014 von syuilo in Japan gestartet und begann als klassisches Bulletin Board. Erst 2018 kam das ActivityPub hinzu, was nun die Kommunikation im Fediverse ermöglicht. Dank der Unterstützung von ActivityPub kann Misskey mit diversen anderen Instanzen kommunizieren, gerade auch mit Mastodon. Und da die Software sehr anpasungsfähig ist und die Entwicklung auch stetig voran geht, lohnt sich aus meiner Sicht ein Blick auf die Software. Wer mehr zur Geschichte und der Software wissen will, kann sich unter https://misskey-hub.net/en/docs/misskey.html einlesen.
Installation auf CentOS 7
Nach dem Vorwort und ohne weitere Abschweife komme ich nun zur Installation von Misskey. Es gibt insgesamt zwei Arten, Misskey zu installieren: Einmal direkt aus dem Soruce Code oder als Docker Variante. Ich persönlich habe mich für die Dockervariante entschieden, da diese sehr schnell aufgesetzt ist. Wer sich an der Installation ohne Docker versuchen will, wird unter https://misskey-hub.net/en/docs/install.html#manually= fündig.
Benötigte Software
- Docker CE
- git
- ein Editor eurer Wahl (wer nano nimmt, sollte es direkt lassen :P)
Installation von Docker
Da Docker selbst eine sehr ausführliche Dokumentation hat, verweise ich einfach auf diese https://docs.docker.com/engine/install/centos/
Installation von Misskey
Da git eigentlich vorhanden sein sollte (ansonsten hilft ein yum install git
), gehen wir direkt an das eingemachte. Zunächst klonen wir das Misskey Repo. Ich persönlich klone Git Repos gerne nach /opt
, allerdings könnt ihr das auch woanders hin klonen, zum Beispiel in das Home Verzeichnis eures Linux Users:
cd /opt
git clone -b master https://github.com/misskey-dev/misskey.git
cd misskey
git checkout master
Damit habt Ihr den Source Code von Misskey geklont. Als nächstes folgt die Konfiguration.
cp .config/example.yml .config/default.yml
cp .config/docker_example.env .config/docker.env
Damit kopiert Ihr die Beispiel Konfiguration und passt diese wie folgt an. Wir beginnen mit der .config/default.yml
, der Hauptkonfiguration von Misskey:
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Misskey configuration
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ┌─────┐
#───┘ URL └─────────────────────────────────────────────────────
# Final accessible URL seen by a user.
url: <URL zu eurer Instanz>
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# URL SETTINGS AFTER THAT!
# ┌───────────────────────┐
#───┘ Port and TLS settings └───────────────────────────────────
#
# Misskey requires a reverse proxy to support HTTPS connections.
#
# +----- https://example.tld/ ------------+
# +------+ |+-------------+ +----------------+|
# | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
# +------+ |+-------------+ +----------------+|
# +---------------------------------------+
#
# You need to set up a reverse proxy. (e.g. nginx)
# An encrypted connection with HTTPS is highly recommended
# because tokens may be transferred in GET requests.
# The port that your Misskey server should listen on.
port: 3000
# ┌──────────────────────────┐
#───┘ PostgreSQL configuration └────────────────────────────────
db:
host: db
port: 5432
# Database name
db: misskey
# Auth
user: misskey-user
pass: <Hier ein zufälligs Passwort generieren>
# Whether disable Caching queries
#disableCache: true
# Extra Connection options
#extra:
# ssl: true
# ┌─────────────────────┐
#───┘ Redis configuration └─────────────────────────────────────
redis:
host: redis
port: 6379
#pass: example-pass
#prefix: example-prefix
#db: 1
# ┌─────────────────────────────┐
#───┘ Elasticsearch configuration └─────────────────────────────
#elasticsearch:
# host: localhost
# port: 9200
# ssl: false
# user:
# pass:
# ┌───────────────┐
#───┘ ID generation └───────────────────────────────────────────
# You can select the ID generation method.
# You don't usually need to change this setting, but you can
# change it according to your preferences.
# Available methods:
# aid ... Short, Millisecond accuracy
# meid ... Similar to ObjectID, Millisecond accuracy
# ulid ... Millisecond accuracy
# objectid ... This is left for backward compatibility
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# ID SETTINGS AFTER THAT!
id: 'aid'
# ┌─────────────────────┐
#───┘ Other configuration └─────────────────────────────────────
# Whether disable HSTS
#disableHsts: true
# Number of worker processes
#clusterLimit: 1
# Job concurrency per worker
# deliverJobConcurrency: 128
# inboxJobConcurrency: 16
# Job rate limiter
# deliverJobPerSec: 128
# inboxJobPerSec: 16
# Job attempts
# deliverJobMaxAttempts: 12
# inboxJobMaxAttempts: 8
# IP address family used for outgoing request (ipv4, ipv6 or dual)
#outgoingAddressFamily: ipv4
# Syslog option
#syslog:
# host: localhost
# port: 514
# Proxy for HTTP/HTTPS
#proxy: http://127.0.0.1:3128
#proxyBypassHosts: [
# 'example.com',
# '192.0.2.8'
#]
# Proxy for SMTP/SMTPS
#proxySmtp: http://127.0.0.1:3128 # use HTTP/1.1 CONNECT
#proxySmtp: socks4://127.0.0.1:1080 # use SOCKS4
#proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5
# Media Proxy
#mediaProxy: https://example.com/proxy
# Proxy remote files (default: false)
#proxyRemoteFiles: true
# Sign to ActivityPub GET request (default: false)
# Wichtig! Wird für einige Mastodon Instanzen benötigt,
# die AUTH_FETCH aktiviert haben
signToActivityPubGet: true
#allowedPrivateNetworks: [
# '127.0.0.1/32'
#]
# Upload or download file size limits (bytes)
#maxFileSize: 262144000
Die wichtigsten Einstellungen sind hier die url
, der port
, das Passwort der postgres Datenbank in signToActivityPubGet: true
. Sobald signToActivityPubGet
aktiviert ist, wird auf eurer Instanz automatisch ein User mit dem Namen instance.actor
angelegt. Der wird für die Authentifzierung benötigt und kann daher ignoriert werden.
Nach diesen Einstellungen muss noch die .conf/docker.env angepasst werden:
# db settings
POSTGRES_PASSWORD=<Passwort aus der default.yml>
POSTGRES_USER=misskey-user
POSTGRES_DB=misskey
Wichtig: Sollte der Port 3000 bei euch bereits in Verwendung sein, passt den Port sowohl in der .conf/default.yml, als auch in der docker-compose.yml an:
...
ports:
- "127.0.0.1:3000:3000
...
Abschließend könnt ihr den Docker Container bauen, die DB initialisieren und den Container starten
sudo docker-compose build
sudo docker-compose run --rm web yarn run init
sudo docker-compose up -d
Danach ist Misskey an sich fertig installiert. Es fehlt nur noch der SSL Proxy. Ich habe dafür den Apache verwendet, allerdings geht auch nginx. Meine Apache Konfiguration sieht so aus:
<VirtualHost *:80>
ServerAdmin <Eure E-Mail Adresse>
ServerName <url aus der default.yml>
DocumentRoot /pfad/zu/eurem/DocumentRoot
</VirtualHost>
<VirtualHost *:443>
ServerAdmin <Eure E-Mail Adresse>
ServerName <url aus der default.yml>
RewriteEngine On
ProxyPreserveHost On
ProxyRequests Off
# allow for upgrading to websockets
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:3000/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://127.0.0.1:3000/$1 [P,L]
ProxyPass "/" "http://127.0.0.1:3000/"
ProxyPassReverse "/" "http://127.0.0.1:3000/"
ProxyPass "/streaming" "ws://127.0.0.1:3000/streaming"
ProxyPassReverse "/streaming" "ws://127.0.0.1:3000/streaming"
SSLEngine on
SSLCertificateKeyFile /etc/letsencrypt/live/<eure URL>/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/<eure URL>/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/<eure URL>/chain.pem
Header always set Strict-Transport-Security "max-age=15768000; preload"
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLCipherSuite TLSv1.3 TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384
SSLHonorCipherOrder on
SSLCompression off
ServerSignature Off
</VirtualHost>
Da ich den Apache nicht aus den offiziellen CentOS Repo nutze, kann ich schon TLS 1.3 nutzen. Wenn ihr das nicht könnt, müsst ihr die Zeilen entsprechend anpassen. Der Port in der ws:// Zeile muss angepasst werden, wenn ihr, wie oben erwähnt, einen anderen Port für Misskey verwenden müsst. Nach einem neu laden der Apache Konfiguration und nach dem Ihr ein Zertifkat mit Let’s Encrypt erstellt habt, könnt ihr euch nun in eurer Misskey Instanz einloggen. Viel Spaß!
Kommentar verfassen