📲

Androidで分散SNSを動かそう 〜Misskey編〜

2022/12/08に公開約4,000字

Misskeyは大抵はx86な環境で動かされていますが、ARMにも対応しており、Apple Silicon Macで動かすこともできます。
「ARMで動くならAndroidでも動くのでは・・・?」と思い立ったのがきっかけです。手探りしながらまとめた導入手順を解説していきます。

要件

Androidで動かすにあたって以下の条件を満たしていることをおすすめします。

CPU Qualcomm Snapdragon 710、Exynos 8シリーズ以上の64bit ARM CPU
RAM 4GB以上
ストレージ 8GB以上の空き
OS Android 7.0以上

TermuxはF-DroidからAPKをダウンロードできます。Playストア版は非推奨となりメンテナンスされなくなりました。

手順

0. 日本のミラーサーバーを使うように設定する

標準のパッケージリポジトリは日本から使うと非常に低速なので、宣伝も兼ねてしまいますが私がホスティングしている日本国内向けミラーサーバーを使うように設定します。結構速くなるのでおすすめです。
その前に、プリインストールされているパッケージを最新バージョンに更新します。更新が終わったらexitでシェルを終了してTermuxを再起動します。

$ apt update
$ apt upgrade -y

その後、termux-change-repo を実行します。するとダイアログが表示されるので、方向キーで下の「Single Mirror」に合わせて、スペースキーを押して横に「*」が付いてるのを確認したらEnterキーを押します。

その後表示されるリストも方向キーで操作し、「mirrors.cbrx.io」に合わせて同じくスペースキーを押した後にEnterキーを押します。

これで設定完了です。

1. 必要なパッケージを揃える

ライブラリのビルドに必要なコンパイラなどをインストールします。

$ apt update
$ apt install -y x11-repo
$ apt install -y build-essential binutils curl git python nodejs yarn postgresql redis libvips-static xorgproto openssl-1.1-static

インストールできたら次の手順に進みます。

2. PostgreSQLのセットアップ

MisskeyはデータベースエンジンにPostgreSQLを使っています。先にデータベースの準備をします。

PostgreSQLを初期化して、サーバーを起動します。

$ initdb $PREFIX/var/lib/postgresql
$ pg_ctl -D $PREFIX/var/lib/postgresql start

ユーザーを追加します。

$ createuser -P misskey
Enter password for new role: (パスワードを入力)
Enter it again: (もう一度入力)

データベースを作成して、所有権も同時に設定します。

$createdb -O misskey misskey

次回立ち上げるときは pg_ctl -D $PREFIX/var/lib/postgresql start を実行するだけでOKです。コマンドを実行するのが面倒な場合は ~/.profile に追記するか、スクリプトを用意しておきます。

3. Redisのセットアップ

Redisはデータベースの用意は必要ないのですが、設定を変更します。

$PREFIX/etc/redis.conf におまじないを追記します。

$ echo "ignore-warnings ARM64-COW-BUG" >> $PREFIX/etc/redis.conf

とりあえずこれだけで起動できるようになります。

Redisを以下のコマンドで起動します。

$ redis-server $PREFIX/etc/redis.conf --daemonize yes

次回立ち上げるときはこのコマンドを実行します。

4. Misskeyのセットアップ

いよいよMisskeyをセットアップします。今回は バージョン 12.119.2 を使用します。
最初に公式リポジトリからクローンします。
その後ディレクトリに入ります。

$ git clone https://github.com/misskey-dev/misskey
$ cd misskey

バージョン 12.119.2 のソースコードに切り替えます。

~/misskey$ git checkout 12.119.2

その後依存パッケージをインストールします。5分程度かかります。
途中でtfjs-nodeがエラーを出しますがインストールできなくても問題ないものなので無視して構いません。

~/misskey$ yarn install --production

インストールが完了したらビルドします。

~/misskey$ NODE_ENV=production yarn build

これでビルドはできました。次に設定を編集します。

example.ymlをdefault.ymlとして複製します。

~/misskey$ cp .config/example.yml .config/default.yml

好きなエディタで .config/default.yml を開きます。
以下の行を編集します。

.config/default.yml
url: http://localhost:3000/ # 外部に公開する場合はそのURLを (http://192.168.12.1:3000/ や https://example.com/ など)
db:
 db: misskey # DBの名前
 user: misskey # DBのユーザー名
 pass: misskey # DBのパスワード

proxy: http://127.0.0.1:1000 # お試しの場合は外部と通信できないようにする

保存して閉じたらDBを初期化します。大量のクエリーログが流れます。

~/misskey$ yarn run init

これでセットアップは完了です。

5. 起動・スクリプトの作成

最後にMisskeyを起動するためのスクリプトを書きます。
PostgreSQL、Redisを状況に応じて自動で起動するようにもしています。

start.sh
#!/bin/bash
export MK_DISABLE_CLUSTERING=1
pg_running=`ps aux | grep postgres | grep -v grep | wc -l`
if [ $pg_running -eq 0 ]; then
 pg_ctl -D $PREFIX/var/lib/postgresql/ start
fi
redis_running=`ps aux | grep redis-server | grep -v grep | wc -l`
if [ $redis_running -eq 0 ]; then
 redis-server $PREFIX/etc/redis.conf --daemonize yes
fi

yarn start

スクリプトに実行権限を与えます。

~/misskey$ chmod +x start.sh

これでスクリプトの準備ができました。あとは起動します。

~/misskey$ ./start.sh

ブラウザで http://localhost:3000/ にアクセスして初期設定の画面が表示されたら成功です!

実際に使ってみて

この記事は以下の環境で検証しました。

CPU Qualcomm Snapdragon 855 (8C8T)
RAM 6GB
OS Android 11
モデル Sony Xperia 5

1人しか使っていないので確実にとは言えないものの、意外と軽い印象です。
使わなくなったスマホをサーバーにしてみるのもいいかもしれませんね。(バッテリー管理には要注意)

Discussion

ログインするとコメントできます