自行架設 nostr relay 使用 strfry

在這篇文章中,我將向大家介紹如何自行架設 nostr relay。

在這篇文章中,我將向大家介紹如何自行架設 nostr relay。在這裡,我們將使用 strfry 作為我們的 nostr relay server,並透過 nginx 作為反向代理(reverse proxy),最後利用 letsencrypt 來進行 SSL 簽章。

參考資源:

步驟一:建立使用者

首先,我們需要創建一個新的系統使用者 strfry。這樣可以確保運行 strfry 的過程中,如果發生問題,不會影響到系統的其他部分。

adduser --gecos "" --disabled-password strfry
su - strfry

步驟二:建置 strfry

接著,我們需要安裝必要的套件並且編譯 strfry。這些套件包含 git、build-essential、libyaml-perl、libtemplate-perl、libregexp-grammars-perl、libssl-dev、zlib1g-dev、liblmdb-dev、libflatbuffers-dev、libsecp256k1-dev、libzstd-dev。

sudo apt install -y git build-essential libyaml-perl libtemplate-perl libregexp-grammars-perl libssl-dev zlib1g-dev liblmdb-dev libflatbuffers-dev libsecp256k1-dev libzstd-dev
git submodule update --init
make setup-golpe
make -j4

步驟三:設定 strfry 工作空間

我將 strfry 的工作空間放置在 /home/strfry 底下,因此首先需要創建一個 strfry-db 資料夾,然後將範例的配置文件複製到 /home/strfry 底下。

mkdir /home/strfry/strfry-db
cp /home/strfry/strfry/strfry.conf ./

步驟四:修改配置文件

接著我們需要修改配置文件,特別是 info 部分的內容,包括伺服器名稱、描述、公鑰,以及聯絡方式。

info {
    # NIP-11: Name of this server. Short/descriptive (< 30 characters)
    name = "strfry default"

    # NIP-11: Detailed information about relay, free-form
    description = "This is a strfry instance."

    # NIP-11: Administrative nostr pubkey, for contact purposes
    pubkey = "unset"

    # NIP-11: Alternative administrative contact (email, website, etc)
    contact = "unset"
}

步驟五:設定 nginx

首先,我們需要以 root 使用者身分來運行以下命令。接著,我們需要安裝 nginx、certbot 以及 python3-certbot-nginx。然後刪除預設的 nginx 設定檔,並貼上新的設定檔。最後重啟 nginx。

# run as root
su root

# Install nginx
apt install nginx certbot python3-certbot-nginx
# Delete the default nginx settings file
rm -rf /etc/nginx/sites-available/default

# Paste in new settings file.
sudo vim /etc/nginx/sites-available/default

# Restart nginx
sudo service nginx restart

# set DNS A Record

# Request SSL cert from letsencrypt/certbot
sudo certbot --nginx -d subdomain.yourdomain.org

nginx 設定檔內容如下:

server {
    server_name subdomain.yourdomain.org;
    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:7777;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

步驟六:設定 systemd

接著,我們需要建立一個 systemd 服務單元檔案,讓我們的 strfry 可以作為一個服務來運行。

vim /etc/systemd/system/strfry.service

內容如下:

[Unit]
Description=Strfry Relay
After=network.target

[Service]
WorkingDirectory=/home/strfry
ExecStart=/home/strfry/strfry/strfry relay
KillSignal=SIGINT

Type=simple
Restart=always
RestartSec=30
TimeoutSec=240
LimitNOFILE=1000000

User=strfry

[Install]
WantedBy=multi-user.target

接著我們需要啟用並啟動 strfry 服務,並確認其運行狀態。

# Enable strfry service
systemctl enable strfry

# Start strfry
systemctl start strfry

# Check status
systemctl status strfry

至此,你已經完成了 nostr relay 的設定。你可以透過 Websocket King 確認你的 nostr relay 是否正常運作。