KUSANAGIでドキュメントルートを変更するとSSL証明書が更新できない問題


問題点

ドキュメントルートを変更したいときがある

KUSANAGIでWebサーバを立てると、デフォルトでドキュメントルートが DocumentRoot というディレクトリになります。しかし、このドキュメントルートを変更したくなる場合があります(例えば、Laravel環境構築の場合など https://qiita.com/tajima_taso/items/f139eb71423041120247 )。
ドキュメントルートの変更は簡単で、 nginx または Apache の設定ファイルを編集すればできます(詳しくは上記の記事を参照)。

しかし、ドキュメントルートを変更するとSSLの問題が

ただし、ドキュメントルートを変更してしまうと、SSLの自動更新、手動更新いずれもうまくいかなくなります。SSLの証明書の期限が過ぎて気付く場合が多いと思います。

↓SSL証明書が切れると、こんな感じで保護されていない通信って表示されます

私もまんまと引っかかりました \(^o^)/

そこで、どうすればSSL証明書の更新で不具合を出さずにドキュメントルートを変更できるのか、その方法を解説します!

どうすればSSL証明書の更新で不具合を出さずにドキュメントルートを変更できるのか

1. まずは普通にプロファイルを作成する

KUSANAGI公式サイトの手順に従い、プロファイルを作成しましょう。
このとき、SSLの設定も忘れずにやりましょう。
(下記参照サイトの 4. Let’s Encryptの設定 をスキップせずに入力しましょうということです)
https://kusanagi.tokyo/document/kusanagi-provision/

2. ドキュメントルートを変更する

nginx または Apache の設定ファイルを編集してドキュメントルートを変更します。
Laravelの場合は下記参照
https://qiita.com/tajima_taso/items/f139eb71423041120247

3. Let's Encrypt の設定ファイルを編集する

まず /etc/letsencrypt/renewal ディレクトリに移動します。
cd /etc/letsencrypt/renewal

そして、ファイル一覧を取得します
ls -l または ll

すると、自分の設定したドメイン名が含まれるファイルがあると思います。そのファイルを編集します。
expample.com というドメインで example という名前のプロファイルを作成したと仮定して話を進めます(適宜ご自分のドメイン・プロファイル名に読み替えてください)。
その場合、 example.com.conf というファイルを編集することになります。

そのファイルの最後の方に、下記のような記述があると思います。

example.com.conf
[[webroot_map]] 
example.com = /home/kusanagi/expample/DocumentRoot
www.example.com = /home/kusanagi/example/DocumentRoot

この最後の2行を独自に設定したドキュメントルートに変更する必要があります。
例えばLaravelのディレクトリ構成であれば、下記の通り変更します。

example.com.conf
[[webroot_map]] 
example.com = /home/kusanagi/example/DocumentRoot/public
www.example.com = /home/kusanagi/example/DocumentRoot/public

ファイルを保存した後、SSL証明書更新のコマンドをたたいてみましょう。
kusanagi update cert

これでエラーが出なければ、正常に設定できています!
お疲れ様でした!