Pleromaを立てたさくらのVPSでSiteGuardを利用する方法

2021/12/31

はじめに

Pleromaの構築は公式の手順に従えば難しいところはないのだが、さくらのVPSにホストし、かつWAFとしてSiteGuardを利用する場合はガイドから外れることになる。 今後さくらのVPSでPleromaインスタンを立てようとする人のために構築手順を残しておく。

ただし、SiteGuardのインストール手順を読めるのはさくらのVPSを契約後であり、マニュアルにはパスワードがかかっているため、そのまま引用するのはよろしくないと考えられる。 そのため、PleromaとSiteGuardそれぞれの公式インストール手順から外れた部分だけを記述するので適宜補完されたい。 また、さくらのVPSがいつまでSiteGuardを無料で提供してくれるのかも不明であることに注意してほしい。(もっとも、そのときは私も困るのであるが……)

nginxのダウンロード

Pleromeの公式ガイドではnginxはapkやaptでインストールする想定になっているが、SiteGuardはnginxのモジュールとして動作するため、コンパイルしてインストールしなければならない。

nginxのダウンロードページから利用予定のSiteGuardのバージョンに合わせてダウンロードする。大抵の場合は最新の安定版で問題ないはずである。

nginxのビルド

先にSiteGuardのインストールガイドに従って、SiteGuardのインストールを済ませておく。 するとSiteGuardのnginx向けモジュールのパスが分かるので、それを指定した上でnginxをコンパイルすることになる。 ただし、SiteGuardのマニュアルに指定されたオプションだけを指定すると次のPleromaのインストールに失敗するので、Pleromaに必要なオプションも追加しておく。

具体的には以下のようなコマンドになる。ここで示しているのは必要最低限のオプションなので、他のオプションについても必要な場合は有効にする。

./configure --add-module=SiteGuardのモジュールへのパス --with-http_ssl_module --with-http_v2_module --with-http_slice_module
make
make install

素のUbuntu 20.04の場合上のコマンドを実行するには必要なライブラリが足りないので、例えば以下のようにしてインストールしておく。なお、ここではnginxのコンパイルに必要なもの以外もまとめてインストールしているので、適宜取捨選択するのが望ましい。というか、実際は./configureを実行して足りないと言われたものを順番に追加しけばよい。

apt install build-essential unzip openssl file libapr1 libapr1-dev libaprutil1 libaprutil1-dev default-jre default-jdk fontconfig  libpcre3-dev libssl-dev  zlib1g-dev

続いてSiteGuardのマニュアルによると、SiteGuardのセットアップを行うことになる。その中でsystemdにnginxが登録されているかによって分岐が生じるが、Pleromaでもnginxを利用しインスタンス再起動時に面倒がないようにしたい要件を考慮すると、先にsystemdに登録しておくべきである。 nginxのガイドに従って/lib/systemd/system/nginx.serviceを作成する。 インストール先を特別指定せずにコンパイル、インストールを行った場合は以下のようなファイルになると想定できる。

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

こうしてnginxをsystemdに登録した上でSiteGuardのセットアップを終える。

Pleromaのセットアップ

この時点でnginxの設定ファイル(上の例に合わせるなら/usr/local/nginx/conf/nginx.conf)内でSiteGuardのnginx用設定をincludeしているはずである。この設定ファイルにPleroma用の設定を加える形で、Pleromaのガイドを参考に

cp /opt/pleroma/installation/pleroma.nginx /usr/local/nginx/conf/pleroma.conf

とした上で/usr/local/nginx/conf/nginx.confのhttpセクションの最後に include /usr/local/nginx/conf/pleroma.conf;を付け加えればよい。

これでSiteGuardとPleroma両方のインストールに対応する形でnginxをセットアップすることができた。

おわりに

nginxとNginxとNGINXどれが正しい表記なのか調べてもよく分からないので誰か教えてください。