HTTPS自动更新策略

1. 配置自动更新脚本

  • 因为和 80 端口冲突,需要先停止 80 端口的占用
  • docker 无法挂载软链接,启动后的 nginx 无法找到 pem 文件,导致 docker 启动失败
bash 复制代码
#!/bin/bash

set -e

# ===================== 配置 =====================
# 证书域名
DOMAIN="your domin"

# 容器名称(多个容器用空格)
CONTAINERS=("nginx_container")

# nginx 容器挂载证书的目标路径(你在 docker-compose 中使用了这个目录)
TARGET_CERT_DIR="./nginx-certs"

# ===================== 函数封装 =====================
log() {
  echo -e "[`date '+%Y-%m-%d %H:%M:%S'`] $1"
}

# ===================== 停止容器释放端口 =====================
log "1️⃣  停止容器,释放 80 端口..."
for container in "${CONTAINERS[@]}"; do
  log "🛑 正在停止 $container ..."
  docker stop "$container" || log "⚠️  容器 $container 已停止或不存在"
done

# ===================== 等待端口释放 =====================
log "2️⃣  等待端口释放..."
sleep 5

# ===================== 执行 Certbot 更新 =====================
log "3️⃣  执行证书更新 certbot renew..."
sudo certbot renew

# ===================== 同步证书到挂载目录 =====================
log "4️⃣  拷贝最新证书到挂载目录($TARGET_CERT_DIR)..."

# 创建目标目录(如不存在)
mkdir -p "$TARGET_CERT_DIR"

# 拷贝证书(使用 sudo 防止权限问题)
sudo cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" "$TARGET_CERT_DIR/"
sudo cp "/etc/letsencrypt/live/$DOMAIN/privkey.pem" "$TARGET_CERT_DIR/"

# 调整权限(可选)
sudo chmod 644 "$TARGET_CERT_DIR/fullchain.pem"
sudo chmod 600 "$TARGET_CERT_DIR/privkey.pem"

log "✅ 证书已同步至 $TARGET_CERT_DIR"

# ===================== 重启容器 =====================
log "5️⃣  重启容器..."
for container in "${CONTAINERS[@]}"; do
  log "🚀 启动 $container ..."
  docker start "$container"
done

log "✅ 所有容器已重启,证书更新完成"

# ===================== 显示有效期检查 =====================
log "📅 当前证书有效期:"
sudo openssl x509 -in "$TARGET_CERT_DIR/fullchain.pem" -noout -dates

2. 配置自动更新策略

设置自动定期任务

bash 复制代码
sudo crontab -e

添加一行

javascript 复制代码
0 3 * * * /home/lighthouse/renew_cert.sh >> /home/lighthouse/cert_renew.log 2>&1

每天凌晨 3 点自动检测并续签证书,如有更新则自动同步证书 + 重启 nginx。

3. 检测是否更新成功

bash 复制代码
cat /home/lighthouse/cert_renew.log
相关推荐
一 乐39 分钟前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
码事漫谈2 小时前
Protocol Buffers 编码原理深度解析
后端
码事漫谈2 小时前
gRPC源码剖析:高性能RPC的实现原理与工程实践
后端
踏浪无痕3 小时前
AI 时代架构师如何有效成长?
人工智能·后端·架构
程序员小假4 小时前
我们来说一下无锁队列 Disruptor 的原理
java·后端
武子康5 小时前
大数据-209 深度理解逻辑回归(Logistic Regression)与梯度下降优化算法
大数据·后端·机器学习
maozexijr5 小时前
Rabbit MQ中@Exchange(durable = “true“) 和 @Queue(durable = “true“) 有什么区别
开发语言·后端·ruby
源码获取_wx:Fegn08955 小时前
基于 vue智慧养老院系统
开发语言·前端·javascript·vue.js·spring boot·后端·课程设计
独断万古他化5 小时前
【Spring 核心: IoC&DI】从原理到注解使用、注入方式全攻略
java·后端·spring·java-ee
毕设源码_郑学姐5 小时前
计算机毕业设计springboot基于HTML5的酒店预订管理系统 基于Spring Boot框架的HTML5酒店预订管理平台设计与实现 HTML5与Spring Boot技术驱动的酒店预订管理系统开
spring boot·后端·课程设计