防火牆設置port forwarding 將實體IP位址的80埠到運行docker跑acme的主機IP的80埠。
運行的主機不得有已經占用的80 port服務。
主機要有安裝docker是必要條件,若沒有請參照官方說明。
說明:
standalone模式,會在自動申請憑證過程,短暫的建立http服務,
來完成驗證程序,在驗證完成後馬上就可以關閉,不用擔心常開被攻擊的疑慮。
示範執行方式,最終會產生憑證,
平常可以透過排程定期檢查更新憑證,
如果到期會自動執行產生新的憑證,
至於怎麼自動化放到自己的環境,
依照自己環境做設計。
mkdir -p acme_ip/out
cd acme_ip
container把out掛載到實體目錄,方便整合、重複建立container或取用。
docker pull neilpang/acme.sh
docker run -d -v "$(pwd)/out":/acme.sh -p 80:80 --name=acme_ip neilpang/acme.sh daemon
#將服務改成 letsencrypt
docker exec -it acme_ip --set-default-ca --server letsencrypt
#版本更新
docker exec -it acme_ip --upgrade
#註冊(網域流程我有跑這部分,IP流程這我沒跑也可以)
docker exec -it acme_ip --register-account -m 你的mail address
簽完之後,其實掛上去簡單看一下效期,大約是官方新聞的160小時,
--days 5 應該是多餘的,有驗證的話再拿掉。
#執行自動產短效期憑證
docker exec -it acme_ip --issue -d 實體IP --certificate-profile shortlived --days 5 --standalone
# 假設起頭說的條件都有完成,自動簽發的過程基本上是順利的
完成之後會在out/實體IP_ecc下產生憑證檔案,
就可以拿去nginx去做測試套用在https憑證上。注意 out 目錄內容之後不要刪除。
執行更新指令的時候,如果沒到期,它什麼都不會做,只會顯示憑證尚未到期,到期日是哪天。
docker exec -it acme_ip --renew -d 實體IP --standalone
平常可以把更新憑證寫script設計流程,並作為排程定期運行,
每次執行後,可以檢查正式nginx上的憑證跟out下的有沒有一致,
如果不一致代表更新了,就更名備份舊憑證然後再把新的放上去,
然後reload或restart nginx服務。
如果沒辦法自己做到設計script就求助GPT寫script或者自己人工去換吧。
或許也可以將產生路徑跟nginx讀取憑證路徑做整合,也是可以減少額外的設計。
本篇主旨在於對系統做其他安裝,在docker container下產生憑證不將acme.sh裝在實體系統。