概念

  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博客园,欢迎读者转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接!请读者/爬虫们尊重版权

使用 Docker 生成 Let’s Encrypt 证书的更多相关文章

  1. 使用 lego生成 Let's Encrypt 证书

    1. 工具 https://github.com/xenolf/lego   2. 使用 命令生成新的 lego --email="foo@bar.com" --domains=& ...

  2. 使用Let's Encrypt 生成免费的ssl证书的详细过程

    参考连接:https://github.com/diafygi/acme-tiny 中文:https://hacpai.com/article/1487899289204 目前我了解可以生成免费证书的 ...

  3. 使用Let’s Encrypt生成免费的SSL证书

    SSL(安全套接层,Secure Sockets Layer),及其继任者 TLS (传输层安全,Transport Layer Security)是为网络通信提供安全及数据完整性的一种安全协议.TL ...

  4. Pandorabox固件路由器上申请Let's Encrypt证书,为内网里的多个web服务提供SSL支持

    对于家中宽带有公网IP的用户,有时我们需要将路由器内部网络的某些web服务通过端口转发暴露到外网(例如NAS远程访问),但HTTP是明文传输,有被监听的风险:如果在NAS上使用自签名证书,再端口转发, ...

  5. Linux下使用acme.sh申请和管理Let’s Encrypt证书

    关于Let's Encrypt 免费SSL证书 Let's Encrypt 作为一个公共且免费 SSL 的项目逐渐被广大用户传播和使用,是由 Mozilla.Cisco.Akamai.IdenTrus ...

  6. JAVA调用 keytool 生成keystore 和 cer 证书

    keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据: 密钥实体( ...

  7. 用Keytool和OpenSSL生成和签发数字证书

    一)keytool生成私钥文件(.key)和签名请求文件(.csr),openssl签发数字证书      J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密 ...

  8. 使用CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 证书和秘钥文件

    要安装kubernetes最新版集群,https://github.com/opsnull/follow-me-install-kubernetes-cluster 这个文档必须要研习一下了. 以下实 ...

  9. Linux下生成openssl自签名证书

    校验证书是否被 CA 证书签名,正确的情况: $ openssl verify -CAfile /etc/kubernetes/cert/ca.pem /etc/kubernetes/cert/kub ...

随机推荐

  1. spark 源码分析之五 -- Spark内置RPC机制剖析之一创建NettyRpcEnv

    在前面源码剖析介绍中,spark 源码分析之二 -- SparkContext 的初始化过程 中的SparkEnv和 spark 源码分析之四 -- TaskScheduler的创建和启动过程 中的C ...

  2. MySQL sys Schema 简单介绍-1

    参考文档: MySQL- 5.7 sys schema笔记 MySQL 5.7新特性:SYS库详解 MySQL Performance Schema&sys Schema介绍 内存分配统计视图 ...

  3. 2019 Java 全栈工程师进阶路线图,一定要收藏

    技术更新日新月异,对于初入职场的同学来说,经常会困惑该往那个方向发展,这一点松哥是深有体会的. 我刚开始学习 Java 那会,最大的问题就是不知道该学什么,以及学习的顺序,我相信这也是很多初学者经常面 ...

  4. .NetCore应用多个target framework

    <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFrameworks> ...

  5. Spring Boot微服务电商项目开发实战 --- 多环境部署配置、端口号统一配置及Dubbo提供者消费者实现

    昨天已经搭建好了SpringBoot基于Maven的基础父子级项目,今天开始进入项目分模块及分布式实现.首先我们基于昨天的项目,在父级工程下建lyn-sys,lyn-customer,lyn-good ...

  6. VMware上安装虚拟机-教程

    xl_echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! - ...

  7. [记录]Shell并发模式批量安装saltstack的脚本

    SaltStack+Shell: salt-master的配置: #cat /etc/salt/master user: root auto_accept: True salt-minion的配置(支 ...

  8. Python入门基础(8)

    上一篇介绍了一些python中函数的基本用法,那么,现在就来谈一谈python中的一些内置函数吧 python中的内置函数 1.map()函数 map()函数接受两个参数值,一个是函数,一个是Iter ...

  9. 看MySQL的参数调优及数据库锁实践有这一篇足够了

    史上最强MySQL参数调优及数据库锁实践 1. 应用优化 1.2 减少对MySQL的访问 1.2.1 避免对数据进行重复检索 1.2.2 增加cache层 1.3 负载均衡 1.3.1 利用MySQL ...

  10. [Windows无法连接到 System Event Notification Service服务]解决方案

    我之前使用Windows的过程的有出现过以下问题,之前因为比较急就匆忙解决了没来得及把解决方法写下来. 正好今天有个朋友电脑也出现此问题过来找我寻求解决方法,便把解决方法写了下来. 电脑出现的问题,如 ...