ActivityPub Relayのデプロイ

大まかな手順

 自分の手元のPCにて諸々を準備した後、Dockerを利用したKamalによりVPSに持っていく流れです。

準備するもの

具体的な手順

①自分のPCにDocker、Rubyを入れます。

 Dockerはアカウントの確保が必要、リポジトリ作成は不要です。
 入れたDockerアプリを起動してログインしておくことを忘れないようにしましょう。
https://www.docker.com/ja-jp/

 Rubyについては、Macの場合、rbenvをHomebrew経由で入れることができます。
https://github.com/rbenv/rbenv

 2024年11月現在、Ruby 3.3.6が必要ですので、入れておきましょう。

rbenv install 3.3.6

 他のプロジェクトがない場合は、全体を3.3.6にしておいた方が、後で関連スクリプトをbundle installで入れるのにbundlerのバージョンで引っかかりにくくなります。
 自分の場合、先にコードをもらってきてローカルだけにRuby 3.3.6を指定した結果、PC内のデフォルトが2.6.0だったようで最新のbundlerが使えず、引っかかりました。

rbenv global 3.3.6

 ついでに、そのbundlerも念の為に確保しておきましょう。

gem install bundler -v 2.5.23

②ソースコードを持ってきて、関連スクリプトも展開します。

 なるべく浅い階層、できれば日本語の混ざらない場所が無難と思います。
 深い階層に展開した場合、最後のデプロイでエラーとなる確率が高いです。

git clone https://github.com/S-H-GAMELINKS/activity-pub-relay.git

cd activity-pub-relay

bundle install

③Railsで生成される暗号鍵を生成し、予め控えておきましょう。

 Railsはsecret_key_baseという暗号化の鍵を生成し、機密情報をその鍵で暗号化してしまうので、確保が必要です。

EDITOR=<Your Editor> bin/rails credentials:edit

 この<Your Editor>については、各々の使いやすいエディターを指定すると良いでしょう。
 コンソール内に鍵となる文字列が表示されますので、絶対必ず忘れずにメモしておきましょう。
 Kamalに渡す必要があり、設定として記載する必要が出てきます。

④VPSなどの準備をします。

 IPの確保、VPSにおける作業用ユーザの作成とDockerのインストール、作業用ユーザのdockerとのグループ化、SSH鍵の確保、DNSの設定などを行いましょう。

sudo apt update

sudo apt upgrade -y

sudo apt install -y docker.io curl git

sudo usermod -a -G docker <Server Username>

SSH鍵の作成と登録について

 Kamalを使うのにもSSH鍵は必要なので、この段階で作成・登録しておくと楽だと思います。
 鍵の作成にはVPSに接続していない状態で以下のコマンドを使います。

ssh-keygen

 鍵の名称を変更したい場合は、パスごと指定しないと行方不明になります。
 作成後の鍵については、秘密鍵を自分のPCのターミナルに、公開鍵をVPSに登録する必要があります。

 自分のPCのターミナルに秘密鍵を登録するコマンドは以下です。

ssh-add <SSH Private Key Path>

 VPSに公開鍵を登録するには、VPSに接続していない状態で以下のコマンドを使います。

ssh-copy-id <SSH Public Key Path> <Server Username>@<Server IP>

⑤DockerHubのAPIトークンを作成します。

 これはDockerHubのページ右上から行けるAccount SettingsのSecurityという項目内、Personal access tokensにて作成可能です。
 権限は、Read / Writeが必要とのことです。
https://hub.docker.com

 確保したトークンも、先ほどの暗号鍵同様に、メモして控えることを忘れずに。

⑥Kamalの設定ファイルを作成します。

 ソースコード中の.env.sampleをテンプレートとしてコピー、必要な情報を記載して.envとして作成・保存します。
 自分のPCのactivity-pub-relayディレクトリ内にいることを確認の上でコマンドを入力しましょう。

cp .env.sample .env

SERVER_IP=<Server IP>
SERVER_USERNAME=<Server Username>
SERVER_SSH_PORT=<Server SSH Port>
LOCAL_DOMAIN=<Server Domain>
REPOSITORY_NAME=<複数リレーを設置するときはそれぞれ異なるリポジトリ名>
KAMAL_REGISTRY_USERNAME=<Registry Username>
KAMAL_REGISTRY_PASSWORD=<Registry Password>
SECRET_KEY_BASE=<secret_key_base value>
TERM_OF_SERVICE_LINK=<利用規約へのリンク>
SOURCE_CODE_LINK=<フォークしている場合はフォークへのリンク>
ADMIN_LINKS=<Fediverseでのアカウントへのリンク>
ALLOWED_HASHTAGS=<ハッシュタグリレーとしてのオプションを利用する場合に指定するハッシュタグ>

 サーバードメインにはhttps://は不要です。
 また、KamalはDockerを利用していますので、上記のKAMAL_REGISTRY_部分にはDockerでのユーザーネーム、及び先ほど作成したトークンを記載します。

 ハッシュタグリレーとして特定のハッシュタグのみをリレーしたい場合は、最後の項目に " または ' で指定ハッシュタグ一覧を下記の例のように囲みます。
 ハッシュマークは必要、カンマの前後に空白は不要です。

ALLOWED_HASHTAGS="#ハッシュタグ1,#ハッシュタグ2"

⑦サーバーをデプロイします。

 引き続き、自分のPCのactivity-pub-relayディレクトリ内にて入力します。

kamal setup

 うまく行っていれば、数分くらいでデプロイが完了します。

ActivityPub Relayの初期設定