📲

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

2022/12/09に公開

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

要件

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

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

これらを推奨としましたが、CPUにおいてはSnapdragon 400シリーズでもOSが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 postgresql redis libvips xorgproto

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

$ npm i -g pnpm

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

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をセットアップします。今回は バージョン 2023.9.3 を使用します。
最初に公式リポジトリからクローンします。
その後ディレクトリに入ります。

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

バージョン 2023.12.1 のソースコードに切り替えます。
最新の開発コードを使用する場合はcheckoutを行う必要はありません。

~/misskey$ git checkout 2023.12.1

依存パッケージをインストールします。早くて3分、遅くて20分程度かかります。

~/misskey$ NODE_ENV=production pnpm i

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

~/misskey$ NODE_ENV=production pnpm 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$ pnpm 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

pnpm start

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

~/misskey$ chmod +x start.sh

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

~/misskey$ ./start.sh

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

アップデート方法

これまでやってきた手順をほとんど同じように繰り返すだけです。

~/misskey$ git pull
~/misskey$ git checkout バージョン名
~/misskey$ git submodule update --init --recursive
~/misskey$ NODE_ENV=production pnpm i
~/misskey$ NODE_ENV=production pnpm build
~/misskey$ pnpm migrate

実際に使ってみて

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

CPU Qualcomm Snapdragon 8 Gen 1 (8C8T)
RAM 8GB
OS Android 13
モデル Sony Xperia 5 IV

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

Discussion