情報が古い場合や、リンクが切れている場合がありますのでご注意下さい。
前のエントリの続き。Pleromaのインストールから。
概略
このページがPleromaのインストールの手順としてはいいらしいのだけど、他のページもいくつか参考にしてある程度独自にやって見た。
必須パッケージのインストール
基本ツールパッケージのインストール
まずは、git
、nginx
、postgresql
など必要なものをインストール
$ 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手順通りにインストール準備を進める。
$ 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
これで準備ができたので、elixir
とesl-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.exs
をnano
で開く。
$ 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に更新を実行するようにしています。
コメント