当前位置:   article > 正文

使用docker+nginx+certbot获取和更新免费的ssl证书_certbot docker

certbot docker

Nginx+docker+Certbot 获取和更新免费的ssl证书

certbot官网:https://certbot.eff.org/(需要魔法)
下载docker:https://www.runoob.com/docker/centos-docker-install.html

开始前准备

1、用docker下载和准备certbot

docker run -it --rm certbot/certbot --help
  • 1

2、用docker下载nginx镜像
镜像

3、购买好了域名 并且ICP备案
然后你的域名DNS打开了 比如你买的主域名的xxx.com 你的DNS打开了www.xxx.com
在这里插入图片描述

开始步骤

1、理清docker nginx和certbot文件映射关系,做好文件映射

nginx和certbot有两个文件夹要共用:证书生成文件夹和web验证文件夹

容器启动命令如下

(1)准备nginx的启动脚本
这里使用了docker run 语法挂载docker的nginx的配置文件

docker run   --rm -p 80:80 -p 443:443  --name nginx --privileged=true \
-v /nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ #挂载nginx的配置文件 我这里直接挂载配置文件出来 你们也可以挂整个文件夹 这个nginx.conf是文件 不是文件夹 所以要先在自己目录下创好 不然挂挂载会有问题
-v /nginx/html:/etc/nginx/html \#挂载nginx的静态html
-v /nginx/log:/var/log/nginx \ #挂载nginx的log
-v /nginx/docker/certbot/www:/usr/share/certbot/www \ #与certbot容器共用,http验证目录
-v /nginx/docker/certbot/ssl:/usr/share/certbot/ssl \ #与certbot容器共用,证书位置
 -d  nginx \#这个nginx是你的镜像名称
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

(2)准备certbot的启动脚本
这里使用了docker run 语法挂载docker的certbot的配置文件

 docker run -it --rm   \
 -v /nginx/docker/certbot/www:/data/letsencrypt  \ #与nginx容器共用
 -v /nginx/docker/certbot/ssl:/etc/letsencrypt  \#与nginx容器共用
 -v /nginx/docker/certbot/logs:/var/log/letsencrypt \ #挂载日志文件
 certbot/certbot certonly -n --webroot --webroot-path=/data/letsencrypt -m 你的邮箱@qq.com --agree-tos -d "你的域名"  
  • 1
  • 2
  • 3
  • 4
  • 5

2、启动nginx(上面的nginx启动脚本),修改挂载的域名配置文件/nginx/conf/nginx.conf
修改你的配置文件的80端口(默认只有80端口) ,如果你有443端口的就注释掉

    server {
    listen 80;
    listen [::]:80;

    server_name  xxx.com;#你的域名
    server_tokens off;

    #配置http验证可访问
    location ~/.well-known/acme-challenge/ {
        #此目录都是nginx容器内的目录,对应宿主机volumes中的http验证目录,而宿主机的又与certbot容器中命令--webroot-path指定目录一致,从而就整个串起来了,解决了http验证问题
        root /usr/share/certbot/www;
    }
    #http跳转到https
    location / {
        return 301 https://xxx.com$request_uri; #xxx.com换成你的域名
    }
    #配置文件汇总其它的先不要 注释掉
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

3、重启你的nginx

docker restart nginx
  • 1

4、执行certbot容器命令(在步骤1中准备好了)

如无意外会出现succee提示,证书创建成功了
5、修改conf.d中的网站配置文件,增加ssl配置

注意:这里的证书地址为nginx里的地址,不要填成宿主机地址

    server {
        listen       80;
        listen       [::]:80;
        rewrite ^(.*)$ https://$host$1 permanent; #将80端口转发到443
        }
    server { #http服务,一个server可以配置多个location
        listen    443 ssl;
        server_name www.xxx.com; #主机名、域名
        server_tokens off;
        ssl_certificate       /usr/share/certbot/ssl/live/www.wangyuhaooo.cn/fullchain.pem;      #证书里面,必须是包含两套完整的-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----
        ssl_certificate_key  /usr/share/certbot/ssl/live/www.wangyuhaooo.cn/privkey.pem;         #证书密钥文件
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;

        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
        location /{
                root  /etc/nginx/html/; #这个路径是docker的nginx里面的静态文件路径 不是本地服务器的静态文件路径
                index index.html ;
        }
   }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

6、重启nginx,查看日志,打开域名测试

docker restart nginx
docker logs -tf --tail 20 nginx
  • 1
  • 2

certbot的证书只有三个月时间 所以要写一个重启脚本
更新证书脚本如下:

renew_cert.sh

docker run -it --rm   \
    -v /nginx/docker/certbot/www:/data/letsencrypt  \     #与nginx容器共用,http验证目录
    -v /nginx/docker/certbot/ssl:/etc/letsencrypt  \     #与nginx容器共用,证书生成目录
    -v /nginx/docker/certbot/logs:/var/log/letsencrypt \  #certbot日志
certbot/certbot renew
  • 1
  • 2
  • 3
  • 4
  • 5

把 renew_cert.sh 脚本放入Linux的crontab即可,每三月执行一次就可以

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/640010
推荐阅读
相关标签
  

闽ICP备14008679号