軽量なActivityPub対応のHonkをお一人様サーバーとして建ててみた

はじめに

以下の記事を以前読んでからHonk鯖建立をやってみたいなぁと思い、建ててみました。

www.coelacanth-dream.com

 

建てたサーバー

honk.gamelinks007.net

 

建てるにあたってやったこと

サーバーの用意

サーバー自体はCreatodonの運用関係で利用しているさくらのVPSサーバーを併用することにしました。

 

VPSのスペックとしては

  • Ubuntu 22.04
  • メモリ 1GB
  • CPU 仮想2Core
  • SSD 50GB

という感じです。

 

実際にHonkを建ててみた印象では、メモリ512MBでもサクサク動きそうなのでGoogle Cloud PlatformのCoumpute EngineやApp Engineなどでもスペック的には十分そうでした。

 

なので新規でサーバーを建てられる場合はVPSではなく、そちらのクラウドサービス上にサーバーを用意しても良いかもしれません。

 

DNS周りの設定

さくらのVPSをすでに借りていたので、IPアドレスを控えておきました。

あとはDNS設定でサブドメインとして「honk.gamelinks007.net」を作成し、そのアドレスとIPアドレスを紐づけておきました。

 

先にこちらの手順をやっておくと後で証明書の発行するのが楽なので、このタイミングでやっといた感じですねー。

 

必要な依存関係のインストール

 

HonkではSQLite3をデータベースとして利用しています。

そのためビルド時にSQLite3周りのライブラリが必要になるのでインストールしておきます。

sudo apt install libsqlite3-dev

 

僕の場合はすでにBotなどを動かしていた関係で依存関係はこれだけで済んでいますが、まっさらなサーバーからHonkを建てる場合はおそらくほかにも依存関係が必要になるかと思います。

 

Goのインストール

次に、Goをインストールします。

後々Honkで利用するGoのバージョンが変更になることも考慮して、今回はgoenvを利用しました。

 

github.com

 

詳細は省きますが、以下のコマンドをすべて実行すればHonkのビルドに必要なGoがインストールされます。

git clone https://github.com/syndbg/goenv.git ~/.goenv

echo 'export GOENV_ROOT="$HOME/.goenv"' >> ~/.bashrc
echo 'export PATH="$GOENV_ROOT/bin:$PATH"' >> ~/.bashrc

echo 'eval "$(goenv init -)"' >> ~/.bashrc

exec $SHELL

goenv install 1.16.15

goenv global 1.16.15

 

Honkのビルド

まずはHonkのソースコードを落としてきます。

wget https://humungus.tedunangst.com/r/honk/d/honk-0.9.91.tgz -O honk.tgz

tar -xvf honk.tgz

mv honk-0.9.91 honk

 

次に、Honkのビルドを行います。honkディレクトリに移動し、makeコマンドを実行すればOKです。

cd honk

make

 
Honkの初期設定

Honkのビルドが完了したら、honk initコマンドで初期設定を行います。

./honk init

 

すると以下の設定をプロンプトで確認されます。

  • ユーザーID(アンダーバーなどの一部記号はログインできなくなるので利用できないです)
  • パスワード
  • listenするポート(localhost:3000のように設定)
  • サーバー名(honk.gamelinks007.netのように実際に利用するドメインを指定)

以上の項目を入力すると初期設定は完了です。

 

証明書の発行

次に証明書の発行を行います。

 

まずはletsencryptをインストールします。

sudo apt install letsencrypt

 

次に、指定したドメイン名で証明書の発行を行います。

sudo letsencrypt certonly --standalone -d honk.gamelinks007.net

 

正常に処理が終了すれば証明書の発行は完了です。

 

Nginxの設定

次に、Nginxの設定を進めます。

 

まずはNginxをインストールします。

sudo apt install nginx

 

次に、以下のコマンドでHonk用のNginxの設定ファイルを追加します。

sudo vi /etc/nginx/sites-enabled/honk.gamelinks007.net.conf

 

設定ファイルには以下の内容を貼り付けました。

server {
  server_name honk.gamelinks007.net;

  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }

  listen 443 ssl; # managed by Certbot

  ssl_certificate /etc/letsencrypt/live/honk.gamelinks007.net/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/honk.gamelinks007.net/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
}

server {
  if ($host = honk.gamelinks007.net) {
    return 301 https://$host$request_uri;
  } # managed by Certbot

  listen 80;

  server_name honk.gamelinks007.net;

  return 404; # managed by Certbot
}

 

証明書へのパスやhttp://honk.gamelinks007.netへアクセスされた際のリダイレクト処理などを追加しています。

 

Nginxの設定に関しては以下の記事を参考にしています。

rud.is

 

あとはNginxの設定を再読み込みさせます。

sudo systemctl reload nginx

 

サービスの追加と起動

最期にHonkをsystemdで実行できるようにサービスを追加します。

以下のコマンドでサービスを追加します。

sudo vi /etc/systemd/system/honk.service

 

サービスには以下の内容を張り付けました。

[Unit]
Description=honk
After=network.target

[Service]
Type=simple
User=honk
WorkingDirectory=/home/honk/honk
ExecStart=/home/honk/honk/honk
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

 

あとは以下のコマンドで追加したサービスを有効化し、実行すればOKです。

sudo systemctl enable honk

sudo systemctl start honk

 

これで指定したドメインにアクセスすればHonkサーバーが利用できるようになっているかと思います。

 

Honkサーバーを建てみて

連合周りがまだよくわかっていない(フォロー・フォロワー周り)感じではありますが、かなり軽量なのがいいですねー。

 

特にBotとかガンガン動かしてメモリかつかつなサーバーでもサクサク動く感じなのは非常に良い感じです。

 

あと、基本的に外部からの通知などは受け取る部分がない(というより表示箇所がわかっていないというのもありますが......)ので壁打ちで考え事を書くには非常にいい感じですねー。

ただ、公開範囲の設定などは見当たらないので誰にも見られたくない壁打ちという意味合いでは使いにくいかもです。

 

あと何よりも他のActivityPub対応のものに比べると圧倒的に簡単に建てれるのは良いですねー。

最近CalckeyやMisskey を建てた時も「簡単で良いな」と思ったんですが、それをはるかに上回る簡単さでした。

 

なので、特に通知や交流などが必要ないお一人様サーバーとしてはかなり建てやすいのでいいかもしれないです。