Déployer sur n’importe quel VPS

Le guide générique pour un VPS Ubuntu ou Debian standard — la base de tous les autres guides par plateforme, avec notes systemd, TLS et pare-feu.

Ceci est le guide générique pour un VPS Linux standard (tout fournisseur — Hetzner, Vultr, Linode, Contabo, votre propre serveur, ...). Les autres guides par plateforme (Digital Ocean, AWS, GCP, Azure) sont des raccourcis de celui-ci avec leurs étapes de pare-feu spécifiques au fournisseur.

1. Installer le binaire

Le script install.sh télécharge le dernier binaire publié pour votre architecture (x86_64 / aarch64), vérifie sa somme de contrôle sha256 et l’installe dans un répertoire présent dans le PATH — aucun sudo requis pour l’installation elle-même :

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

2. Créer une configuration

Récupérez le modèle (aucun clone du dépôt requis) et modifiez-le :

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

Au minimum, définissez :

toml
[relay]
name = "My Relay"
public_url = "wss://relay.example.com"   # votre adresse publique
private_key = "..."                      # exécutez 'nostrfy genkey' en local et collez la clé

[server]
host = "0.0.0.0"                         # déjà défini dans le modèle
port = 8080

Générez la clé secrète avec :

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

(Ou montez votre propre fichier de configuration au lieu du modèle — n’importe quel nostrfy.toml convient.)

3. Exécuter comme service systemd

Récupérez l’unité renforcée (aucun clone du dépôt requis) et démarrez-la :

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

Journaux :

sh
journalctl -u nostrfy -f

4. Ouvrir le port et vérifier

Autorisez TCP 8080 dans votre pare-feu (ufw, pare-feu cloud, pare-feu hôte) :

sh
sudo ufw allow 8080/tcp

Vérifiez en local et depuis l’extérieur :

sh
curl http://localhost:8080/health
curl http://<server-ip>:8080/health        # depuis votre portable

5. Placer un proxy de terminaison TLS devant (pour wss://)

Le relais sert du WebSocket en clair sur le port 8080. Pour l’exposer en wss://, exécutez un proxy inverse sur le port 443 qui termine TLS. Le relais respecte X-Forwarded-Proto, donc aucune configuration spéciale n’est nécessaire.

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;
    }
}

Obtenez un certificat gratuit avec certbot (sudo certbot --nginx -d relay.example.com).

Caddy

TLS automatique, un seul fichier :

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

Hébergeur média Blossom aussi

Lorsque blossom.host = "media.example.com" est défini, ce nom d’hôte doit aussi atteindre le même port — le relais sépare les hôtes en interne (comme server.api_host). Ajoutez un second bloc server / site pour lui :

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
}

Assurez-vous que relay.public_url dans la configuration correspond à wss://relay.example.com.

6. Sauvegardes

Arrêtez le relais, copiez le répertoire de données, redémarrez :

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

Mises à jour

sh
# les installations pipées ne demandent jamais de confirmation : utilisez --force pour écraser un
# binaire existant (ou exécutez le script depuis un terminal et répondez y/N)
curl -fsSL https://raw.githubusercontent.com/iqbqioza/nostrfy/main/install.sh | sh -s -- --force
sudo systemctl restart nostrfy