noellabo's tech blog

@noellaboの技術ブログ

Ubuntu 21.04でPleroma/OTP

Pleromaは、ソースコードを改造しないで使うなら、プレコンパイル済みのバイナリをインストールするのが推奨されています。ソースからだと、Elixirのコンパイルめっちゃ時間かかるからねー。

MastodonやMisskeyでインストールやアップデートに苦労することを考えると、時間もかからないですし、失敗しないので、サクッと導入できて良いかと思います。

実際にUbuntu 21.04のVPSにインストールしてみたので、流れをつかんでみてください。PostgreSQLは13、RUMインデックスを使います。 なお、実際の手順は、公式のドキュメントを合わせて読まれることをお薦めします。

Installing on Linux using OTP releases

Installing Pleroma/OTP on Ubuntu 21.04

Prepare the system

arch="$(uname -m)";if [ "$arch" = "x86_64" ];then arch="amd64";elif [ "$arch" = "armv7l" ];then arch="arm";elif [ "$arch" = "aarch64" ];then arch="arm64";else echo "Unsupported arch: $arch">&2;fi;if getconf GNU_LIBC_VERSION>/dev/null;then libc_postfix="";elif [ "$(ldd 2>&1|head -c 9)" = "musl libc" ];then libc_postfix="-musl";elif [ "$(find /lib/libc.musl*|wc -l)" ];then libc_postfix="-musl";else echo "Unsupported libc">&2;fi;echo "$arch$libc_postfix"

対応アーキテクチャかどうかを確認しています。実行結果の文字列がUnsupported libcだったら、ソースからのビルドが必要です。 ここではamd64となりましたので、後ほどPleromaをインストールするところでexport FLAVOUR="amd64"と設定します。

apt install -y curl unzip libncurses5 postgresql postgresql-contrib nginx certbot libmagic-dev
apt install -y postgresql-13-rum
apt install -y imagemagick ffmpeg libimage-exiftool-perl

2行目はRUMのエクステンションです。 3行目は画像に加工を入れる場合の追加のパッケージで、不要なら省略できます。

Pleroma

adduser --system --shell  /bin/false --home /opt/pleroma pleroma
export FLAVOUR="amd64"
su pleroma -s $SHELL -lc "
curl 'https://git.pleroma.social/api/v4/projects/2/jobs/artifacts/stable/download?job=$FLAVOUR' -o /tmp/pleroma.zip
unzip /tmp/pleroma.zip -d /tmp/
"

su pleroma -s $SHELL -lc "
mv /tmp/release/* /opt/pleroma
rmdir /tmp/release
rm /tmp/pleroma.zip
"
mkdir -p /var/lib/pleroma/uploads
chown -R pleroma /var/lib/pleroma
mkdir -p /var/lib/pleroma/static
chown -R pleroma /var/lib/pleroma
mkdir -p /etc/pleroma
chown -R pleroma /etc/pleroma
su pleroma -s $SHELL -lc "./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql"

ここで、サーバのドメインや名称、管理者のメールアドレスなどを聞かれます。 今回はPostgreSQLのRUMインデックスを有効にする設定にしているので、RUMの質問にyと回答してください。

su postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql"
su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate"
su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate --migrations-path priv/repo/optional_migrations/rum_indexing/"

これでももうインストールは終了です。

Test

デーモンとして起動(バックグラウンドで動作させるモード)して、APIを呼んでテストします。

su pleroma -s $SHELL -lc "./bin/pleroma daemon"
sleep 20 && curl http://localhost:4000/api/v1/instance

20秒待つようになっていますが、起動が完了せずにエラーになることがあります。再度実行してください。 インスタンス情報が表示されたら、サーバとして無事に動作しています。

ダメっぽかったら、このあたり/opt/pleroma/tmp/log/erlang.log.1のログをみてください。

su pleroma -s $SHELL -lc "./bin/pleroma stop"

確認が済んだら停止します。

Nginx

certbot certonly --standalone --preferred-challenges http -d yourinstance.tld
cp /opt/pleroma/installation/pleroma.nginx /etc/nginx/sites-available/pleroma.conf
ln -s /etc/nginx/sites-available/pleroma.conf /etc/nginx/sites-enabled/pleroma.conf

$EDITOR /etc/nginx/sites-available/pleroma.conf

nginx -t

systemctl start nginx

Systemd

cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service
systemctl start pleroma
systemctl enable pleroma

Create Admin User

cd /opt/pleroma
su pleroma -s $SHELL -lc "./bin/pleroma_ctl user new joeuser joeuser@sld.tld --admin"

その他

certbotの定期実行による証明書の更新などが必要ですが、ここでは省略します。