跳到主要内容

一、介绍

Docker - NGINX 类型的部署节点用于实现将OHTTPS中申请的证书自动化部署至nginx容器中。

如果官方镜像不满足需求,可以查看 [Docker 自定义] 文档,通过在构建自定义容器的Dockerfile中引入我们官方提供的push-node二进制包,实现证书的自动化部署。

二、使用方法

使用 Docker - NGINX 类型的部署节点,需要使用我们官方提供的nginx容器镜像ohttps/ohttps-nginx
该镜像是基于nginx官方稳定版镜像nginx:1.16构建,添加了证书更新服务后生成的。ohttps/ohttps-nginx镜像内的其他内容和使用方式和nginx官方镜像完全一致,请放心使用

拉取镜像命令为:

 docker pull ohttps/ohttps-nginx

使用该镜像时,需要设置以下两个环境变量:

  • PUSH_NODE_ID:即为部署节点创建完成后系统生成的部署节点的ID,部署节点的ID都是以push开头的,样例:push-53ejqm8p60gd7no9
  • PUSH_NODE_TOKEN:即为创建部署节点时,通过点击生成按钮生成的32位令牌,样例:6b2440b1e3f180a3c9453f9d7766a565

在使用该镜像的容器首次启动时,会根据配置的PUSH_NODE_ID和PUSH_NODE_TOKEN从OHTTPS服务器拉取最新版证书,如果PUSH_NODE_ID对应的部署节点被多个证书配置为部署节点,则会同时拉取多个证书,拉取到的证书文件被存放在容器内/etc/nginx/certificates文件夹下,然后按照证书ID为子文件夹进行存放(证书ID为创建证书完成后系统生成的证书的ID,证书的ID都是以cert开头的,样例:cert-2enm4pr1q09g3x5z),则证书文件的全路径为:

  • 私钥文件cert.key(PEM格式):
`/etc/nginx/certificates/${证书ID}/cert.key`
  • 证书文件fullchain.cer(PEM格式):
`/etc/nginx/certificates/${证书ID}/fullchain.cer`

把上面路径中'${证书ID}'部分换成您的证书ID即为对应文件在容器中的存放路径。注意在容器启动前,请先完成证书部署节点的配置,将证书和部署节点关联,否则会导致容器无法成功启动


三、最佳实践

这里我们会举个例子来说明具体如何使用 Docker - NGINX 类型的部署节点。例如我们创建了一个 Docker - NGINX 类型的部署节点,PUSH_NODE_ID和PUSH_NODE_TOKEN的值为:

  • PUSH_NODE_ID:push-53ejqm8p60gd7no9
  • PUSH_NODE_TOKEN:6b2440b1e3f180a3c9453f9d7766a565

我们为域名www.example.com申请了一个有单域名证书,这个证书的证书ID为cert-2enm4pr1q09g3x5z,然后我们在证书配置中将我们刚创建的节点配置为该证书的部署节点之一,那么该证书的证书文件在容器内的路径为:

  • 私钥文件cert.key(PEM格式):/etc/nginx/certificates/cert-2enm4pr1q09g3x5z/cert.key
  • 证书文件fullchain.cer(PEM格式):/etc/nginx/certificates/cert-2enm4pr1q09g3x5z/fullchain.cer

我们的nginx配置文件nginx.conf的内容为:

user  nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/certificates/cert-2enm4pr1q09g3x5z/fullchain.cer;
ssl_certificate_key /etc/nginx/certificates/cert-2enm4pr1q09g3x5z/cert.key;

include /etc/nginx/default.d/*.conf;

location / {
root /usr/share/nginx/html;
index index.html;
}
}
}

对应的Dockerfile为:

FROM ohttps/ohttps-nginx
WORKDIR /etc/nginx
COPY ./nginx.conf /etc/nginx/nginx.conf
ENV PUSH_NODE_ID='push-53ejqm8p60gd7no9'
ENV PUSH_NODE_TOKEN='6b2440b1e3f180a3c9453f9d7766a565'

根据上面的Dockerfile生成我们自己的镜像即可。