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

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

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是你的镜像名称

(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 "你的域名"  

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换成你的域名
    }
    #配置文件汇总其它的先不要 注释掉
}

3、重启你的nginx

docker restart nginx

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 ;
        }
   }

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

docker restart nginx
docker logs -tf --tail 20 nginx

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker+Consul+Nginx+keepalived是一种常用的云原生架构方案,它结合了容器化、服务发现、负载均衡和高可用等多种技术手段,可用于构建高可用、弹性、可扩展的应用系统。 该方案的主要组件包括: 1. Docker:用于容器化应用程序和服务,提供了高效、轻量、可移植的应用打包和部署方式。 2. Consul:用于服务发现和配置管理,支持多数据中心、跨平台、高度可扩展的分布式系统。 3. Nginx:用于负载均衡和反向代理,支持高并发、高可用的流量分发。 4. keepalived:用于实现高可用的服务和节点,提供了基于 VRRP 协议的故障转移和自动切换功能。 在该方案中,Docker 容器作为应用程序和服务的运行环境,使用 Consul 进行服务注册和发现,并通过 Nginx 进行流量分发和负载均衡。同时,使用 keepalived 实现高可用的服务和节点,确保系统的稳定性和可用性。 项目描述可以按照以下步骤进行撰写: 1. 项目背景和目的:简要介绍本项目的背景和目的,说明为什么选择 Docker+Consul+Nginx+keepalived 方案。 2. 技术架构:详细介绍该方案的技术架构和组件,包括 Docker、Consul、Nginx 和 keepalived 的作用和使用方式。 3. 系统功能:描述系统的主要功能和特点,包括服务发现、负载均衡、高可用等方面。 4. 实现方式:介绍系统的具体实现方式和实现步骤,包括 Docker 镜像的构建、应用程序的容器化、Consul 的配置和使用Nginx 的配置和使用、keepalived 的配置和使用等。 5. 测试和验证:对系统进行测试和验证,验证系统的功能和性能是否符合预期,是否满足高可用和弹性的要求。 6. 总结和展望:对本项目进行总结和展望,分析该方案的优缺点和适用范围,展望未来的发展方向和趋势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值