• 使用 Docker 生成 Let’s Encrypt 证书


    概念

    1. 什么是 Container ?
      https://www.docker.com/resources/what-container
      https://www.docker.com/why-docker
    2. 什么是 Let’s Encrypt ?
      Let’s Encrypt is a free, automated, and open Certificate Authority.

    安装

    1. 安装Docker

      https://docs.docker.com/install/linux/docker-ce/ubuntu/

    2. 获取 images

      docker pull linuxserver/letsencrypt
      

    主角

    详细介绍及使用方法:

    hub.docker.com/r/linuxserver/letsencrypt

    github.com/linuxserver/docker-letsencrypt

    简要中文阐述

    此镜像包含了Nginx服务器、反向代理、PHP和用于生成或续签证书的letsencrypt client,也包含了用于防御入侵的fail2ban。
    本文使用的是http的方式请求的证书,故使用tls-snidns方式的读者,请参考【详细介绍及使用方法】链接里的原文

    使用方法

    <>中加入合适的值即可。

    docker run 
      --cap-add=NET_ADMIN 
      --name=letsencrypt 
      -v <path to data>:/config 
      -e PGID=<gid> -e PUID=<uid>  
      -e EMAIL=<email> 
      -e URL=<url> 
      -e SUBDOMAINS=<subdomains> 
      -e VALIDATION=http 
      -p 80:80 -p 443:443 
      -e TZ=Asia/Shanghai 
      linuxserver/letsencrypt
    

    参数介绍

    参考来自github.com,有修改。

    • -p 80 -p 443 - 端口号
    • -v /config - 所有的配置文件及网站根目录路径(笔者:只需指定可读写路径即可,容器生成时会在此路径生成一堆文件),下文<your-path>指的就是这个。
    • -e URL - 顶级域名,比如 test.com
    • -e SUBDOMAINS - 二级域名 比如 www,ftp,cloud 多个二级域名用“,”隔开, http方式不支持泛域名,如想使用,请使用dns方式,本文不做介绍。
    • -e VALIDATION - letsencrypt 验证所使用的方法
    • -e PGID for GroupID - 详情见下面说明, 不可使用root的GID
    • -e PUID for UserID - 详情见下面说明, 不可使用root的UID
    • -e TZ - timezone ie. Asia/Shanghai

    User / Group 标识

    有时在使用数据卷( -v标志)时,主机操作系统和容器之间可能会出现权限问题。 我们通过允许您指定用户PUID和组PGID来避免此问题。 确保主机上的数据卷目录由您指定的同一用户拥有并且它能“正常工作”。

    在这种情况下, PUID=1001并且PGID=1001 。 要找到你的id user ,请使用id user ,如下所示:

    id <dockeruser>
    

    运行

    敲入上面的命令(docker run ....)后,首次使用需要生成DH参数,需要耐心等待啦。
    查看状态

    docker logs -f letsencrypt
    

    如果看到如下所示就大功告成啦。

    ......
    ......
    ......
    Server ready
    

    那么,申请的证书在哪?
    在输出的状态中可知:证书存在于<your-path>/config/etc/letsencrypt/live/<domain> 中,至于里面的证书都是用来干嘛的,请参考该目录下的README。本文不做描述

    反向代理

    该镜像默认的设置已经对反向代理做了优化(感谢大佬),最简单的方式就是找到<your-path>/config/nginx/proxy-confs下适合自己的配置文件,去掉.sample即可。但是笔者发现,好像这里面的配置不适合所有情况,故还要自己写配置文件.......

    注意:反向代理分为两种方式,第一种是通过同一域名不同路径作为反向代理,第二种是不同域名指向不同虚拟主机作为反向代理。本文使用的第二种,详情可以看<your-path>/config/nginx/proxy-confs/_readme

    切换路径

    cd <your-path>/config/nginx/site-confs
    

    不要理会 default , 当然,直接修改里面的文件也行,笔者为了简洁,直接新建文件

    创建文件 <your-domain> 比如

    touch test.com
    

    修改文件

    vi test.com
    

    文件内容如下

    server {
        listen 443 ssl;
    
        server_name <your-domain>;
    
        charset utf-8;
    
        include /config/nginx/ssl.conf;
    
        client_max_body_size 0;
    
        location / {
            include /config/nginx/proxy.conf;
            proxy_pass <Web-OR-ContainerName>;
        }
    }
    

    注意<your-domain>中填写域名,<Web-OR-ContainerName>中要填写反向代理的网址或者是容器名称,比如说proxy_pass http://gogsWeb:3000/;,至于容器之间如何互联,请看下节。如果需要创建多个反向代理,就如法炮制,再创建文件,再新建个虚拟主机,以server_name区分即可。

    容器互联

    参考docs.docker.com

    docker network create cert_network
    docker network connect cert_network <other-container>
    docker network connect cert_network letsencrypt
    

    注意,需要互联的容器建立时不需要指定'-P'即端口与主机端口绑定!!!只需要确保容器内端口开放即可。

    是时候结束一切了

    docker restart letsencrypt
    

    参考

    https://github.com/linuxserver/docker-letsencrypt
    https://hub.docker.com/r/linuxserver/letsencrypt/
    https://letsencrypt.org/
    https://docs.docker.com/engine/reference/commandline
    http://nginx.org/en/docs/http/configuring_https_servers.html
    https://www.zybuluo.com/phper/note/89391
    https://segmentfault.com/a/1190000009583997
    https://blog.csdn.net/gripleaf/article/details/8552324

    声明

    本文采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可,发表在CSDN博客园,欢迎读者转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接!请读者/爬虫们尊重版权

  • 相关阅读:
    java嵌套循环练习
    java菜鸡循环练习
    Kruskal重构树
    狄利克雷卷积
    莫比乌斯反演
    两道趣题
    树状数组
    多重背包
    SPFA与差分约束
    快速线性筛
  • 原文地址:https://www.cnblogs.com/chasingdreams2017/p/9534469.html
Copyright © 2020-2023  润新知