使用 Docker 生成 Let’s Encrypt 证书

当前位置:首页易利GO最新网址 >

易利GO最新网址

使用 Docker 生成 Let’s Encrypt 证书

时间:2019-06-10本站浏览次数:450

       

概念

    什么是 Container ?https://www.docker.com/resources/what-containerhttps://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/

    获取 imagesdocker 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_networkdocker network connect cert_network <other-container>docker network connect cert_network letsencrypt

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

是时候结束一切了

docker restart letsencrypt

参考

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

声明

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




公司地址:新疆维吾尔自治省乌鲁木齐市乌鲁木齐 市沙依巴克区仓房沟路51号附8号
联系人:杨伟 15125755319
任加尧 15182509019
电话:15293813100 传真:qbc6f2g@163.com
邮箱:a9qqe5@163.com

粤公网安备 44030702001579号

易利GO最新手机版@