使用 Docker 生成 Let’s Encrypt 证书

概念 什么是 Container ? https://www.docker.com/resources/what-container https://www.docker.com/why-docker 什么是 Let’s Encrypt ? Let’s Encrypt is a free, automated, and open Certificate Authority. 安装 安装Docker https://docs.docker.com/install/linux/docker-ce/ubuntu/ 获取 images docker pull linuxserver/letsencrypt 主角 详细介绍及使用方法: hub.docker.com/r/linuxserver/letsencrypt github.com/linuxserver/docker-letsencrypt 简要中文阐述 此镜像包含了Nginx服务器、反向代理、PHP和用于生成或续签证书的letsencrypt client,也包含了用于防御入侵的fail2ban。 本文使用的是http的方式请求的证书,故使用tls-sni 或 dns方式的读者,请参考【详细介绍及使用方法】链接里的原文 使用方法 在<>中加入合适的值即可。 docker run \ --cap-add=NET_ADMIN \ --name=letsencrypt \ -v :/config \ -e PGID= -e PUID= \ -e EMAIL= \ -e URL= \ -e SUBDOMAINS= \ -e VALIDATION=http \ -p 80:80 -p 443:443 \ -e TZ=Asia/Shanghai \ linuxserver/letsencrypt 参数介绍 参考来自github.com,有修改。 -p 80 -p 443 - 端口号 -v /config - 所有的配置文件及网站根目录路径(笔者:只需指定可读写路径即可,容器生成时会在此路径生成一堆文件),下文指的就是这个。 -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 运行 敲入上面的命令(docker run ....)后,首次使用需要生成DH参数,需要耐心等待啦。 查看状态 docker logs -f letsencrypt 如果看到如下所示就大功告成啦。 ...... ...... ...... Server ready 那么,申请的证书在哪? 在输出的状态中可知:证书存在于/config/etc/letsencrypt/live/ 中,至于里面的证书都是用来干嘛的,请参考该目录下的README。本文不做描述 反向代理 该镜像默认的设置已经对反向代理做了优化(感谢大佬),最简单的方式就是找到/config/nginx/proxy-confs下适合自己的配置文件,去掉.sample即可。但是笔者发现,好像这里面的配置不适合所有情况,故还要自己写配置文件....... 注意:反向代理分为两种方式,第一种是通过同一域名不同路径作为反向代理,第二种是不同域名指向不同虚拟主机作为反向代理。本文使用的第二种,详情可以看/config/nginx/proxy-confs/_readme 切换路径 cd /config/nginx/site-confs 不要理会 default , 当然,直接修改里面的文件也行,笔者为了简洁,直接新建文件 创建文件 比如 touch test.com 修改文件 vi test.com 文件内容如下 server { listen 443 ssl; server_name ; charset utf-8; include /config/nginx/ssl.conf; client_max_body_size 0; location / { include /config/nginx/proxy.conf; proxy_pass ; } } 注意中填写域名,中要填写反向代理的网址或者是容器名称,比如说proxy_pass http://gogsWeb:3000/;,至于容器之间如何互联,请看下节。如果需要创建多个反向代理,就如法炮制,再创建文件,再新建个虚拟主机,以server_name区分即可。 容器互联 参考docs.docker.com docker network create cert_network docker network connect cert_network 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和博客园,欢迎读者转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接!请读者/爬虫们尊重版权https://www.cnblogs.com/chasingdreams2017/p/9534469.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信