WEBサーバーはapacheを使い、複数のWEBを運用している。そして先日DRBDを導入し、運用している。ここで問題、apacheはDRBDから起動しているので、systemctl status httpd ではFailed になる(当たり前)なのでletsencrypt のstandalone モードでは不可能だ(Error while running apachectl graceful.になる。当たり前、systemctl から起動はしていないので)尚かつ万が一apache をストップしても、DRBDがセカンダリーをプライマリーにして、サーバーは落ちない。
なので、standalone では無くwebroot でやるしかないが、私は standalone で作成したので webroot に変更する方法を探したら、https://blog.apitore.com/2016/08/06/lets-encrypt-standalone-webroot/ にヒントが在った。
でもこれはWEBが一つの場合で複数の場合では無い。因みに一つだけで設定をすると
Failed to renew certificate aarah.info-0001 with error: Missing command line flag or config entry for this setting:
Input the webroot for aarah.info:
というエラーが出た。複数のWEBはどうするのか、再度調べる。
https://community.letsencrypt.org/t/lets-encrypt-renewal-simulation-problem/43784/4 にその答えが在った。つまり複数のWEBの場所を [[webroot_map]] に記入すればよい。webroot-path は代表の一つでいいみたい。最終的に私の /etc/letsencrypt/renewal/aarah.info.conf は
# renew_before_expiry = 30 days
version = 1.11.0
archive_dir = /etc/letsencrypt/archive/aarah.info
cert = /etc/letsencrypt/live/aarah.info/cert.pem
privkey = /etc/letsencrypt/live/aarah.info/privkey.pem
chain = /etc/letsencrypt/live/aarah.info/chain.pem
fullchain = /etc/letsencrypt/live/aarah.info/fullchain.pem
# Options used in the renewal process
[renewalparams]
# authenticator = apache
#installer = apache
account = b9af5964365d5f0641d47c2fb75dbbb3
manual_public_ip_logging_ok = None
server = https://acme-v02.api.letsencrypt.org/directory
authenticator = webroot
webroot-path = /XXX/public/aarah,
[[webroot_map]]
aarah.info = /XXX/public/aarah
inpac.jp = /XXX/public/inpac
inpactours.jp = /XXX/public/inpactours
kinryo.net = /XXX/public/kinryo
opengarden.info = /XXX/public/opengarden
www.aarah.info = /XXX/public/aarah
www.inpac.jp = /XXX/public/inpac
www.inpactours.jp = /XXX/public/inpactours
www.kinryo.net = /XXX/public/kinryo
www.opengarden.info = /XXX/public/opengarden
一部伏せ字
その後
# certbot renew –dry-run
ドライランを付けテスト。この時どういう分けかkinryo.netでエラーがでる
Failed to renew certificate kinryo.net with error: Missing command line flag or config entry for this setting:
Input the webroot for kinryo.net:
だが、ドライランを付けずに
# certbot renew
で本ちゃんでやるとエラーは出ずに
Congratulations, all renewals succeeded:
/etc/letsencrypt/live/aarah.info-0001/fullchain.pem (success)
/etc/letsencrypt/live/kinryo.net/fullchain.pem (success)
/etc/letsencrypt/live/kinryokai.net-0001/fullchain.pem (success)
/etc/letsencrypt/live/kinryokai.net/fullchain.pem (success)
とエラーなく終了した。この原因は不明
だがこれではDRBDでプライマリーとセカンダリーが入れ替わた時、現在のletsencrypt の設定が入っていないのでエラーになる。なのでrsync で同期をして置く。
コピー先の/etc/rsyncd.conf に
[letsencrypt]
path = /etc/letsencrypt
authusers = root
secrets file = /etc/rsyncd.secrets
read only =no
を追記し、rsyncdをリスタートしておく。
そして、コピー元でドライランをする(nがドライラン)
# rsync -avn /etc/letsencrypt/ rsync://root@192.168.xx.xx/letsencrypt
パスワードを聞かれるが、これはコピー先の/etc/rsyncd.secrets に設定してあるrootのパスワードを入力の事、のログインパスワードでは無い
エラーが無いことを確かめて、本ちゃんの同期
# rsync -av /etc/letsencrypt/ rsync://root@192.168.xx.xx/letsencrypt
これで同期が出来る。
自分への覚書
* certbotの証明書の表示
# certbot certificates
* certbotでメールサーバーの証明書の更新
# certbot certonly –dry-run -d mail.kinryo.net →ドライランでテスト
その後下記のように聞かれるので
1: Apache Web Server plugin (apache)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
Select the appropriate number [1-3] then [enter] (press ‘c’ to cancel): 3 と入力
場所を聞かれるので、kinryo.netのWEBの場所を入力(メールを保存している場所では無い)
Input the webroot for mail.kinryo.net: (Enter ‘c’ to cancel): /XXXXX/public/kinryo
これで成功するので、ドライランを外して、本ちゃんの更新をする。
その後、secondary側の/etc/rsyncd.conf も同じ様に変更して置くこと。