軽量な分散SNS実装として知られるPleromaをセットアップしたので、その際のメモ。
インストールしたPleromaのバージョンは以下の通り。
バックエンドのバージョン | 1.1.8 |
フロントエンドのバージョン | 36910935 |
参考にした手順は以下のページだが、どの手順を見てもスッと入るようになってない。なので忘れないようにこのメモを書き残しておく次第。
Pleromaインストールバトル ~GCP無料枠編~
Pleromaの入れ方(md)
Pleromaの入れ方(html)
こちらのページはそんなトラブルシューティングのさなかに参考として読んだ。気づきが多くあった。
ubuntuにpleromaを入れてなんとなく動かす
最初は概ねPleromaの入れ方(md)の通りにやっていけばいい。「コンフィギュレーションを生成します。」のところまではこれの記載の通りで大丈夫。
sudo vi /opt/pleroma/config/generated_config.exs
して、コンフィグを編集する。編集箇所は
registrations_open: true
を
registrations_open: false
とする。こうすることでWebからの新規登録ができなくなる。これはPleromaインストールバトル ~GCP無料枠編~に記載がある。ちなみにGCP無料枠でたてられるf1-microというインスタンスではメモリ不足でPleromaのコンパイルができないそうだが、今回使ったさくらのVPS(512MB/石狩)ではコンパイルも普通にできた。
次にコンフィグファイルをリネームする。相対パスなのでカレントディレクトリに注意。(/opt/pleromaにいること)
sudo mv config/{generated_config.exs,prod.secret.exs}
setup_db.psqlというファイルが作成されているので、これを使ってDBをセットアップする。
sudo su postgres -c 'psql -f config/setup_db.psql'
セットアップしたら、DBのマイグレーションをする。
sudo -Hu pleroma MIX_ENV=prod mix ecto.migrate
このコマンドは実行する必要がない。
sudo -Hu pleroma MIX_ENV=prod mix phx.server
フォアグラウンドでPleromaを実行しているだけなので、動作確認用。このコマンドを実行して、telnet localhost 4000と叩いて反応が返ってくればOK。Ctrl+cでAbortを選択して止める。
昔のPleromaはリバースプロキシをかまさなくてもブラウザからでも4000を指定すれば見れたんだが、このとき入れたバージョンだと、リモートからだとtelnetにも反応しない。パケットフィルタを無効にしたり、ufwも落としてみたりしたが、それでもダメなので、リモートから直接4000を叩けないよう仕様になっているのではなかろうか。
sudo apt install certbot sudo mkdir -p /var/lib/letsencrypt/ # このディレクトリはあとでwebrootメソッド使用時にに使う sudo certbot certonly --email [mailaddress] -d [FQDN] --standalone sudo apt install nginx sudo cp /opt/pleroma/installation/pleroma.nginx /etc/nginx/sites-available/pleroma.nginx sudo vi /etc/nginx/sites-available/pleroma.nginx
certbotがHTTP-01メソッドで認証を受けられるように /etc/nginx/sites-available/pleroma.nginx の location ~ /\.well-known/acme-challenge 以下をアンコメントするとともに、SSL証明書のパスを書いた行をコメントにする。証明書ファイルがないのでnginxのリスタートに失敗してしまい、certbotのHTTP-01認証でこけてた。このことがどこにも書かれていないので一番詰まった点。理屈がわかってしまえばどうということはないが、わからないでやっているとドツボにはまる。
server { server_name pleroma.ryusei.dev; listen 80; listen [::]:80; # Uncomment this if you need to use the 'webroot' method with certbot. Make sure # that the directory exists and that it is accessible by the webserver. If you followed # the guide, you already ran 'mkdir -p /var/lib/letsencrypt' to create the folder. # You may need to load this file with the ssl server block commented out, run certbot # to get the certificate, and then uncomment it. # location ~ /\.well-known/acme-challenge { root /var/lib/letsencrypt/; } location / { return 301 https://$server_name$request_uri; } } # ssl_trusted_certificate /etc/letsencrypt/live/[FQDN]/chain.pem; # ssl_certificate /etc/letsencrypt/live/[FQDN]/fullchain.pem; # ssl_certificate_key /etc/letsencrypt/live/[FQDN]/privkey.pem;
これでnginxをリスタートして設定が反映されることで、certbotで証明書の取得ができる。
sudo ln -s /etc/nginx/sites-available/pleroma.nginx /etc/nginx/sites-enabled/pleroma.nginx sudo systemctl reload nginx sudo certbot certonly --email [mailaddress] -d [FQDN] --webroot -w /var/lib/letsencrypt/
証明書が取得できたらnginxのコンフィグを開いて、コメントにしていた証明書の3行をアンコメントする。
sudo vi /etc/nginx/sites-available/pleroma.nginx
ssl_trusted_certificate /etc/letsencrypt/live/[FQDN]/chain.pem; ssl_certificate /etc/letsencrypt/live/[FQDN]/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/[FQDN]/privkey.pem;
nginxをリスタートさせて設定を反映させる。
sudo systemctl reload nginx
サービスファイルのサンプルをコピーして、Pleromaをサービスとして起動します。
sudo cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service sudo systemctl enable --now pleroma.service
Pleromaのユーザーを作成します。作成するとURLが表示されるので、そこでパスワードを設定します。
sudo -Hu pleroma MIX_ENV=prod mix pleroma.user new [username] [mailaddress] --admin
enjoy.