docker獲取Let's Encrypt永久免費SSL證書

一 原由
官方的cerbot太煩了,不建議使用
還不如野蠻生長的acme.sh,而這裏介紹docker運行cerbot獲取Let's Encrypt永久免費SSL證書
二 選型
cerbot的證書不會自動刷新日期,可是acme.sh自帶這功能,天天凌晨0:00自動檢測過時域名而且自動續期
選擇docker運行cerbot,是爲了讓服務器裏儘可能少配置和無心義的程序,方便管理。例如Let's Encrypt須要的Python2.7,git,pip咱們都不須要裝在宿主機內,容器就本身配置好了
 
原文 https://github.com/acmesh-official/acme.sh/wiki/Run-acme.sh-in-docker
拉取鏡像
$ docker pull neilpang/acme.sh

以dns mode運行docker命令linux

$ docker run --rm  -it  \
  -v "$(pwd)/out":/acme.sh  \
  -e Ali_Key="xxxxxx" \
  -e Ali_Secret="xxxx" \
  neilpang/acme.sh  --issue --dns dns_ali -d domain.cn -d *.domain.cn

成功以後,證書會保存在out文件夾,也能夠指定路徑,修改上面第一行 "$(pwd)/out",改成你想要保存的路徑便可git

四 注意github

--dns dns_alidocker

要根據你域名的dns模式選擇,顯然這裏是阿里。因此前面的兩項配置纔是Ali_Key,Ali_Secretapi

Ali_Key,Ali_Secret 服務器

須要從阿里雲後臺獲取dom

 

不知道本身域名的dns模式能夠去這裏查找 https://github.com/acmesh-official/acme.sh/wiki/dnsapissh

如何獲取域名的dns模式及相關配置,能夠直接找你域名的客服阿里雲

 

用騰訊作例子spa

$ docker run --rm  -it  \
  -v "$(pwd)/out":/acme.sh  \
  -e DP_Id="xxxxxx" \
  -e DP_Key="xxxx" \
  neilpang/acme.sh  --issue --dns dns_dp -d domain.cn -d *.domain.cn

ps.

騰訊這坑爹收購了DNSPod,因此是dns_dp

我一開始還覺得是TX_Id,TX_Key,dns_tx之類的

找了一圈,發現本身的阿里服務器正常使用,但就是步驟沒問題

因而問公司拿到域名帳戶,問騰訊客服才知道這事

固然,這跟騰訊無關,坑爹公司的鍋更大

老子幹這個啥都沒有

五 

docker run --rm 的命令懂得都懂,運行完就退出,這樣能執行個錘子自動更新ssh證書

方法一

docker run --rm,直接docker run就行了

優勢簡單,缺點一個容器專門跑這個,太浪費資源了

 

方法二

定時任務跑docker run --rm,原文的例子就有了

#run cron job
docker run --rm  -it  \
  -v "$(pwd)/out":/acme.sh  \
  --net=host \
  neilpang/acme.sh  --cron

其實--cron是linux的crontab參數,具體用法不累贅了

喜歡用crontab的用crontab

不喜歡的看看 博文裏的二

 

方法三

把這玩意和docker守護進程綁一塊兒,畢竟守護進程必須開,不算浪費資源

這是acme.sh的推薦作法

一樣帶原文的例子

$ docker run --rm  -itd  \
  -v "$(pwd)/out":/acme.sh  \
  --net=host \
  --name=acme.sh \
  neilpang/acme.sh daemon

 

六 最終結果

$ docker run --rm  -itd  \
  -v "$(pwd)/out":/acme.sh  \
  -e DP_Id="xxxxxx" \
  -e DP_Key="xxxx" \
  neilpang/acme.sh --issue --dns dns_dp -d domain.cn -d *.domain.cn daemon