プログラミングなんてわからないんですけど〜

元プログラマによるプライベートでのプログラミング日記。1/3のつもりだけどソフト関連はここがメイン

fediversesearchの構築手順をまとめてみる(その2:fediversesearch-fe)

今回は、WebUIのfediversesearch-feの構築手順です。サービス本体の構築方法については、以下の記事を参照してください。

www.kaias1jp.com

今回対象とするOS

今回対象とするOSは、Ubuntu 20.04.2 LTSとします。

構築手順

前準備(fediversesearch-serverとサーバーを分ける場合)

fediversesearch-feはrubyとbundler gem、パッケージマネージャーのyarnを必要とします。また、fediversesearchユーザーでの作業を前提とします。これらは、fediversesearch-serverを構築した場合はすでにありますがサーバーを分ける場合は改めて準備しなくてはなりません。

OSの最新化

まずは、OSを最新の状態にしておきます。

sudo apt update
sudo apt upgrade -y

tmux上で作業するのがお勧めです。
再起動が必要な場合は念のため再起動してください。

yarnをインストールする

node.jsのパッケージマネージャーであるyarnをインストールします。

curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update && sudo apt install yarn
ユーザーの作成

「fediversesearch」というユーザーを作成します。

sudo -i
adduser fediversesearch --disabled-login -q --gecos ""
rubyのインストール

fediversesearchユーザーになって、rubyをインストールします。

apt install -y build-essential libssl-dev zlib1g-dev
su - fediversesearch
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="~/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
rbenv install 2.7.3
rbenv global 2.7.3
bundlerのインストール

bundlerをインストールします。

gem install bundler

fediversesearch-feをインストールする

ruby2.7.3とbundler、yarnがfediversesearchユーザーで使える状態になったら、fediversesearch-feをインストールします。

前準備

sqlite3のライブラリが必要ですので、それをインストールします。

sudo apt install libsqlite3-dev

以下の作業はfediversesearchユーザーにて、そのホームディレクトリ直下から始めます。

fediversesearch-feのソースコードのダウンロード

githubリポジトリからfediversesearch-feのソースコードをダウンロードします。展開先はwebuiディレクトリとしています。

git clone https://github.com/kaias1jp/fediversesearch-fe.git webui
必要なgemのインストール

webuiディレクトリに移動して、必要なgemをインストールします。

cd webui
bundle update

mimemagic gemのバージョン関連の問題を避けるため、「bundle install」ではなく「bundle update」を実行しています。

master.keyを作成する

config/master.keyがないとrailsの各コマンドが実行できません。そのため、再作成します。

EDITOR=vim bin/rails credentials:edit
yarn installの実行

yarn installを実行します。

yarn install
.env.productionファイルを作成する

設定ファイルである「.env.production」ファイルを作成します。ファイルの中身はこんな感じです。

.env.production

FS_SERVER_URL = "http://fediversesearch-serverのIPアドレス:18000"
GITHUB_URL = "https://github.com/kaias1jp/fediversesearch"

FS_SERVER_URLでfediversesearch-serverのサービスを指定します。前の記事ではポートは18000としていますので、ここでも同じにします。fediversesearch-serverのサービスが動いているサーバーのIPアドレスなどを記述します。なお、WebUIをインターネット上に公開するときは、インターネットからfediversesearch-serverのサービスにアクセスできるようにします。ただし、直接アクセスする必要はなく、nginxなどを挟んでfediversesearch-serverはインターネットに直接は出ない方法もあります。
GITHUB_URLは、forkした場合にそのリポジトリを指定すると、WebUIの画面のフッターにリンクが載ります。

アセットをプリコンパイルする

アセットをプリコンパイルします。

RAILS_ENV=production bundle exec rails assets:precompile

これを実行すると、publicフォルダの下にassetsとpacksフォルダが作られて、WebUIを構築するために必要なファイルが置かれます。

試しにfediversesearch-feを立ち上げてみる

確認のため、fediversesearch-feを立ち上げてみましょう。

RAILS_ENV=production rails s -b 0.0.0.0

webブラウザから「http://fediversesearch-feIPアドレス:3000」にアクセスすると、以下のような画面が表示されるはずです。
f:id:kaias1jp:20210923084634p:plain
前回の記事でテストデータを投入した場合、総インデックス数は「5」と表示されます。キーワードに「個人的」を指定して検索した結果がこうなれば問題ありません。
f:id:kaias1jp:20210923084953p:plain

fediversesearch-feをサービスとして登録する

動作確認が終わったら、fediversesearch-feをサービスとして登録しましょう。rootユーザーに戻ってserviceファイルを作成します。作成するファイルは「fediversesearch-fe.service」とします。「/etc/systemd/system/」の下に作成してください。

fediversesearch-fe.service

[Unit]
Description=fediversesearch-fe
After=network.target

[Service]
Type=simple
User=fediversesearch
WorkingDirectory=/home/fediversesearch/webui
Environment="RAILS_ENV=production"
Environment="PORT=13000"
ExecStart=/home/fediversesearch/.rbenv/shims/bundle exec puma -C config/puma.rb
ExecReload=/bin/kill -SIGUSR1 $MAINPID
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

環境変数に「PORT=13000」を指定していますが、ポート番号に決まりはありませんので変更してかまいません。ファイルの作成が終わったら、サービスとして登録してから起動します。

systemctl daemon-reload
systemctl enable fediversesearch-fe
systemctl start fediversesearch-fe


これで、fediversesearch-feの構築は終わりです。ここまでで、基本となるサーバーとフロントのWebUIが立ち上がりました。次は、実際にサイトのデータを集めてくるクローラーの構築になります。