Proxmox(以下PVE)のLet’s Encrypt証明書自動更新

Let's Encrypt

PVEのLet’s Encrypt証明書自動更新の設定を行いました.以下の動作を行うようにしています.

  • 一日一回実行する
  • 別サーバ上に保存されている証明書および秘密鍵を所定の場所・名前で無条件にコピー
  • pveproxyの再起動

2022/1/10 このページによると,PVE自身で自動更新できるようです.ただ,PVEのACME設定でDNSを利用する方法(DNS用のPluginの設定方法)がわからなかったのでこの方法は断念しました.

自動更新の設定

Let’s Encryptの証明書は,apacheが動作しているサーバで自動取得しており,そのサーバ上のバックアップフォルダに格納するようにしています.

コピー(SCP)用スクリプト

Let’s Encrypt証明書をscpで取得するシェルスクリプトを/etc/pve/local/scp-letsencrypt.shとして作成します.このフォルダには実行権を与えることができないようなので,serviceファイルでsh コマンドで起動することにします.シェルスクリプトの内容は以下のとおりです.scpできるようにファイルのアクセス権等は適切に設定しておいてください.

#!/bin/sh

WORK_DIR=/etc/pve/local
SRV=192.0.2.1
USR=user

cd ${WORK_DIR}
\rm -rf ./pve-ssl.key ./pve-ssl.pem
scp ${USR}@${SRV}:/backup/letsencrypt/example.com/fullchain.pem ./pve-ssl.pem
scp ${USR}@${SRV}:/backup/letsencrypt/example.com/privkey.pem ./pve-ssl.key

systemctl restart pveproxy

serviceファイル

timerから起動するserviceファイルを/etc/systemd/system/scp-letsencrypt-cert.serviceというファイル名で用意します.内容は以下のとおりです.

[Unit]
Description=Let's Encrypt Cert copy job

[Service]
#User=apache
ExecStart=/bin/sh /etc/pve/local/scp-letsencrypt.sh
KillMode=process

timerファイル

timerファイルを/etc/systemd/system/scp-letsencrypt-cert.timerというファイル名で用意します.内容は以下のとおりです.

[Unit]
Description=Let's Encrypt Cert copy job every 1 days

[Timer]
OnCalendar=*-*-* 00:05:00
Unit=scp-letsencrypt-cert.service

[Install]
WantedBy=timers.target

timerの有効化

以下のコマンドを実行して,timerを有効化します.

systemctl daemon-reload
systemctl enable scp-letsencrypt-cert.timer
systemctl start scp-letsencrypt-cert.timer

確認

以下のコマンドを実行し,開始時間が表示されていれば,設定は完了です.

# systemctl list-timers
NEXT                        LEFT          LAST                        PASSED     UNIT                         ACTIVATES
(途中略)
Sun 2022-04-03 00:05:00 JST 6h left       n/a                         n/a        scp-letsencrypt-cert.timer   scp-letsencrypt-cert.service
(途中略)
9 timers listed.
Pass --all to see loaded but inactive timers, too.

最後に実際に動作したかどうかを証明書のタイムスタンプやログなどで確認してください.

# pwd
/etc/pve/local
# ls -l
total 4
-rw-r----- 1 root www-data  184 Dec 30 14:45 10-openssl.sh
-rw-r----- 1 root www-data   46 Apr  2 16:11 config
-rw-r----- 1 root www-data   83 Apr  3 13:27 lrm_status
drwxr-xr-x 2 root www-data    0 Dec  2 18:11 lxc
drwxr-xr-x 2 root www-data    0 Dec  2 18:11 openvz
drwx------ 2 root www-data    0 Dec  2 18:11 priv
-rw-r----- 1 root www-data  306 Apr  3 00:05 pve-ssl.key
-rw-r----- 1 root www-data 5359 Apr  3 00:05 pve-ssl.pem
drwxr-xr-x 2 root www-data    0 Dec  2 18:11 qemu-server
-rw-r----- 1 root www-data  299 Apr  2 16:45 scp-letsencrypt.sh
#

コメント

タイトルとURLをコピーしました