Smithereen

Do, 3. Juni 2021, Lioh Möller

Seit der Einführung von StatusNet auf Basis des OStatus-Protokolles hat sich einiges getan. Mittlerweile basiert das Fediverse grösstenteils auf der neueren und deutlich mächtigeren ActivityPub Implementierung. Bekannte Clients wie Mastodon, Pleroma oder Friendica setzen darauf auf. Doch der schnellen Modernisierung und Weiterentwicklung konnten einige Projekte wie GNU social nicht folgen, obwohl auch dafür mittlerweile erste Ansätze zur Anbindung von ActivityPub existieren.

Mit Smithereen betritt nun ein weiterer Teilnehmer die Bühne der verfügbaren Fediverse-Clients. Das noch recht junge Projekt wird massgeblich von Gregory Klyushnikov entwickelt und ähnelt optisch dem in Russland sehr beliebten vk Netzwerk, allerdings nicht in seiner heutigen Form, sondern eher dem look & feel der Anfangszeit des sozialen Netzwerkes. Doch die zugrunde liegenden Technologien bei Smithereen sind hochmodern und der Betrieb ist dank Docker durchaus einfach.

Zur Installation wird ein Server mit Docker und einem öffentlichen Hostnamen vorausgesetzt. Zusätzlich wird nginx als Reverse Proxy benötigt.

Im Folgenden gehen wir davon aus, dass die Installation in einem Verzeichnis /opt/docker/smithereen durchgeführt wird.


Zunächst wird der aktuelle Quellcode vom Git-Repository des Projektes ausgecheckt:

mkdir -p /opt/docker/smithereen
cd /opt/docker/smithereen
git clone https://github.com/grishka/Smithereen.git .
cp examples/config_docker.properties config.properties


In der Datei config.properties muss einerseits die Variable domain auf den tatsächlich zum Einsatz kommenden Domainnamen geändert werden und zum anderen müssen imgproxy.key sowie imgproxy.salt angegeben werden. Zur Erstellung des keys und salts kann folgendes Kommando genutzt werden:

echo $(xxd -g 2 -l 32 -p /dev/random | tr -d '\n')

Zusätzlich kann das db.password auf einen sicheren Wert konfiguriert werden.

In der Datei docker-compose.yml muss das IMGPROXY_KEY und IMGPROXY_SALT auf den in der Datei config.properties Werten angepasst werden. Bei einer Änderung des SQL-Datenbankpasswortes muss dieser Wert in der Variable MYSQL_ROOT_PASSWORD angegeben werden.

Zur Nutzung des NGINX-Servers als Reverse Proxy muss eine entsprechende Konfiguration angelegt werden:

proxy_cache_path /opt/smithereen/nginx_cache/images levels=1:2 keys_zone=sm_images:10m max_size=1G inactive=3650d;

server{
    server_name YOUR_DOMAIN_HERE;

    client_max_body_size 40M;
    location /i/ {
        proxy_pass http://127.0.0.1:4560;
        proxy_cache sm_images;
        proxy_cache_lock on;
        proxy_ignore_headers Cache-Control;
        proxy_cache_valid any 3650d;
        expires max;
    }
    location / {
        proxy_pass http://127.0.0.1:4567;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

    http2_push_preload on;

    listen [::]:443 ssl http2;
    listen 443 ssl http2;
}

Das für den Bilder-Cache angegebene Verzeichnis muss zuvor erstellt werden:

mkdir /opt/smithereen/nginx_cache/images

Zusätzlich sollten in NGINX die Variablen ssl_certificate und ssl_certificate_key angegeben oder automatisch durch ein Tool wie Certbot generiert werden, um valide SSL-Zertifikate zu nutzen.

Nach dem Neustart von nginx kann im Verzeichnis /opt/docker/smithereen ein docker-compose up ausgeführt werden:

docker-compose up -d

Daraufhin sollte die eigene Smithereen Instanz bereits über die angegebene URL erreichbar sein.

Ein initiales Administratorenpasswort lässt sich mit folgendem Befehl festlegen:

docker exec -it smithereen_web_1 bash -c ./smithereen-init-admin

Die ActivityPub-Anbindung ist wie das gesamte Projekt noch in einem sehr frühen Stadium und so ist noch kein direktes Verfahren implementiert, um entfernten Konten zu folgen.

Möglich ist es dennoch durch den Aufruf der URL https://meineinstanz.xyz/activitypub/externalInteraction?uri= gefolgt von der Adresse des entfernten Kontos, zum Beispiel: https://meineinstanz.xyz/activitypub/externalInteraction?uri=https://mastodon.social/@Gargron

Smithereen unterstützt Thread-Ansichten und Gruppen, eine Funktion die viele Mastodon Nutzer seit langem vermissen.

Wer sich mit dem Interface mit dem Charme der 90er Jahre anfreunden kann, dem sei ein Blick auf das Projekt empfohlen.