news 2026/7/14 20:19:13

Docker部署下,手动更新SSL证书,如何自动reload Nginx

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker部署下,手动更新SSL证书,如何自动reload Nginx

一、基本背景

如下的应用场景下(linux服务器):

1. web应用是通过Docker 容器部署;

2. web 应用通过宿主机上的(非本容器)共享Nginx服务器进行 https的web服务

即:Nginx运行在宿主机上,并在宿主机指定目录管理ssl认证文件。

3.ssl证书的续约是从CA服务商申请并下载的pem及key文件

4. ssl证书的更新是通过容器web应用界面上传更新(通过 Docker volume 挂载关联)

这样就存在一个直接的问题,更新了宿主机上的ssl证书后,Nginx必须要重新reload,新的ssl证书才能起作用,那么如何再上传更新了ssl证书后,系统自动reload,而无需单独手工reload nginx?

最佳方案:inotifywait+ systemd 服务(宿主机 Nginx 优化)

工作原理:inotifywait 是 Linux 下基于 inotify 机制的命令行工具,用于实时监听文件或目录的增删改等事件,常用于自动化响应文件变化,基本的工作原理就是由inotifywait监控指定的ssl文件状态,一旦发现ssl文件被更新,就自动启动reload Nginx指令,这样就可以完成上述的需求。

二、安装步骤

步骤1:安装 inotify-tools (以 阿里云linux服务为例)

sudo yum install -y epel-release && sudo yum install -y inotify-tools

注:如果阿里云服务器已经安装了自定义的epel包,则可直接 sudo yum install -y inotify-tools

步骤 2:创建监控脚本

创建文件:/usr/local/bin/watch-cert-reload-nginx.sh

以下为文件内容:

#!/bin/bash CERT_DIR="/cert" CERT_FILE="$CERT_DIR/fullchain.pem" KEY_FILE="$CERT_DIR/privkey.pem" # 确保证书文件存在(避免启动失败) for f in "$CERT_FILE" "$KEY_FILE"; do if [ ! -f "$f" ]; then echo "$(date): ERROR: Required cert file missing: $f" >&2 exit 1 fi done echo "$(date): Monitoring $CERT_FILE and $KEY_FILE for changes..." # 监控两个文件的修改、属性变更(如 chmod)、覆盖写入等 inotifywait -m -e modify,attrib,move,create \ --format '%w%f' \ "$CERT_FILE" "$KEY_FILE" | while read CHANGED_FILE; do echo "$(date): Certificate file changed: $CHANGED_FILE" # 先测试配置是否合法 if nginx -t; then echo "$(date): Reloading Nginx..." systemctl reload nginx else echo "$(date): ❌ Nginx config test failed! Skip reload." >&2 fi

注1:ssl文件的路径及文件名需根据实际的情况修改。

注2: 如果Nginx非通过systemd控制(例如是由宝塔linux面板安装),则需要将 systemctl reload nginx更换为 nginx -s reload

步骤 3:设置权限

sudo chmod +x /usr/local/bin/watch-cert-reload-nginx.sh

步骤 4:创建 systemd 服务

创建/etc/systemd/system/nginx-cert-watcher.service

文件内容如下:

[Unit]
2Description=Auto-reload Nginx when SSL certificates change
3After=network.target nginx.service
4
5[Service]
6Type=simple
7User=root
8ExecStart=/usr/local/bin/watch-cert-reload-nginx.sh
9Restart=always
10RestartSec=5
11StandardOutput=journal
12StandardError=journal
13
14[Install]
15WantedBy=multi-user.target

步骤 5:启用并启动服务

sudo systemctl daemon-reload sudo systemctl enable --now nginx-cert-watcher.service
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 17:13:00

diskinfo监控GPU服务器硬盘状态,保障PyTorch-CUDA-v2.7稳定运行

diskinfo监控GPU服务器硬盘状态,保障PyTorch-CUDA-v2.7稳定运行 在现代AI研发环境中,一个训练任务动辄持续数天甚至数周,数据量动辄上百GB。一旦因硬件问题导致中断,不仅浪费了宝贵的GPU计算资源,更可能让研究人员前功…

作者头像 李华
网站建设 2026/7/14 17:15:14

conda create env太慢?切换至PyTorch-CUDA-v2.7容器秒级启动

从 conda create 到容器化:为什么 PyTorch-CUDA 容器能实现秒级启动 在深度学习项目中,你是否经历过这样的场景?刚拿到一台新服务器,兴致勃勃地准备跑通第一个模型,结果卡在了第一步——执行 conda create -n pytorch…

作者头像 李华
网站建设 2026/7/14 17:14:13

基于51单片机的智能抽奖系统控制设计

**单片机设计介绍,基于51单片机的智能抽奖系统控制设计 文章目录一 概要二、功能设计设计思路三、 软件设计原理图五、 程序六、 文章目录一 概要 基于51单片机的智能抽奖系统控制设计旨在通过电子技术实现抽奖过程的自动化和智能化,以提高抽奖活动的效率…

作者头像 李华
网站建设 2026/7/14 18:21:35

transformer模型蒸馏实战:基于PyTorch-CUDA-v2.7加速小模型训练

Transformer模型蒸馏实战:基于PyTorch-CUDA-v2.7加速小模型训练 在当今AI应用快速落地的背景下,大模型虽强,却往往“跑不动”——部署成本高、推理延迟大、资源消耗惊人。尤其是在移动端、边缘设备或实时服务场景中,一个千亿参数…

作者头像 李华
网站建设 2026/7/14 18:21:50

PyTorch-CUDA-v2.7镜像启用CUDA Graph,减少内核启动开销

PyTorch-CUDA-v2.7镜像启用CUDA Graph,减少内核启动开销 在现代深度学习系统中,GPU已成为训练和推理的绝对主力。然而,即便拥有A100、H100这样的顶级算力硬件,许多团队仍会发现实际吞吐远低于理论峰值——问题往往不在于模型本身&…

作者头像 李华
网站建设 2026/7/14 18:24:24

8个降aigc工具推荐!继续教育人群高效避坑指南

8个降aigc工具推荐!继续教育人群高效避坑指南 AI降重工具:高效避坑,让论文更自然 在继续教育的学习过程中,论文写作是一项重要任务,而随着AI技术的广泛应用,如何有效降低AIGC率、去除AI痕迹、避免查重问题&…

作者头像 李华