首先是啟動daemon的命令
docker run --rm -itd \ -v "$(pwd)/out":/acme.sh \ --net=host \ --name=acme.sh \ neilpang/acme.sh daemon
這樣就會后台掛一個包含acme.sh的容器,並且這個容器會自動走定時任務以便自動續簽證書。這里注意如果你使用了dnsapi(比如說簽wildcard之類的場景),別忘了在這里使用-e
參數去配置你的環境變量,像這樣:
docker run --rm -itd \ -v "$(pwd)/out":/acme.sh \ -e CF_Email="example@example.com" \ -e CF_Key="asasasasasadasasas" \ --net=host \ --name=acme.sh \ neilpang/acme.sh daemon
實際上安裝好docker后執行以下3步即可
1)博主使用騰訊雲域名如下(-v,DP_Key,DP_Id配置自行修改):
docker run -itd \ -v "/dnmp/services/nginx/ssl/acme":/acme.sh \ -e DP_Key="xxxxxxxxxxxxxxxx" \ -e DP_Id="1111" \ --net=host \ --name=acme.sh \ neilpang/acme.sh daemon
然后一切沒問題返回出來Container ID之后別忘了docker ps
看一下容器是否在正常跑。
容器准備好了就可以用docker exec
跑各種acme.sh的命令了。
docker exec acme.sh --help
2)簽發泛域名證書
docker exec acme.sh --issue --dns dns_dp -d aa.com -d *.aa.com
所生成的證書文件會自動保存到docker run
時創建的數據卷中。(比如這里是$(pwd)/out
,run
命令執行時的根目錄中的out文件夾)
3)Nginx 配置Http和Https共存
listen 80; #如果硬性要求全部走https協議,這一行去除 listen 443 ssl http2; #如果硬性要求全部走https協議,這里去除ssl server_name chandao.test.cn; #ssl on; #如果硬性要求全部走https協議,這里開啟ssl on ssl_certificate /dnmp/services/nginx/ssl/acme/aa.com/aa.com.cer; ssl_certificate_key /dnmp/services/nginx/ssl/acme/aa.com/aa.com.key; #ssl性能調優 #nginx 1.13.0支持了TLSv1.3,TLSv1.3相比之前的TLSv1.2、TLSv1.1等性能大幅提升 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_timeout 10m; #使用ssl_session_cache優化https下Nginx的性能 ssl_session_cache builtin:1000 shared:SSL:10m; #OCSP Stapling 開啟。OCSP是用於在線查詢證書吊銷情況的服務,使用OCSP Stapling能將證書有效狀態的信息緩存到服務器,提高 TLS 握手速度 #ssl_stapling on; #OCSP Stapling 驗證開啟 #ssl_stapling_verify on;
設置 crontab 任務自動續簽(可不設置)
運行 crontab -e
來編輯 crontab 文件,添加如下內容,保存即可。
10 0 * * * docker exec acme.sh --cron # acme.sh為容器名,每天0點10分執行