3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Pi上で藍ちゃんを動かす

Posted at

藍ちゃんとは

藍ちゃんはMisskeyの日本語用Botです。
しゅいろ(@syuilo@misskey.io)さんにより開発されており、リマインドや数取りゲームなどのゲームをしてくれたり、おしゃべりしてくれたりします。
Dockerfileが用意されているため、Dockerさえインストールされていれば環境構築不要で動かすことができます。
リポジトリはこちら

ぼくが運営しているMisskeyサーバーであるjiskeyでも藍ちゃんを動かしており、多くの方にフォローしていただいています。

Raspberry Piで動かすことにした経緯

jiskeyでは藍ちゃんをもともとGCP(e2-micro)で動かしていました。
しかしながら月1400円ほどかかっており、割高に感じていました。
そのため、jiskeyを動かしているRaspberry Pi上で藍ちゃんも動かすことでクラウド費用を抑えることにしました。

スクリーンショット 2023-12-29 16.40.39.png

前提

動作環境は以下のとおりです。

  • ハード: Raspberry Pi 4B 4GB
  • OS: Raspberry Pi OS Lite 10 (debian bullseye)
  • Docker

今回藍ちゃんはDockerで動かします。
Raspberry Pi上で動作するようにした藍ちゃんはこちらにあるのでこちらも参考にしてください。

Raspberry Piで藍ちゃんを動かす

docker-compose.ymlを書き換える

以下のようにdocker-compose.ymlのplatformを書き換えます。

      context: .
      args:
        - enable_mecab=1
    platform: linux/aarch64
    volumes:
      - './config.json:/ai/config.json:ro'
      - './font.ttf:/ai/font.ttf:ro'

Dockerfileを書き換える

ベースイメージを変更する

オリジナルはベースイメージにnode:lts-bullseyeを使用していますがこれをnode:18-bullseyeに変更します。これはNode.jsのバージョンが原因で動かなくなることを懸念して動くことが確認できているNode 18に変えたのですが、ltsにしても問題ないかもしれません。

FROM node:18-bullseye

依存パッケージをインストールするようにする

aarch64向けのnode Dockerイメージにはcanvasモジュールの依存関係が入っていないようで、npm install時にcanvasモジュールがインストール出来ない旨のエラーが出ます。
また、makeもインストールされていないためビルド時にビルドできない旨のエラーが出ます。
そこで、これらの依存関係をインストールするようにします。

RUN apt-get update && apt-get install -y tini libpango1.0-dev libcairo2-dev libjpeg-dev libgif-dev build-essential

[余談]ここでずっと詰まっていたのですがChat GPTに聞いたら一瞬で解決しました…

mecabの辞書のパスを書き換える

以下のようにmecabの辞書のパスを書き換えます。

echo "dicdir = /usr/lib/aarch64-linux-gnu/mecab/dic/mecab-ipadic-neologd/" > /etc/mecabrc

npm installを書き換える

@types/babel__traverseがバグっているらしくnpm install && npm buildだとビルドに失敗するためバージョンを下げてインストールするようにします(参考)。

RUN npm install --save @types/babel__traverse@7.18.3 && npm run build

Raspberry Pi上で動かしてみた感想

当初Misskeyと藍ちゃんを同時に動かすことで多少負荷が上がると考えていましたが、実際に動かしてみるとそのようなことはありませんでした。
そのため、コスト削減のために同時に動かすのは選択肢としてありなのかもしれません。
しかしながらデータが吹っ飛ぶときはMisskeyと藍ちゃんの両方とも吹っ飛ぶので、データが飛んだときの対策が今後の課題です。
定期的にデータのバックアップを取ろうと思います。

今回の教訓

npmのエラーはChat GPTに任せよう

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?