Nostrのリレーサーバーを建ててみた
はじめに
現在、弊社の社内開発でNostrを利用しています。
備忘録を兼ねてNostrについてまとめてみようと思います。
内容が多かったので、3つの記事に分けてまとめました。
1は開発をせずにNostrの知識周りだけをまとめています。
2と3は実践編です。
今回はリレーサーバーを建てます。
(※建てるだけで実装はしません)
対象読者
- Nostrに興味がある人
- 自分でリレーサーバーを建てたい人
実践
今回使用するソースはこちらにまとめています。
nostr-rs-relayというオープンソースのリレーサーバーをdocker
を利用して立ち上げます。
上記のソースはdocker imageとしても配布されているのですが、最新のソースが反映されておらず不具合があったので、実際のソースコードも利用して立ち上げたいと思います。
公式のdocker imageを利用する場合
用意するのは以下の1ファイルだけです
docker-compose.yaml
version: "3.8"
services:
nostr-relay-sample:
container_name: nostr-relay-sample
image: scsibug/nostr-rs-relay:latest
ports:
- 8080:8080
# config.tomlを変更する場合
# volumes:
# - ./config.toml:/usr/src/app/config.toml
以下のコマンドで立ち上がります。
docker compose up -d
http://localhost:8080
にアクセスできれば問題ありません。
クライアントアプリを持っているのであれば、ws://localhost:8080
でリレーに接続できるはずです。
実際のソースコードを利用
こちらのgitプロジェクトを、作業するディレクトリにクローンします。
git clone https://github.com/scsibug/nostr-rs-relay
クローンしたら同じディレクトリに
docker-compose.yaml
Dockerfile
を追加します。
version: "3.8"
services:
nostr-relay-sample:
container_name: relay
build:
context: .
dockerfile: Dockerfile
ports:
- 8080:8080
# config.tomlを変更する場合
# volumes:
# - ./config.toml:/usr/src/app/config.toml
FROM docker.io/library/rust:1-bookworm as builder
RUN apt-get update \
&& apt-get install -y cmake protobuf-compiler \
&& rm -rf /var/lib/apt/lists/*
RUN USER=root cargo install cargo-auditable
RUN USER=root cargo new --bin nostr-rs-relay
COPY ./nostr-rs-relay/Cargo.toml ./Cargo.toml
COPY ./nostr-rs-relay/Cargo.lock ./Cargo.lock
# build dependencies only (caching)
RUN cargo auditable build --release --locked
# get rid of starter project code
RUN rm src/*.rs
# copy project source code
COPY ./nostr-rs-relay/src ./src
COPY ./nostr-rs-relay/proto ./proto
COPY ./nostr-rs-relay/build.rs ./build.rs
# build auditable release using locked deps
RUN rm ./target/release/deps/nostr*relay*
RUN cargo auditable build --release --locked
FROM docker.io/library/debian:bookworm-slim
ARG APP=/usr/src/app
ARG APP_DATA=/usr/src/app/db
RUN apt-get update \
&& apt-get install -y ca-certificates tzdata sqlite3 libc6 \
&& rm -rf /var/lib/apt/lists/*
EXPOSE 8080
ENV TZ=Etc/UTC \
APP_USER=appuser
RUN groupadd $APP_USER \
&& useradd -g $APP_USER $APP_USER \
&& mkdir -p ${APP} \
&& mkdir -p ${APP_DATA}
COPY --from=builder /nostr-rs-relay/target/release/nostr-rs-relay ${APP}/nostr-rs-relay
RUN chown -R $APP_USER:$APP_USER ${APP}
USER $APP_USER
WORKDIR ${APP}
ENV RUST_LOG=info,nostr_rs_relay=info
ENV APP_DATA=${APP_DATA}
CMD ./nostr-rs-relay --db ${APP_DATA}
以下のコマンドで立ち上がります。
docker compose up -d
http://localhost:8080
にアクセスできれば問題ありません。
クライアントアプリを持っているのであれば、ws://localhost:8080
でリレーに接続できるはずです。
リレーサーバーの設定を変更
nostr-rs-relay
は、config.toml
というファイルで設定を色々いじれます。
# config.tomlを変更する場合
# volumes:
# - ./config.toml:/usr/src/app/config.toml
docker-compose.yaml
でコメントアウトされているのを解除すれば、自身のconfig.toml
を利用できます。
どういう設定ができるかは、お手数ですがconfig.toml
内をご参照ください!
デプロイ
デプロイ方法は色々あると思いますが、renderが個人的におすすめです。
無料で簡単にデプロイできました。(実際に運用するとなると無料だと厳しそうです)
Web Service
として、dockerを使ってすぐ公開できるかと思います。
詳しい手順は、こちらをご参照ください!
まとめ
今回はリレーサーバーを建てました。次回は、nostrを利用した簡易SNSアプリを作りたいと思います。
ASTRSK(astrsk.co.jp)は、スタートアップ・新規事業開発に強いシステム開発会社です。サービスやシステムの構築を得意としており、開発をはじめデザインやUXにおいても優れた経験と技術を有しています。
Discussion