Androidで分散SNSを動かそう 〜Misskey編〜
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
を開きます。
以下の行を編集します。
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を状況に応じて自動で起動するようにもしています。
#!/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