Mastodon より軽いと評判の Pleroma インスタンスを立ててみた。
確かに消費メモリはかなり少ない。
Mastodon はメモリ 1GB の VPS ではメモリ不足でスラッシングホーダイだったが、Pleroma はメモリ 512MB の VPS で Pleroma 自体が 14% 程度のメモリ消費。
PostgreSQL や httpd の消費分を含めても、メモリ 256MB の VPS で十分動作可能だと思う1。
公式のインストール手順だと引っかかるところがいくつかあったのでメモを残しておく。
早い話:
- PostgresSQL のユーザー pleroma を作る時に CREATEDB をつける。
- mix ecto.create と mix ecto.migrate の間で、PostgreSQL のスーパーユーザーで DB に CREATE EXTENSION citext; する。
- 画像が http://localhost:4000/ 下になるのは、mod_substitute (Apache の場合) で書き換える。
Erlang は Debian にも収録されているが、公式の説明通り upstream のリポジトリを使う必要がある。
git も当然必要だが、公式の説明には書かれていないので入れる。
% sudo dpkg -i erlang-solutions_1.0_all.deb
% sudo apt update
% sudo apt install esl-erlang elixir build-essential git
% sudo useradd -d /home/pleroma pleroma
% su pleroma
% cd
% git clone https://git.pleroma.social/pleroma/pleroma.git
% cd pleroma
% mix deps.get
PostgreSQL のユーザー pleroma に CREATEDB をつけてやらないとコケるのでつける。
たぶん開発者は postgres ユーザー権限で作業してるんだろうなあ。
公式説明では \c pleroma_dev から始めてるけど、そもそもデータベース pleroma_dev は後の mix ecto.create で作るから、この時点では存在しない。
% sudo -u postgres psql
CREATE USER pleroma CREATEDB;
ALTER USER pleroma WITH ENCRYPTED PASSWORD 'パスワード';
\q
% exit
config/dev.secret.exs を編集する。
公式の説明だと dev.exs をコピーして編集することになっている。
これはバージョンアップで dev.exs が更新される場合があることによるのかな。
標準だと postgres ユーザー権限を使うように書かれているので、ここはさっき作った DB ユーザーに変更する必要がある。説明とデフォルト設定にズレがある。
% mix ecto.create
公式説明だと && mix ecto.migrate してるけど、その前にやることがある。
mix ecto.migrate で citext 拡張が入ってなければ入れることになっているのだが、PostgreSQL のユーザー pleroma には拡張の権限がないので CREATE EXTENSION citext; に失敗する。
% sudo -u postgres psql
\c pleroma_dev
CREATE EXTENSION citext;
\q
これでようやく mix ecto.migrate できる。
% mix ecto.migrate
公式の説明では Nginx でリバースプロキシしているが、私は Apache を使っているので Apache でのやり方を。
/etc/apache2/sites-available/pleroma.example.com.conf を作成。
<VirtualHost *:80>
ServerName pleroma.example.com
DocumentRoot /home/pleroma/www
# Redirect permanent / https://pleroma.example.com/
</VirtualHost>
#<VirtualHost *:443>
# ServerName pleroma.example.com
# SSLEngine On
# SSLCertificateFile /etc/letsencrypt/live/pleroma.example.com/cert.pem
# SSLCertificateKeyFile /etc/letsencrypt/live/pleroma.example.com/privkey.pem
# SSLCertificateChainFile /etc/letsencrypt/live/pleroma.example.com/chain.pem
# DocumentRoot /home/pleroma/www
# ProxyPassMatch ^/(.well-known/acme-challenge) !
# ProxyPass / http://localhost:4000/
# AddOutputFilterByType SUBSTITUTE \
# text/html \
# application/json \
# application/javascript \
# text/javascript \
# text/css
# Substitute "s|http://localhost:4000/|https://pleroma.example.com/|"
#</VirtualHost>
これで Let’s Encrypt の証明書ができたらコメントアウト部分を有効にする。
アップロードしたアバター画像などが http://localhost:4000/ 下にあるような html が出力されるので、これを mod_substitute で書き換えている。
(2017/11/20 追記)
ITmedia の記事で作者が「月額2.5ドルの仮想サーバで動かしている人もいます」と言っているが、私は年額 2.99 USD の VPS で動かしている(笑)。
-
さすがに 128MB では PostgreSQL と Apache を起動した時点でメモリの残りが 30MB を割ったので無理だと判断した。 ↩︎