Pleromaの開発環境を作る

Pleromaという異常な分散SNSがあり、3.distsn.orgというインスタンスを運営している。インスタンスの運営よりも独自機能をもりもりやっていくことに興味があるので、そのようにする。

インスタンスを設立する

Pleromaのインストールは公式のWikiを読めば難しくない。日本語もあるが、英語が苦痛でなければディストリビューション別のドキュメントを読むほうが早い。やっていきましょう。

余談ですが、マストドンと比較して、Pleromaのインストールの楽なところを挙げる。

  • メールサーバーの設定が不要。マストドンでは、メールサーバーを自分で建てるか、Mailgunあたりのメールサーバーを使う必要がある。
  • 管理者ユーザーの作成が不要。Pleromaには管理者ユーザーが存在せず、インスタンスの設定はローカルなファイルを編集することで行う。
  • 安価な計算機資源でまともに動く。さくらのVPS 512 MBでも余裕。

Pleromaのインストールの面倒なところは、Elixirのバージョンが最新である必要があり、ディストリビューションのパッケージではなく、Elixirのウェブサイトからパッケージを取ってくる必要があることである。前述の手順書にはこの方法も書いてあるので安心だ。

レポジトリが2個ある

開発環境を作るということは、ソースコードとやっていくということで、まずはPleromaのGitLabにアカウントを作る必要がある。GitHubに依存して生活していると、まずここが面倒だが、やっていく。

次に pleromapleroma-fe をフォークする。レポジトリが2個あるというのが割と驚きポイントである。pleromaはバックエンド (サーバーサイド)、pleroma-feはフロントエンド (クライアントサイド) であり、両者は別のレポジトリになっている。

独自機能をやっていくことに興味がなく、単にインスタンスを設立したいだけなら、pleromaレポジトリだけをクローンすればよい。なぜかというと、pleroma-feレポジトリをビルドした生成物を、定期的に (開発者が手動で) pleromaレポジトリにコピーしているからである。具体的には、pleroma-fe の /dist/index.html と /dist/static が、それぞれ pleroma の /priv/static/index.html と /priv/static/static にコピーされる。

ここで、pleromaレポジトリが ~/pleroma にクローンされており、pleroma-fe レポジトリが ~/pleroma-fe にクローンされているとする。まず準備として、pleroma-fe で以下をやっていく必要がある。(補足: pleroma-fe の開発環境を作る)

npm install
npm run build

すると ~/pleroma-fe/dist ディレクトリに生成物が入る。あとは以下のようなシンボリックリンクを作ればよい。

cd ~/pleroma/priv/static
mv index.html index.html_
mv static static_
ln -s ~/pleroma-fe/dist/index.html .
ln -s ~/pleroma-fe/dist/static .

これで動くと思う。pleroma-fe の側でコードを編集したときは npm run build で新しくなる。pleroma の側でコードを編集したときは、たいてい何もしなくても新しくなるが、ごく稀に MIX_ENV=prod mix ecto.migrate が要る。

やや面倒なのは、pleromaレポジトリの側でgit関連の操作をしたいときは、これらのシンボリックリンクを元に戻す必要があることだ。そのために、上記のコマンド例ではmvコマンドで元のファイルを残している。

config.jsonをやっていく

さて、pleromaレポジトリには /priv/static/static/config.json があり、pleroma-feレポジトリには /dist/static/config.json がある。これらは内容は同一であるべきであり、開発者がぼんやりしていない限りはそうなっている。とはいえ、このファイルはインスタンスごとに設定を書き換えて使うので、どちらか一方だけを書き換えるというミスがあり得る。すると、シンボリックリンクに切り替えたときに動作が変わることになる。両者を常に同一の内容に保つべきだろう。

訂正 よく考えたら pleroma-feレポジトリの /static/config.json が /dist/static/config.json にコピーされるので、/static/config.json を編集する必要がある。npm run build で更新される。

追記

ふむっふむっ

広告

投稿者: Hakaba Hitoyo

墓場一夜