首先是启动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分执行