letsencryptの証明書を自動更新させるのを長らく忘れていたのでshellとcronで設定します。
shellをかきます。
shellの保存場所は適宜設けてください。
#!/bin/sh
service nginx stop
/root/letsencrypt/letsencrypt-auto certonly --standalone --renew-by-default -d DOMAIN_NAME
service nginx start
/letencrypt-autoまでのパスは適宜指定。
オプションについて同様です。(これが結構面倒な気がします。。。)
crontab -e
でcron登録します。
cronの実行確認のテストで証明書更新しまくっていたら、「更新リクエスト多すぎやめちくり〜」というエラーがでました。
「制限に引っかかったら月曜日まで待たないといけないようです。
週に20個の証明書までOKだそうなので、それを超えないようにテストしましょう。
更新には時間がかからないようですが、nginxを一度停止する必要があるのでサービス環境によってその辺り考慮する必要はある気がします。
作成したshellにSlack APIたたいて更新通知投げるのもいいと思いました。
ただエラーをどうやってキャッチすればいいかわからないです_| ̄|○
あった→Let's Encryptで自動更新したらSlackに通知したかった
普通にif文でかけばいいみたいです。
というわけでやっつけでshellをつくりました。
更新完了か失敗か通知を送るだけです。更新日時等の出力はしません。
letsencrypt.sh
#!/bin/sh
# Stop Nginx
service nginx stop
# WebHookUrl
WEBHOOKURL="SLACK_WEBHOOK_URL"
# Slack Channel
CHANNEL=${CHANNEL:-"#letsencrypt"}
# Slack Bot Name
BOTNAME=${BOTNAME:-"ssl-bot"}
if ! /root/letsencrypt/letsencrypt-auto certonly --standalone --renew-by-default -d DOMAIN_NAME ; then
# Slack Title
TITLE=${TITLE:-"Let's Encrypt更新エラー通知"}
# Slack Message
MESSAGE=${MESSAGE:-"証明書の更新に失敗しました。"}
#POST
curl -s -S -X POST --data-urlencode "payload={
\\"channel\\": \\"${CHANNEL}\\",
\\"username\\": \\"${BOTNAME}\\",
\\"attachments\\": [{
\\"color\\": \\"danger\\",
\\"fallback\\": \\"${TITLE}\\",
\\"title\\": \\"${TITLE}\\",
\\"text\\": \\"${MESSAGE}\\"
}]
}" ${WEBHOOKURL} >/dev/null
else
# Slack Title
TITLE=${TITLE:-"Let's Encrypt更新完了通知"}
# Slack Message
MESSAGE=${MESSAGE:-"証明書の更新が完了しました!"}
#POST
curl -s -S -X POST --data-urlencode "payload={
\\"channel\\": \\"${CHANNEL}\\",
\\"username\\": \\"${BOTNAME}\\",
\\"attachments\\": [{
\\"color\\": \\"danger\\",
\\"fallback\\": \\"${TITLE}\\",
\\"title\\": \\"${TITLE}\\",
\\"text\\": \\"${MESSAGE}\\"
}]
}" ${WEBHOOKURL} >/dev/null
fi
# Restart Nginx
service nginx start
letsencryptありがたや