* 之前介绍了关于获取免费证书的方式,参考链接: 点击跳转

* 这次介绍,如果通过 nginx 容器来获取免费证书,原理和之前的文章差不多,只是补充了 nginx 容器的 Dockerfile 编排,并在容器中添加了自动续期的任务脚本,但首次申请证书,还是需要手动操作,因为需要涉及到人工选择

以下示例使用 docker-compose 命令,因此需要 Dockerfile 和 docker-compose.yml 文件搭配

* 以下示例假设 Dockerfile 在 nginx 为文件名的目录下,nginx目录和 docker-compose.yml 在同一个目录下

* nginx 目录下的文件结构为:

- docker-compose.yml
- nginx
- Dockerfile
- nginx.conf
- nginx-cron.txt
- nginx-run.sh
- conf.d
- web.conf

* nginx 目录下的 Dockerfile 参考内容如下:

FROM nginx:1.17
MAINTAINER demo "[email protected]"
# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update && \
apt-get install -y --no-install-recommends \
libffi-dev python3-pip cron vim && \
pip3 install --upgrade --force pip && \
pip3 install certbot certbot-nginx

* nginx-cron.txt 文件是crontab任务,内容如下:

0 0,12 * * * /usr/local/bin/certbot renew -q --nginx-ctl /usr/sbin/nginx

* nginx-run.sh 文件内容如下:

#!/bin/bash
bash -c "service cron start && crontab nginx-cron.txt && service cron restart && nginx -g 'daemon off;'"

* docker-compose.yml 文件中,nginx 的内容段如下:

nginx-1.17:
build: ./nginx
#设置容器间的连接配置 容器服务名:在本容器中使用的别名
#反向代理的时候直接使用连接名
links:
- php-fpm-7.3:php-fpm
#文件映射
volumes:
- ../www:/data/www:rw
- ./nginx/conf.d:/etc/nginx/conf.d:rw
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:rw
- ../logs/nginx:/var/log/nginx:rw
- ../cache/nginx:/var/cache/nginx:rw
- ../tmp/nginx:/tmp/nginx:rw
- ../tools:/apps/tools:rw
- ./nginx/nginx-cron.txt:/nginx-cron.txt:rw
- ./nginx/nginx-run.sh:/nginx-run.sh:rw
- ./nginx/letsencrypt:/etc/letsencrypt:rw
environment:
TZ: 'Asia/Shanghai'
# 设置 ulimit
ulimits:
nofile:
soft: 65536
hard: 65536
#端口映射
ports:
#app,cms用
- "80:80"
- "443:443"
- "8000:8000" #api ip
- "8001:8001" #cms ip
#重启策略
restart: always
#启动命令
command: sh ./nginx-run.sh

* 容器创建好之后,需要进入到nginx容器,然后备份你的站点文件,如:conf.d/web.conf 文件,然后手动运行以下命令,首次申请证书

certbot --register-unsafely-without-email --nginx
# 根据提示输入
# 中间会提示输入证书对应的域名

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部