Installing BSKY on your own Domain - Selfhosting: eigene Bluesky Instanz betreiben

In diesem Schnipsel möchte ich kurz umreißen, wie ihr die seid gestern verfügbare Option, eine eigene Bluskey-Instanz zu betreiben, angehen könnt. Dazu erstellen wir uns einen PDS mit eigener Domain. PDS bedeutet Personal Data Server.

Bluesky: An Open Social Web - Bluesky
We’re excited to announce that the Bluesky network is federating and opening up in a way that allows you to host your own data.

Was brauchen wir?

Die BSKY Developer haben sehr viel Vorarbeit geleistet, allerdings bezieht sich deren offizielle Dokumentation nur auf Ubuntu 22.04., was ich aus ressourcensicht sehr gut verstehen kann. Sicher funktioniert das auf anderen Linux-Distributionen ähnlich, aber muss angepasst werden.

Was wir für unsere BSKY Instanz benötigen

Anforderung Inhalt
Operating System Ubuntu 22.04
Memory (RAM) 2+ GB RAM
CPU Cores 2+ Kerne
Speicher 40+ GB schnelle SSD
Architektur amd64, arm64

Ich habe auf meinem Server nur 1 GB Ram (1GB Swap) und es funktioniert dennoch problemlos.

Die Jungs stellen ein Installer-Script zur Verfügung, was im besten Falle einfach ausgeführt werden muss - fertig 😄

Voraussetzungen

  • Linux Server mit Ubuntu 22.04 und Root Access (Liste oben)
  • Domain mit gültigem DNS die zu diesem Server führt, Port 443 und Port 80 offen
  • Das wars auch schon

How To Anleitung BSKY als eigene Instanz (PDS)

💡
Wir gehen davon aus dass ihr eure Domain bereits mit eurem Server verbunden habt. Aktuell ist ein wichtiger erster Schritt nötig, ihr müsst eure Domain auf dem Discord-Kanal von BSKY anmelden, damit das funktioniert. Es sind keine großen Server mit mehreren Tausend Usern erlaubt, sondern die Zugriffe und Verbindungen sind beschränkt.
  • Meldet euch also beim Discord-Server an und eröffnet bei BSKY ein Ticket, dort tragt ihr eure Domain ein. Dadurch meldet ihr, dass ihr eine eigene Instanz betreiben wollt und dürft föderieren.
Domain eintragen BSKY für PDS Request
Ticket accepted

Wenn ihr das erledigt habt, können wir uns auf unseren Linux-Server verbinden und BSKY installieren. Das ganze Ding kommt in einem Docker-Image. Alles was nötig ist, wird durch das Installer-Script installiert.

  1. Loggt euch auf eurem Linux-Server via SHH ein
  2. Im nächsten Schritt öffnen wir in unserer Firewall die Ports nach draußen (IPTables), der letzte Befehl speichert die temporären Einstellen Einstellungen dauerhaft. (Achtet darauf, dass ihr auch die Ports in eurer Cloud-Instanz zulassen müsst, bei mir Oracle in seiner Management-Console. Das ist aber von Anbieter zu Anbieter unterschiedlich):
# HTTP :80
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT

# HTTPS : 443
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT

# Speichert die Settings mit folgendem Befehl
sudo netfilter-persistent save
  1. Nutzt ihr die andere große Firewall, UFW, dann lauten die Befehle folgendermaßen:
# HTTP: 80
sudo ufw allow 80

# HTTPS: 443
sudo ufw allow 443

# Nachdem man einen Port in UFW geöffnet hat, sollte man sicher gehen, dass UFW auch an ist:
sudo ufw enable
  1. Wechselt in euer Home-Verzeichnis (oder /tmp) und ladet euch den BSKY Installer herunter:
wget https://raw.githubusercontent.com/bluesky-social/pds/main/installer.sh
  1. Startet den Installer, dafür benötigt ihr Root-Rechte:
sudo bash installer.sh
  1. Der Installer fragt euch nach eurer Domain und nach eurer Mail und beginnt dann mit der Installation. Er aktualisiert zunächst via APT das System und installiert ggf. benötigte Komponenten, dann lädt er das Docker-Image und startet es:
~/bsky$ sudo bash installer.sh
* Detected supported distribution Ubuntu 22.04 LTS

---------------------------------------
     Add DNS Record for Public IP
---------------------------------------

  From your DNS provider's control panel, create the required
  DNS record with the value of your server's public IP address.

  + Any DNS name that can be resolved on the public internet will work.
  + Replace example.com below with any valid domain name you control.
  + A TTL of 600 seconds (10 minutes) is recommended.

  Example DNS record:

    NAME                TYPE   VALUE
    ----                ----   -----
    example.com         A      Server's IP
    *.example.com       A      Server's IP

  **IMPORTANT**
  It's recommended to wait 3-5 minutes after creating a new DNS record
  before attempting to use it. This will allow time for the DNS record
  to be fully updated.

Enter your public DNS address (e.g. example.com): WurstGesicht.de
  1. Danach solltet ihr folgendes sehen:
========================================================================
PDS installation successful!
------------------------------------------------------------------------

Check service status      : sudo systemctl status pds
Watch service logs        : sudo docker logs -f pds
Backup service data       : /pds
PDS Admin command         : pdsadmin

Required Firewall Ports
------------------------------------------------------------------------
Service                Direction  Port   Protocol  Source
-------                ---------  ----   --------  ----------------------
HTTP TLS verification  Inbound    80     TCP       Any
HTTP Control Panel     Inbound    443    TCP       Any

Required DNS entries
------------------------------------------------------------------------
Name                         Type       Value
-------                      ---------  ---------------
WurstGesicht.de              A          Server's IP
*.Wurstgesicht.de            A          Server's IP

Detected public IP of this server: Server's IP

To see pdsadmin commands, run "pdsadmin help"

========================================================================
Create a PDS user account? (y/N): y
Enter an email address (e.g. alice@WurstGesicht.de): th@WurstGesicht.de
Enter a handle (e.g. alice.Wurstgesicht.de): thahipster.Wurstgesicht.de
  1. Das wars schon, der Server ist installiert und sofern ihr eure Domain verbunden habt, bereits erreichbar.
  2. Ihr habt einen Account angelegt, könnt aber einen weiteren Account mit folgendem Befehl erstellen:
sudo pdsadmin account create
  1. Nun müsst ihr noch euren DNS-Record veryfien, wie das geht sagt euch die folgende Seite. Kurzum, ihr müsst eurem DNS Record noch einen Eintrag hinzufügen, damit die Domain von BSKY federated werden kann.
    https://bsky-debug.app/handle
  2. Ende

Benutzt Bluesky

Ihr könnt die bekannten Wege nutzen, um euch mit eurer Bluesky Instanz (PDS) zu verbinden.

  1. Verbindet euch über die folgenden Wege:
  2. Gebt in der Konfiguration die URL eurer Instanz ein (z.B. https://WurstGesicht.de/)
  3. Ende

Easy, oder?

Update eures PDS

Falls ihr aktualisieren wollt, gebt ihr im Terminal eurer Linux-Instanz folgenden Befehl ein:

sudo pdsadmin update

Ressourcen

GitHub - bluesky-social/pds: Bluesky PDS (Personal Data Server) container image, compose file, and documentation
Bluesky PDS (Personal Data Server) container image, compose file, and documentation - bluesky-social/pds
Bluesky Guide (@bluesky-tipps.bsky.social)
Das ist übrigens auch ein wichtiger Unterschied zwischen Bluesky und Mastodon: Wenn man auf einen anderen Personal Data Server (PDS) umzieht, kann man sein Handle behalten. Und man kann sein Handle ändern, ohne dass sich das auf den eigenen sozialen Graphen auswirkt.