Развёртывание на любом VPS

Универсальное руководство для обычного VPS на Ubuntu или Debian — основа всех остальных руководств по платформам, с заметками о systemd, TLS и брандмауэре.

Это универсальное руководство для обычного Linux VPS (любой провайдер — Hetzner, Vultr, Linode, Contabo, собственный сервер, ...). Остальные руководства по платформам (Digital Ocean, AWS, GCP, Azure) — это сокращённые версии этого руководства с шагами для брандмауэра конкретного провайдера.

1. Установка бинарного файла

Скрипт install.sh скачивает последний релизный бинарник под вашу архитектуру (x86_64 / aarch64), проверяет его sha256-контрольную сумму и устанавливает в каталог из PATH — sudo для самой установки не нужен:

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

2. Создание конфигурации

Скачайте шаблон (клонировать репозиторий не нужно) и отредактируйте его:

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

Как минимум задайте:

toml
[relay]
name = "My Relay"
public_url = "wss://relay.example.com"   # ваш публичный адрес
private_key = "..."                      # выполните 'nostrfy genkey' локально и вставьте ключ

[server]
host = "0.0.0.0"                         # уже задано в шаблоне
port = 8080

Сгенерируйте секретный ключ командой:

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

(Или подключите собственный файл конфигурации вместо шаблона — подойдёт любой nostrfy.toml.)

3. Запуск как systemd-сервис

Скачайте усиленный юнит (клонировать репозиторий не нужно) и запустите его:

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

Логи:

sh
journalctl -u nostrfy -f

4. Откройте порт и проверьте

Разрешите TCP 8080 в брандмауэре (ufw, облачный брандмауэр, брандмауэр хоста):

sh
sudo ufw allow 8080/tcp

Проверьте локально и снаружи:

sh
curl http://localhost:8080/health
curl http://<server-ip>:8080/health        # с вашего ноутбука

5. Поставьте перед ним TLS-терминирующий прокси (для wss://)

Релей отдаёт обычный WebSocket на порту 8080. Чтобы открыть его как wss://, запустите обратный прокси на порту 443, который терминирует TLS. Релей учитывает X-Forwarded-Proto, поэтому специальная настройка не нужна.

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

Получите бесплатный сертификат с помощью certbot (sudo certbot --nginx -d relay.example.com).

Caddy

(авто-TLS, один файл):

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

Также медиа-хост Blossom

Когда задано blossom.host = "media.example.com", это имя хоста тоже должно вести на тот же порт — релей разделяет хосты внутри (как server.api_host). Добавьте второй server-блок / сайт для него:

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
}

Убедитесь, что relay.public_url в конфигурации совпадает с wss://relay.example.com.

6. Резервные копии

Остановите релей, скопируйте каталог данных, перезапустите:

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

Обновления

sh
# установка через pipe никогда не запрашивает подтверждение: используйте --force для перезаписи
# существующего бинарника (или запустите скрипт из терминала и ответьте y/N)
curl -fsSL https://raw.githubusercontent.com/iqbqioza/nostrfy/main/install.sh | sh -s -- --force
sudo systemctl restart nostrfy