当前位置: 首页 > news >正文

Docker环境下自动续签Let’s Encrypt SSL证书

写一个删除旧证书脚本

#!/bin/bash  # 定义一个函数,用于检查并删除指定目录  
delete_if_old() {  local domain_name="$1"  local age_minutes="$2"  local live_dir="/etc/letsencrypt/live/$domain_name"  local archive_dir="/etc/letsencrypt/archive/$domain_name"  # 检查 /etc/letsencrypt/live/ 下的目录是否存在且修改时间超过指定分钟数  if [ -d "$live_dir" ] && [ "$(find "$live_dir" -maxdepth 0 -mmin +$age_minutes)" ]; then  echo "Deleting $live_dir ..."  rm -rf "$live_dir"  echo "Deleting $archive_dir ..."  rm -rf "$archive_dir"else  echo "$live_dir does not exist or is not old enough."  fi
}  # 调用函数,删除超过43200分钟的目录  
delete_if_old blog.example.com 1440

nginx 域名配置

server {listen       80;listen  [::]:80;listen  443 ssl;server_name  blog.example.com;ssl_certificate   /etc/letsencrypt/cert/blog.example.com/fullchain.pem;ssl_certificate_key  /etc/letsencrypt/cert/blog.example.com/privkey.pem;location ~/.well-known/acme-challenge/ {root /usr/share/nginx/html;}location = /xmlrpc.php {return 403;}location / {if ($block_ip) {return 403;  # 返回 403 Forbidden}#limit_req zone=mylimit burst=4 nodelay;#limit_req_status 598;proxy_pass http://wordpress/;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-Proto $scheme;}
}

编写定时

0 7 * * 6 docker cp /data/app/delete_old_cert_blog.sh nginx:/delete_old_cert_blog.sh
1 7 * * 6 docker exec nginx /bin/bash -c '/delete_old_cert_blog.sh'
2 7 * * 6 docker run --rm --volumes-from nginx certbot/certbot certonly --force-renewal --webroot --non-interactive --agree-tos --webroot-path=/usr/share/nginx/html -m admin@qq.com -d blog.example.com
3 7 * * 6 docker exec nginx bash -c  'cp -rfL /etc/letsencrypt/live/* /etc/letsencrypt/cert'
4 7 * * 6 docker exec nginx bash -c 'nginx -s reload'

这里有3个注意点

1.crontab里不能用docker exec -it 这种交互式脚本,用了也执行不了。

2.这里不用/etc/letsencrypt/live/作为nginx的配置目录,因为脚本删除旧配置文件的操作会导致网站访问失效,所以这里用live目录生成的复制到/etc/letsencrypt/cert作为nginx的证书目录

3.--webroot-path=/usr/share/nginx/html这里对应nginx里

location ~/.well-known/acme-challenge/ {
        root /usr/share/nginx/html;
    }
这里的root路径,如果有多个域名,分时段执行时不用改这个路径,同时执行最好改下这个路径。

注意上面3点即可保持证书更新,上面脚本已经稳定运行两年,然后宝塔证书续签现在还有bug

相关文章:

  • Alan AI - 面向Web的生成式AI SDK
  • [Windows] Wireshark 网络抓包工具 v4.4.6
  • React 第三十三节 ReactRouter 中 useSearchParams 使用详解及注意事项
  • Multi-Query Attention (MQA) PyTorch 实现
  • 2. ubuntu20.04 和VS Code实现 ros的输出 (C++,Python)
  • JAVA设计模式——(1)适配器模式
  • .gitignore 可能失效的原因
  • 在 Amazon Graviton 上运行大语言模型:CPU 推理性能实测与调优指南
  • XCVU13P-2FHGA2104I Xilinx Virtex UltraScale+ FPGA
  • 基于LSTM-AutoEncoder的心电信号时间序列数据异常检测(PyTorch版)
  • 简单代码应用
  • Linux(autoDL云服务器)mamba-ssm环境安装——一次成功!
  • 【计算机网络 | 第二篇】常见的通信协议(一)
  • 【HDFS入门】HDFS数据冗余与容错机制解析:如何保障大数据高可靠存储?
  • day29 学习笔记
  • 洛谷题目:P8624 [蓝桥杯 2015 省 AB] 垒骰子 题解 (本题简)
  • linux kernel irq相关函数详解
  • 系分架构论文《论高并发场景的架构设计和开发方法》
  • 股指期货跨期套利是如何赚取价差利润的?
  • Java实现将MarkDown保留文档内容及格式输出到浏览器页面
  • 智慧菜场团标试验:标准化的同时还能保留个性化吗?
  • 天工摘得全球首个人形机器人半马冠军:中国机器人产业正努力跑向人机共生社会
  • 上海推出平台算法治理合规指引:不得“静默推荐”,算法应用向上向善
  • 同比增长4.2%!一季度全国财政支出持续增长
  • 全球建筑瞭望|与自然共呼吸的溪谷石舍与海边公共空间
  • 融创中国披露二次境外债重组方案:总规模约95.5亿美元债全额转股权,孙宏斌部分受限股票6年内不得处置