Raspberry PiでPleromaインスタンスを構築する

ちょっとしたメモを残せる場所を自宅LAN内に置いたら便利なんじゃないかと思って、ラズパイにPleromaインスタンスを立ててみた。

基本的にはPleroma公式にあるPleromaの入れ方の通りにすればよいのだが少し躓いた点もあったので、一応手順を全て載せることにする。

前提

最低限閲覧と書込みができるような状態にすることを目標とする。
自宅LAN内からしか見られないインスタンスのため、https対応に必要な作業は今回は行わない。
本来はLAN内のみの利用でも本格的に運用するなら必要なことではあるのだが、単に使いたいだけの目的からすると面倒なので……

環境

  • Raspberry Pi 3 Model B
  • Raspbian Stretch Lite (2018-11-13)

パッケージを最新化

$ sudo apt update
$ sudo apt dist-upgrade

必要なパッケージのインストール

現時点で必要なパッケージが入っているか調べる。

$ dpkg -l git build-essential openssl ssh sudo postgresql-9.6 postgresql-contrib-9.6

git__と__postgresql-9.6、__postgresql-contrib-9.6__が入っていなかったので入れる。

$ sudo apt install git
$ sudo apt install postgresql-9.6

Elixirのインストール

Elixirは公式のInstalling Elixirにあるとおりにインストールする。

$ echo "deb https://packages.erlang-solutions.com/debian stretch contrib" | sudo tee /etc/apt/sources.list.d/erlang-solutions.list
$ wget https://packages.erlang-solutions.com/debian/erlang_solutions.asc
$ sudo apt-key add erlang_solutions.asc
$ sudo apt update
$ sudo apt install elixir

Erlangのインストール

$ sudo apt install erlang-dev erlang-parsetools erlang-xmerl erlang-tools

pleromaユーザの追加(sudo権限あり)

$ sudo adduser pleroma
$ sudo usermod -aG sudo pleroma

パスワードは任意のものを設定する。
Full Name以下は何も入力しなくてもいい。

Pleromaをインストール

ユーザをpleromaに変更し、ホームディレクトリにGitリポジトリをクローンする。

$ su pleroma
$ cd ~
$ git clone https://git.pleroma.social/pleroma/pleroma

ユーザを変更したからか、mixコマンドを使おうとするとコマンドがないといわれてしまうので、もう一度Elixirをインストールする。

$ sudo apt install elixir

Pleromaの依存パッケージをインストールする。
途中で「Shall I install Hex?」と聞かれるのでyを入力する。

$ cd pleroma/
$ mix deps.get

コンフィグレーションを生成する。
途中で「Shall I install rebar3?」と聞かれたらyを入力する。

$ mix pleroma.instance gen

生成した__generated_config.exs__を__prod.secret.exs__としてコピーして、ファイルを編集する。

$ sudo cp config/generated_config.exs config/prod.secret.exs
$ vi config/prod.secret.exs

今回はLAN内のみに公開するインスタンスを作成したいので、config :pleroma, Pleroma.Web.Endpoint,のところにあるurlの部分を以下のように変更する。
IPアドレスはラズパイにあらかじめ固定IPを振り、そのIPアドレスを記述する。

url: [host: "192.168.0.102", scheme: "http", port: 4000]

hostにlocalhostを指定しても動作はするが、インスタンスにアクセスした際ログに以下のようなエラーメッセージが表示されてしまう。

13:32:40.439 [error] Could not check origin for Phoenix.Socket transport.

Origin of the request: http://192.168.0.102:4000

This happens when you are attempting a socket connection to
a different host than the one configured in your config/
files. For example, in development the host is configured
to "localhost" but you may be trying to access it from
"127.0.0.1". To fix this issue, you may either:

  1. update [url: [host: ...]] to your actual host in the
     config file for your current environment (recommended)

  2. pass the :check_origin option when configuring your
     endpoint or when configuring the transport in your
     UserSocket module, explicitly outlining which origins
     are allowed:

        check_origin: ["https://example.com",
                       "//another.com:888", "//other.com"]

データベースを生成した後、マイグレーションを実行する。

$ sudo su postgres -c 'psql -f config/setup_db.psql'
$ MIX_ENV=prod mix ecto.migrate

Pleroma起動

後は以下のコマンドでサーバを起動し、http://<指定したIPアドレス>:4000にアクセスすればページが表示される。

$ MIX_ENV=prod mix phx.server

おわりに

これ以降にも公式のインストール手順にはnginxの設定やサービスとして登録する等の作業があるが、とりあえず使える状態となったので一旦ここまでとする。