Desplegar en cualquier VPS

La guía genérica para un VPS sencillo con Ubuntu o Debian — la base de todas las demás guías por plataforma, con notas de systemd, TLS y cortafuegos.

Esta es la guía genérica para un VPS Linux sencillo (cualquier proveedor — Hetzner, Vultr, Linode, Contabo, tu propio servidor, ...). Las demás guías por plataforma (Digital Ocean, AWS, GCP, Azure) son atajos de esta con sus pasos de cortafuegos específicos del proveedor.

1. Instalar el binario

El script install.sh descarga el último binario publicado para tu arquitectura (x86_64 / aarch64), verifica su checksum sha256 y lo instala en un directorio del PATH — no se necesita sudo para la propia instalación:

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

2. Crear una configuración

Obtén la plantilla (sin clonar el repositorio) y edítala:

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

Como mínimo, configura:

toml
[relay]
name = "My Relay"
public_url = "wss://relay.example.com"   # tu dirección pública
private_key = "..."                      # ejecuta 'nostrfy genkey' en local y pega la clave

[server]
host = "0.0.0.0"                         # ya configurado en la plantilla
port = 8080

Genera la clave secreta con:

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

(O monta tu propio archivo de configuración en lugar de la plantilla — cualquier nostrfy.toml sirve.)

3. Ejecutar como servicio systemd

Obtén la unidad reforzada (sin clonar el repositorio) e iníciala:

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

Registros:

sh
journalctl -u nostrfy -f

4. Abrir el puerto y verificar

Permite TCP 8080 en tu cortafuegos (ufw, cortafuegos en la nube, cortafuegos del host):

sh
sudo ufw allow 8080/tcp

Verifica en local y desde fuera:

sh
curl http://localhost:8080/health
curl http://<server-ip>:8080/health        # desde tu portátil

5. Poner un proxy de terminación TLS delante (para wss://)

El relé sirve WebSocket sin cifrar en el 8080. Para exponerlo como wss://, ejecuta un proxy inverso en el puerto 443 que termine TLS. El relé respeta X-Forwarded-Proto, así que no se necesita ninguna configuración especial.

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

Obtén un certificado gratuito con certbot (sudo certbot --nginx -d relay.example.com).

Caddy

(TLS automático, un archivo):

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

Anfitrión multimedia Blossom también

Cuando se configura blossom.host = "media.example.com", ese nombre de host también debe llegar al mismo puerto — el relé separa los hosts internamente (como server.api_host). Añade un segundo bloque server / sitio para él:

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
}

Asegúrate de que relay.public_url en la configuración coincida con wss://relay.example.com.

6. Copias de seguridad

Detén el relé, copia el directorio de datos, reinicia:

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

Actualizaciones

sh
# las instalaciones por tubería nunca piden confirmación: usa --force para sobrescribir un
# binario existente (o ejecuta el script desde un terminal y responde y/N)
curl -fsSL https://raw.githubusercontent.com/iqbqioza/nostrfy/main/install.sh | sh -s -- --force
sudo systemctl restart nostrfy