在這篇文章中,我將向大家介紹如何自行架設 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 是否正常運作。