docker运行acme.sh 安装配置泛域名证书

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

这里有有关于dnsapi模式的详细用法

然后一切没问题返回出来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)/outrun命令执行时的根目录中的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分执行
原文地址:https://www.cnblogs.com/-mrl/p/13335360.html