藍ちゃんとは
藍ちゃんはMisskeyの日本語用Botです。
しゅいろ(@syuilo@misskey.io)さんにより開発されており、リマインドや数取りゲームなどのゲームをしてくれたり、おしゃべりしてくれたりします。
Dockerfileが用意されているため、Dockerさえインストールされていれば環境構築不要で動かすことができます。
リポジトリはこちら
ぼくが運営しているMisskeyサーバーであるjiskeyでも藍ちゃんを動かしており、多くの方にフォローしていただいています。
Raspberry Piで動かすことにした経緯
jiskeyでは藍ちゃんをもともとGCP(e2-micro)で動かしていました。
しかしながら月1400円ほどかかっており、割高に感じていました。
そのため、jiskeyを動かしているRaspberry Pi上で藍ちゃんも動かすことでクラウド費用を抑えることにしました。
前提
動作環境は以下のとおりです。
- ハード: 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に任せよう