Bereitstellung auf einem beliebigen VPS

Die generische Anleitung für einen einfachen Ubuntu- oder Debian-VPS — die Basis für alle anderen Plattform-Anleitungen, mit Hinweisen zu systemd, TLS und Firewall.

Dies ist die generische Anleitung für einen einfachen Linux-VPS (beliebiger Anbieter — Hetzner, Vultr, Linode, Contabo, eigener Server, ...). Die anderen Plattform-Anleitungen (Digital Ocean, AWS, GCP, Azure) sind Kurzfassungen dieser Anleitung mit ihren anbieterspezifischen Firewall-Schritten.

1. Binary installieren

Das Skript install.sh lädt das neueste Release-Binary für Ihre Architektur (x86_64 / aarch64) herunter, prüft ihre sha256-Prüfsumme und installiert sie in ein Verzeichnis im PATH — für die Installation selbst ist kein sudo nötig:

sh
curl -fsSL https://raw.githubusercontent.com/iqbqioza/nostrfy/main/install.sh | sh
nostrfy --version

2. Konfiguration erstellen

Vorlage holen (kein Repository-Klon nötig) und bearbeiten:

sh
sudo mkdir -p /etc/nostrfy
sudo curl -fsSL -o /etc/nostrfy/nostrfy.toml \
  https://raw.githubusercontent.com/iqbqioza/nostrfy/main/deploy/nostrfy.toml
sudo nano /etc/nostrfy/nostrfy.toml

Mindestens festlegen:

toml
[relay]
name = "My Relay"
public_url = "wss://relay.example.com"   # Ihre öffentliche Adresse
private_key = "..."                      # 'nostrfy genkey' lokal ausführen und Schlüssel einfügen

[server]
host = "0.0.0.0"                         # bereits in der Vorlage gesetzt
port = 8080

Den geheimen Schlüssel erzeugen mit:

sh
nostrfy --config /tmp/nostrfy-genkey.toml init && nostrfy --config /tmp/nostrfy-genkey.toml genkey

(Oder stattdessen die eigene Konfigurationsdatei einbinden — jede nostrfy.toml funktioniert.)

3. Als systemd-Dienst ausführen

Gehärtete Unit holen (kein Repository-Klon nötig) und starten:

sh
sudo curl -fsSL -o /etc/systemd/system/nostrfy.service \
  https://raw.githubusercontent.com/iqbqioza/nostrfy/main/deploy/nostrfy.service
sudo systemctl daemon-reload
sudo systemctl enable --now nostrfy
sudo systemctl status nostrfy

Logs:

sh
journalctl -u nostrfy -f

4. Port öffnen und prüfen

TCP 8080 in Ihrer Firewall freigeben (ufw, Cloud-Firewall, Host-Firewall):

sh
sudo ufw allow 8080/tcp

Lokal und von außen prüfen:

sh
curl http://localhost:8080/health
curl http://<server-ip>:8080/health        # von Ihrem Laptop

5. TLS-terminierenden Proxy davor schalten (für wss://)

Das Relay liefert plain WebSocket auf 8080. Um es als wss:// bereitzustellen, betreiben Sie einen Reverse- Proxy auf Port 443, der TLS terminiert. Das Relay beachtet X-Forwarded-Proto, daher ist keine besondere Konfiguration nötig.

nginx

/etc/nginx/sites-available/relay:

nginx
server {
    listen 443 ssl;
    server_name relay.example.com;

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

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Kostenloses Zertifikat holen mit certbot (sudo certbot --nginx -d relay.example.com).

Caddy

(automatisches TLS, eine Datei):

caddy
relay.example.com {
    reverse_proxy 127.0.0.1:8080
}

Blossom-Media-Host ebenfalls

Wenn blossom.host = "media.example.com" gesetzt ist, muss dieser Hostname ebenfalls denselben Port erreichen — das Relay trennt die Hosts intern (wie server.api_host). Fügen Sie einen zweiten Server-Block / eine zweite Site dafür hinzu:

nginx
server {
    listen 443 ssl;
    server_name media.example.com;

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

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
caddy
media.example.com {
    reverse_proxy 127.0.0.1:8080
}

Stellen Sie sicher, dass relay.public_url in der Konfiguration mit wss://relay.example.com übereinstimmt.

6. Backups

Relay stoppen, Datenverzeichnis kopieren, neu starten:

sh
sudo systemctl stop nostrfy
sudo tar -czf nostrfy-data-backup.tar.gz /var/lib/nostrfy   # Ihr database.path
sudo systemctl start nostrfy

Updates

sh
# Pipe-Installationen fragen nie nach Bestätigung: --force zum Überschreiben einer
# vorhandenes Binary verwenden (oder Skript im Terminal ausführen und mit y/N antworten)
curl -fsSL https://raw.githubusercontent.com/iqbqioza/nostrfy/main/install.sh | sh -s -- --force
sudo systemctl restart nostrfy