วิธี auto renew ssl ให้ Ghost บน Digital ocean

ก่อนหน้านี้ผมได้บอกวิธีการติดตั้ง Ghost+ssl บน Digital ocean โครตง่าย!!! กันมาแล้ว ผมดันลืมไปว่ามันใช้งาน SSL ของ let's encrypt ซึ่งมันจะมีอายุแค่ 90 วันเท่านั้น เมื่อครบกำหนด SSL ของเราก็จะหมดอายุทันที และทำให้ไม่สามารถเข้าเว็บได้

เราจึงต้องทำการต่ออายุ SSL ทุก 90 วัน มีวิธีการดังนี้

ทำการ ssh เข้า server

ssh เข้า server ghost ของเราก่อน

ssh root@domain.com

อัพเดทไฟล์ acme.sh

ถ้าใครติดตั้งตามที่ผมเคยบอกไปมันคือการติดตั้งผ่าน DigitalOcean Marketplace มันจะมีปัญหาของไฟล์ acme.sh ที่ไม่ได้มีการอัพเดท เราจึงต้องอัพเดทมันก่อน

sudo su
sudo /etc/letsencrypt/acme.sh  --upgrade -b dev

หลังจากนั้นไฟล์จะถูกเก็บไว้ที่ /root/.acme.sh/acme.sh ให้ลองดูว่าต้องมีไฟล์อยู่

Renew SSL

เราจะทำการ renew ssl ด้วยคำสั่ง

/root/.acme.sh/acme.sh --force --renew --home /etc/letsencrypt --domain domain.com --webroot /var/www/ghost/system/nginx-root --reloadcmd "nginx -s reload" --accountemail domain@mail.com
  • ให้แก้คำ domain.com เป็นโดเมนของเราเอง
  • ให้แก้คำ domain@mail.com เป็นอีเมลของเราเอง

มันจะได้ข้อความประมาณนี้ออกมา

7NNiSrriomqVNYWvtgJShk5+6RKcKmZIMmx5K96miTkOyaSElGVTQAEFiJbmfWWH
3Ewr3xUKJ+coDgI9XHTSWrAaU5DIIg9OmUoF8+pfesJEZoSNKFJLWAwO5FbjC/ND
QwGNTCswNqBwJNSul1nnB3PfWDHS8R9Cv297WXCoz8prmIm0CZl0c+E4k1pkZGlg
meU9oeEQPJkXHs43FxjrN6znMxcjcZZHWWCVK9JTmj0Zgkd0LF3o1N96+C1tEqwK
PoppZ+5ek1gfaDBE9z5Ybg4nlPHR
-----END CERTIFICATE-----
[Sat Nov 30 08:43:00 UTC 2019] Your cert is in  /etc/letsencrypt/domain.com/domain.com.cer
[Sat Nov 30 08:43:00 UTC 2019] Your cert key is in  /etc/letsencrypt/domain.com/domain.com.key
[Sat Nov 30 08:43:00 UTC 2019] The intermediate CA cert is in  /etc/letsencrypt/domain.com/ca.cer
[Sat Nov 30 08:43:00 UTC 2019] And the full chain certs is there:  /etc/letsencrypt/domain.com/fullchain.cer
[Sat Nov 30 08:43:00 UTC 2019] Run reload cmd: nginx -s reload
[Sat Nov 30 08:43:00 UTC 2019] Reload success

ถือว่าสำเร็จแล้วสำหรับการ Renew SSL ของ let's encrypt

ทำ Auto Renew

เมื่อ renew ได้แล้วก็มาแก้ไข Crontab ของเดิมจาก /etc/letsencrypt/acme.sh เป็น /root/.acme.sh/acme.sh โดยใช้คำสั่ง crontab -e แล้วลอง crontab -l ดูผลลัพธ์

crontab -l
2 0 * * * /root/.acme.sh/acme.sh --cron --home "/etc/letsencrypt" > /dev/null

เพียงเท่านี้ก็ไม่ต้องมากังวลเรื่อง ssl หมดอายุแล้ว...

Thanks: https://www.digitalocean.com/community/questions/lets-encrypt-ssl-no-renewals-were-attempted?answer=56026