美文网首页网站
基于Certbot为Nginx的Docker镜像添加HTTPS

基于Certbot为Nginx的Docker镜像添加HTTPS

作者: 昊长大人 | 来源:发表于2019-08-27 19:09 被阅读0次

    Nginx是一个高性能的HTTP和反向代理web服务器,也是我本人在部署前后端项目时最常用的web服务器,无论是部署前端静态网站还是反向代理后端服务器,nginx都表现出无与伦比的便捷与高效。随着容器技术的普及,越来越多的应用开发者推出了官方Docker镜像,Nginx也不例外。本文教大家在Nginx官方镜像的基础上安装Certbot,让你的web应用随时随地插上https的翅膀。

    Nginx官方Docker镜像简介

    先上网站:
    https://hub.docker.com/_/nginx

    image.png
    官网介绍了Nginx镜像的常用方法,有Docker基础的小伙伴使用起来很简单。构建好的镜像基本用法与官方镜像完全相同,具体的使用方法可以参考官网。

    Certbot简介

    先上网站:
    https://certbot.eff.org/

    image.png
    Certbot可以为服务器免费申请及自动部署Let's Encrypt证书,支持大多数Linux发行版和web服务器(我记得另一个工具支持IIS,回头找找),在官网选择服务器软件及操作系统后,会出现使用教程,还是很贴心的。需要注意的是,Let's Encrypt证书有效期只有三个月,过期后访问网站会提示证书无效,所以需要定期更新或者配置自动更新,自动更新的方法在官网有教程。

    在Nginx官方Docker镜像中安装Certbot

    Certbot在生成证书时,会扫描/etc/nginx/conf.d/文件夹下的conf配置文件,将配置文件中的域名生成SSL证书并修改配置文件,所以如果应用部署在Nginx的Docker镜像中,则需要在镜像中安装Certbot。

    当然可以选择每次部署应用时都安装一遍Certbot,但这违背了Docker的初衷。Docker的就是为了一次打包,随时使用,所以我们应该在Nginx镜像的基础上安装Certbot,并生成新的镜像上传至DockerHub。

    先上Dockerfile

    FROM nginx:latest
    
    ADD https://dl.eff.org/certbot-auto /usr/local/bin/certbot-auto
    RUN chown root /usr/local/bin/certbot-auto && \
        chmod 0755 /usr/local/bin/certbot-auto && \
        certbot-auto -n --install-only
    

    这里用的是Debian8的安装方法(后来才知道Nginx镜像中的Linux版本是Debian9,不过没什么影响),而且走了很多弯路。一开始并不知道 --install-only这个参数,手动改了certbot-auto文件好久,就是为了只安装而不执行操作(官网教程并没有告诉我......)。certbot-auto是一个sh脚本,在certbot-auto文件里发现了--install-only这个参数,加上之后就可以只安装而不执行了。直到后来脑子突然反应过来,我TM应该先--help一下。不过这也不是一件坏事,读sh脚本可以学到很多东西,就当是交学费了。

    由于国内你懂得的网速,镜像的构建需要相当长的时间,所以我把构建放在了DockerHub上,这是镜像地址:
    https://hub.docker.com/r/yuhaow/nginx

    使用方法

    下载镜像
    $ docker pull yuhaow/nginx
    
    启动镜像
    $ docker run -d -v /docker/nginx/conf.d:/etc/nginx/conf.d -v /docker/nginx/logs:/var/log/nginx -v /docker/nginx/letsencrypt:/etc/letsencrypt -v /etc/localtime:/etc/localtime:ro -p 80:80 -p 443:443 --restart=always --name nginx yuhaow/nginx
    

    介绍一下这几个参数:

    1. -v /docker/nginx/conf.d:/etc/nginx/conf.d 挂载配置文件夹,方便添加及修改配置
    2. -v /docker/nginx/logs:/var/log/nginx 挂载日志文件夹
    3. -v /docker/nginx/letsencrypt:/etc/letsencrypt 挂载证书文件夹
    4. -v /etc/localtime:/etc/localtime:ro 修改镜像时区与服务器同步
    5. -p 80:80 -p 443:443 端口映射
    生成证书
    $ docker exec -it nginx certbot-auto --nginx
    

    更新证书

    $ docker exec -it nginx certbot-auto renew
    

    至于自动更新,参考官网的crontab方案吧

    想动手的小伙伴可以自己构建一下镜像,不想动手的话可以使用我构建成功的镜像,我会不定期nginx版本。

    相关文章

      网友评论

        本文标题:基于Certbot为Nginx的Docker镜像添加HTTPS

        本文链接:https://www.haomeiwen.com/subject/vbcyectx.html