运维实战 · 自建系统

Certbot 证书自动续期可视化面板

证书到期忘了续,网站直接挂 90 天有效期一到,浏览器全屏红色警告。 这个面板把 certbot 的一整套命令行流程做成页面操作:申请走三步向导、续期可以先演练、 多台服务器批量同步、到期提前告警、每一步都有日志。不用再登服务器敲命令, 也不用记住 certbot certonly --webroot 那一长串参数。

Webroot 模式不动原有 nginx 配置支持 dry-run 演练多服务器纳管
把这个面板装到自己服务器 →

它到底解决了什么

到期忘了续

Let's Encrypt 证书只有 90 天。忘了就是全站 HTTPS 报错,用户看到「您的连接不是私密连接」,转化率直接归零。

命令记不住

webroot 路径、deploy-hook、renew 参数……一年就用那么一两次,每次都要翻文档,敲错一个参数就得重来。

多台机器查不过来

手上有十几台服务器,哪台证书快到期?只能一台台登上去 openssl x509 -enddate 看,漏一台就是事故。

核心能力

三步向导申请证书

选服务器 → 填证书名/域名/邮箱 → 预检 → 安装。不用查文档,跟着页面走完就签好了。

申请前先预检 8 项

操作系统与包管理器、nginx 在不在、certbot 在不在、域名解析是否指向本机、80 端口通不通、443 占用情况……有红灯就先报出来,不让你白跑一趟。

缺环境自动装

识别 apt / yum / dnf 自动安装 nginx 与 certbot。装完还会再验一遍命令是否可用——CentOS 7 已 EOL、yum 装不到 certbot 的情况会明确拦住并给出提示。

刻意绕开 nginx 插件

不用 certbot 的 nginx 插件:它在各发行版包名不一,还会改写你已有的配置。这里统一 webroot 模式 + 单独写一份 conf.d 配置,你原来的配置一行不动。

nginx -t 不过就停

签发前先校验配置,不通过直接中止,不会走到 certbot 那一步——省下一次失败的签发记录,也避免 Let's Encrypt 的速率限制。

续期可以先演练

点「演练」走 dry-run,完整跑一遍续期流程但不真签发、不消耗额度。确认没问题再点「续期」。

续期后动作自定义

默认 deploy-hook 是 systemctl reload nginx,也可以换成你自己的命令(重载网关、通知 Webhook、重启容器),填进去就行。

定时自动续期

后台任务自动扫描临近到期的证书并续期,续期结果写进日志。不用再往 crontab 里塞一行自己都看不懂的表达式。

签发后探测是否真生效

不是「命令返回 0 就完事」——会真的去连域名看证书链对不对、生效的是不是这张新证书。可单台探测,也可批量。

到期告警

按剩余天数分级评估告警,可手动触发「评估告警」立刻看当前有没有需要处理的证书。

多服务器纳管

单台同步、一键同步全部。已有 certbot 证书的机器可以「加入纳管」,存量证书也能纳入台账统一管理。

每一步都有日志

每次续期记录触发方式(手动/自动/演练)、执行结果、时间与完整输出。出了事能回溯,不用猜是谁什么时候跑的。

权限分级

查看、同步、续期、申请四类权限分开。实习生能看台账,只有运维能点续期和申请。

申请一张证书的完整流程

页面上是三步向导(填资料 → 预检 → 安装),背后跑的是下面这条链路,每一步的输出都实时回显,卡在哪一步一眼能看到。

  1. 1

    填资料

    选服务器、填证书名与域名(可多个)、留一个收告警的邮箱。

  2. 2

    环境预检

    8 项检查跑一遍,有红灯就明确告诉你是哪一项、怎么补。

  3. 3

    安装环境

    缺 nginx / certbot 就按发行版自动装,装完再校验一遍。

  4. 4

    准备 webroot 与配置

    建 /var/www/certbot,写一份独立的 conf.d/<证书名>.conf,不动你原有配置。

  5. 5

    nginx -t 校验

    配置不通过立即中止,不消耗签发额度。

  6. 6

    签发证书

    certbot certonly --webroot,带 --deploy-hook 保证签发后自动 reload。

  7. 7

    探测生效

    真连域名验证证书链,确认新证书已上线。

  8. 8

    纳入自动续期

    进台账、挂定时任务、到期前自动续期并告警。

和手工敲命令的区别

环节手工操作可视化面板
申请证书手敲 certbot certonly 一长串参数,敲错重来三步向导,页面填完点一下
失败成本错了才知道,还可能吃掉签发额度申请前预检 + nginx 校验双拦截
续期验证只能靠 certbot renew 的返回码支持 dry-run 演练,还能探测是否真生效
多看几台机器逐台 SSH 上去 openssl 看日期一键同步全部,台账集中看剩余天数
到期提醒靠邮件或自己记日历按剩余天数分级告警,可手动立刻评估
出事回溯翻 shell history,谁跑的不知道续期日志记触发方式、结果、完整输出
权限有服务器账号就能操作查看 / 同步 / 续期 / 申请 四级分开

几个常见问题

会改坏我现有的 nginx 配置吗?

不会。面板刻意绕开 certbot 的 nginx 插件,走 webroot 模式,只新增一份 /etc/nginx/conf.d/<证书名>.conf,你原来的配置文件一个字都不动。

申请失败会不会浪费 Let's Encrypt 的签发额度?

基本不会。签发前有两道拦截:预检(解析、端口、环境)和 nginx -t 配置校验。真要试也建议先点「演练」走 dry-run,dry-run 走的是测试环境,不消耗额度。

CentOS 7 这类老系统能用吗?

会明确拦住。CentOS 7 已 EOL、EPEL 归档后 yum 里装不到 certbot,面板在装完环境后会再校验一次命令是否存在,装不到就停下来告诉你原因,不会一路跑到报错。

一台机器上已经有用 certbot 申请的证书,能管吗?

能。申请向导里有「加入纳管」,把存量证书纳入台账,之后一样享受自动续期、探测和告警。

续期完 nginx 会自动重载吗?

默认会。deploy-hook 默认是 systemctl reload nginx,也可以换成你自己的命令——比如重载网关、重启容器或发通知。

三步装到自己服务器

这个面板是「运维服务管理系统」的一个模块,整套装在你自己的机器上,服务器密码等凭据全部加密存储,数据不出内网。

git clone https://gitee.com/taokaji/system-tools.git
cd system-tools
chmod +x install.sh && ./install.sh
  • 脚本自动检查 Docker 与 Compose,三个密钥随机生成(数据库口令 / 凭据加密密钥 / 授权签发密钥),端口被占自动顺延
  • 首次构建要拉 Maven 与 npm 依赖,5~15 分钟;装完直接打印访问地址,初始账号 admin / admin123
  • 7 天试用,功能全开;到期后仍可登录,激活即可恢复,不用重装
去 Gitee 看完整文档 →