torutkのブログ

ソフトウェア・エンジニアのブログ

さくらVPSのOSをCentOS 8に更新、さらにRedmineを4.1に更新(続々)

さくらVPSのOSをCentOS 8に、Redmineを4.1に更新、の続きの続き

昨日の作業の続きです。 torutk.hatenablog.jp

Let's Encrypt の証明書更新

証明書更新の処理確認(エラー対処)

証明書を更新するスクリプトの実行確認(dry-run)をします。

# certbot-auto renew --dry-run
  :
Challenge failed for domain www.torutk.com
http-01 challenge for www.torutk.com
Cleaning up challenges
Attempting to renew cert (www.torutk.com) from /etc/letsencrypt/renewal/www.torutk.com.conf produced an unexpected error: Some challenges have failed.. Skipping.
All renewal attempts failed. The following certs could not be renewed:
  /etc/letsencrypt/live/www.torutk.com/fullchain.pem (failure)
  :
IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: www.torutk.com
   Type:   unauthorized
   Detail: Invalid response from
   https://www.torutk.com/.well-known/acme-challenge/***************************************
"<!DOCTYPE
   html>\n<html>\n<head>\n  <meta charset=\"utf-8\" />\n
   <title>Redmine 404 error</title>\n  <style>\n    body {font-family:
   \"Tr"

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address.

Redmine環境からの移行にあたり、Redmineへのアクセスを完全https対応とし、httpでのリクエストはhttpsへリダイレクトするように設定しました。 このため、Let's Encryptの証明書更新時にドメイン確認のため http でのアクセスがredmineに転送されてしまい、上述のように404エラーとなっています。

対策は、Let's EncryptからのアクセスをRedmineへ転送せず、nginxのデフォルトのdoc rootにアクセスさせるようNginxに設定を追加します。

/etc/nginx/conf.d/redmine.conf

server {
  listen 443 ...
    :
    client_max_body_size 1G;

+    location ^~ /.well-known/acme-challenge/ {
+       root /usr/share/nginx/html;
+    }

    location / {
        try_files /maintenance.html $uri/index.html $uri.html $uri @app;
    }

最初はポート80のserver設定にlocation記述を追加しましたが、return でhttpsへリダイレクトしてしまうのは避けられず証明書更新がエラーに。そこで、ポート443のserver設定に記述することにしました。

location の記述で、^~ を追加すると、この条件に前方一致したときは後続の条件を見ずに適用するとあるので、これを指定しました。

証明書更新の定期実行(cron)

証明書更新を定期的に実行させるため、cronに登録します。

Let's Encryptの証明書の有効期限は90日で、期限30日前から次の更新を受け付けるとあるので、定期処理の間隔は最大1か月以内とします。certbot-autoは、更新対象となる期限前に実行しても証明書更新をスキップするので、毎日実行しても問題はありません。公式サイトにもcron設定の例で1日2回実行する設定が記載されています。

ただ、何か気になるので、週に1回実行することとします。

crontabに記述してもよいのですが、CentOS 8にはanacronという仕組みがあり(もっと前のバージョンからありますが)、毎時、毎日、毎週、毎月の定期処理を行うスクリプトを所定の場所に放り込んでおくとそれを実行してくれます。

今回は、毎週の処理を行う/etc/cron.weeklyディレクトリに、証明書更新のスクリプトを入れておくことにします。

/etc/cron.weekly/letsencrypt_renew.sh

#!/bin/sh
/usr/local/bin/certbot-auto renew -q
/usr/bin/systemctl reload nginx

ファイルには実行権を付けておきます。

# chmod +x /etc/cron.weekly/letsencrypt_renew.sh

テーマの設定

Redmineでは、テーマにGitmikeを使っていました。しかし、Redmine 4.1環境で sidebar_hide プラグインを使うと、サイドバーを開いたときにコンテンツ領域が本来より余分に小さくなってしまいました。(ぱっと見た目でサイドバーの幅の2倍だけ縮んで表示)

そこで、別なテーマを探してみました。

Redmine 4対応を謳っているいるテーマ
  • A1:ダウンロードにユーザー登録必要
  • OpenMind:青系、フラットでシンプル
  • PurpleMine2:紫、カラフル、サイドバーが左側かつ折り畳み可
  • RTMaterial:緑系、割とシンプル
  • MinimalFlat2:紺系、文字大き目、シンプル
  • Bleuclair:青系

Sidebar_hideプラグインとの相性をみつつ、今回はBleuclairを入れることとしました。

Bleuclairテーマ

blog.redmine.jp

Redmineのバージョン毎にブランチが用意されているので、ブランチを指定してクローンします。

~$ cd /var/lib/redmine/public/themes
themes$ git clone -b redmine4.1 https://github.com/farend/redmine_theme_farend_bleuclair.git bleuclair
  :

システム管理者でログインし、[管理] > [設定] > [表示] で、テーマ欄のドロップダウンリストから[Bleuclair]を選択します。