RaspberryPiにPleromaをインストールしてみる(Pleroma導入編)

技術

前のエントリの続き。Pleromaのインストールから。

概略

The magical world of Pleroma, setting up your instance.
This little blog post will guide a user through installing pleroma on a " instance" as suggested by lain. First, what is pleroma? Pleroma is an OStatus and Ac...

このページがPleromaのインストールの手順としてはいいらしいのだけど、他のページもいくつか参考にしてある程度独自にやって見た。

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

基本ツールパッケージのインストール

まずは、gitnginxpostgresqlなど必要なものをインストール

$ sudo update && sudo apt dist-upgrade && sudo apt autoremove && sudo apt autoclean
$ sudo apt-get install build-essential git postgresql nginx letsencrypt

build-essentialは最新になっていてインストールされなかったので外してもいいかも。
certbotはなんかよく分からないけど認証取ってもらえなかったので、最終的にletsencryptを利用する方向にしたのでここでインストールしておく。

後、この時点でDDNS取ってるので、万が一に備えて/var/www/html/index.htmlを作成しておく。

$ sudo nano /var/www/html/index.html

nginxを使っていることを隠すのが目的なので、内容はなんでもいいのですが、

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<h1>test</h1>
</body>
</html>

こんな感じのものにしています。

elixirのインストール

elixirのインストールに関しては、ほとんどのサイトでDebianかUbuntu用の手順なので、下記ページのRaspbian手順通りにインストール準備を進める。

Installing Elixir
Website for 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

これで準備ができたので、elixiresl-erlangのインストールを実施。

$ sudo apt-get install --no-install-recommends elixir esl-erlang

インストールできたら、キーチェインファイルは一応削除しておく

$ rm erlang_solution.asc

Pleromaのインストール

インストール可能な必要パッケージのインストールが済んだので、ここからPleromaのインストール。

pleromaユーザの作成

最初にPleroma用ユーザーを作成。ほぼ悩まなくていいと思います。フルネーム〜その他までは特に必要ないのでEnterで大丈夫。

$ sudo adduser pleroma
新しいグループ `pleroma' (1001) を追加しています...
新しいユーザ `pleroma' (1001) をグループ `pleroma' として追加しています...
ホームディレクトリ `/home/pleroma' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました
pleroma のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
	フルネーム []: 
	部屋番号 []: 
	職場電話番号 []: 
	自宅電話番号 []: 
	その他 []: 
以上で正しいですか? [Y/n] y

次に、pleromaユーザーをsudoグループに所属させ、pleromaユーザに切り替える。

$ usermod -aG sudo pleroma
$ su - pleroma

Pleromaのインストール

pleromaのソースをクローンする。

$ git clone https://git.pleroma.social/pleroma/pleroma

クローンしたら、配下にできた~/pleromaディレクトリへ移動して、追加で必要なパッケージのインストール。

$ cd pleroma
$ mix deps.get
!!! RUNNING IN LOCALHOST DEV MODE! !!!
FEDERATION WON'T WORK UNTIL YOU CONFIGURE A dev.secret.exs
Could not find Hex, which is needed to build dependency :phoenix
Shall I install Hex? (if running non-interactively, use "mix local.hex --force") [Yn] y

上記のようにHexのインストールを聞かれるのでインストールする。

作業が終わったら、コンフィグを生成する。

 $ mix generate_config
!!! RUNNING IN LOCALHOST DEV MODE! !!!
FEDERATION WON'T WORK UNTIL YOU CONFIGURE A dev.secret.exs
Could not find "rebar3", which is needed to build dependency :parse_trans
I can install a local copy which is just used by Mix
Shall I install rebar3? (if running non-interactively, use "mix local.rebar --force") [Yn] y

ここでもrebar3のインストールを求められるので、インストール。
少し時間がかかるので、まったり待つ。
少々Warningメッセージが目立つログが流れるが動作に支障はなさそうなので待つ。

最後に、ドメイン名、インスタンス名、メールアドレスを尋ねられるのでそれぞれ入力して終了。

--- THIS WILL OVERWRITE YOUR config/generated_config.exs! ---

What is your domain name? (e.g. pleroma.soykaf.com): [ドメイン名]
What is the name of your instance? (e.g. Pleroma/Soykaf): [インスタンス名]
What's your admin email address: [メールアドレス]

Writing config to config/generated_config.exs.

Check it and configure your database, then copy it to either config/dev.secret.exs or config/prod.secret.exs

Writing setup_db.psql, please run it as postgre superuser, i.e.: sudo su postgres -c 'psql -f config/setup_db.psql'

生成したgenerated_config.exsを記載通りにprod.secret.exsに変更する。

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

postgresqlデータベースもセットアップファイルを生成してるので記載通りにコマンドを走らせる。

$ sudo su postgres -c 'psql -f config/setup_db.psql'

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

$ MIX_ENV=prod mix ecto.migrate

これも時間もかかり、warningも目立つがそのまま待つ。

ローカル環境での動作確認

マイグレーション終わったら、まずはローカル環境で動作確認。
そのため、pleromaを起動する。

$ MIX_ENV=prod mix phx.server

起動するとログがガンガン流れるので、ブラウザで4000番ポートへアクセスする

http://[ラズパイのIPアドレス]:4000/

これでサイトが表示ができれば問題ないので、CTRL+Cでpleromaを終了させる。

ルーターのポート開放

ここまででやっておいていいけど、ここでルーターのポート解放を実施するのが吉かなと。

我が家は、NTTのHGW(PR-500MI)なので、詳細設定→静的NAT設定→ワンタッチ設定にあるWebサーバ設定を有効にして、ラズパイのIPアドレスを指定して終わり。

nginxの設定

pleroma側でnginxの設定ファイルを用意してくれているので、/etc/nginx/sites-enabled/へコピーする。

$ cp /home/pleroma/pleroma/installation/pleroma.nginx /etc/nginx/sites-enabled/

設定ファイルを開き、example.tldになっている箇所を漏れなく自分のドメイン名に変更する。

$ sudo nano /etc/nginx/sites-enabled/pleroma.nginx

Let’s Encryptの証明書取得

ここが一番苦しんだ。参考にしているサイトの手順で行うと、nginxが再起動を受け付けなくなる(/etc/nginx/sites-enabled/pleroma.nginxが証明書取得している前提の設定になっているのが原因なのだが、設定の再読み込みする必要があるため)

仕方ないのでcertbotを諦めて、letsencryptを実行する方法を取った。

$ sudo letsencrypt certonly --standalone -d [ドメイン名]
結局--standaloneオプションを使ったのでcertbotでも大丈夫な気はする

証明書の取得ができたら、nginxを再起動して設定を読み込ませる。

$ sudo systemctl restart nginx

ここで、エラーが出るようだと証明書の取得に失敗しているか、/etc/nginx/sites-enabled/pleroma.nginxに間違いがある。

pleromaのサービス登録

先にこれを行ってもいいのだけど、なんとなくここで。実際はnginxの設定を終わらせた直後に行なうべきかと。

最初に、pleromaに用意してあるsystemctl用のスクリプトを/etc/systemd/system/へコピーする

$ cp /home/pleroma/pleroma/installation/pleroma.service /etc/systemd/system/

コピーしたpleroma.serviceに追記が必要なのでnanoで編集する。追記箇所は下の+の1行。

[Unit]
Description=Pleroma social network
After=network.target postgresql.service

[Service]
User=pleroma
WorkingDirectory=/home/pleroma/pleroma
Environment="HOME=/home/pleroma"
+ Environment="MIX_ENV=prod"
ExecStart=/usr/local/bin/mix phx.server
ExecReload=/bin/kill $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=pleroma.service

編集後、サービスを有効化する。

$ sudo systemctl enable pleroma --now

既にサービスが動いてる旨のエラーが出るかも(--nowオプションの影響)なので、以下のコマンドでもいいかも

$ sudo systemctl enable pleroma
$ sudo systemctl start pleroma

 最終作業

外部ブラウザでアクセス

設置作業は以上で終わりなので、スマホ等でサイトへアクセスする。(PCからならテザリングか外部のVPN経由で)

問題なければ、ちゃんと表示されるのでアカウントを作成する。

アカウント追加を停止する

アカウントができたら、これ以上のアカウント追加をできないよう/home/pleroma/pleroma/config/prod.secret.exsnanoで開く。

$ sudo nano /home/pleroma/pleroma/config/prod.secret.exs

registrations_openを下記のように編集する

  registrations_open: false

編集終了後、pleromaサービスを再起動して置く

$ sudo systemctl reload pleroma

Let’s Encryptの自動更新を有効にする

30日を超えて証明書の更新がないと無効になるようなので、定期的に自動更新をするように設定する必要がある。

まずは、ちゃんと更新ができるか確認。

$ sudo certbot renew

以下のようなメッセージが出ているならOK。

Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/[ドメイン名].conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/[ドメイン名]/fullchain.pem (skipped)
No renewals were attempted.

要するに、取得したばかりで更新の必要がないと言ってるだけで、更新手続きそのものは正常にできてる。

今度は、crontabファイルに定期実行するよう追記する。

0  1    1,15 * *        root    /usr/bin/cerbot renew --quiet

毎月1日15日AM1:00に更新を実行するようにしています。

参考にしたサイト

The magical world of Pleroma, setting up your instance.
This little blog post will guide a user through installing pleroma on a " instance" as suggested by lain. First, what is pleroma? Pleroma is an OStatus and Ac...
Pleromaの入れ方 · Wiki · Pleroma / pleroma
GitLab Community Edition

コメント

タイトルとURLをコピーしました