外贸站宝塔面板免费SSL证书自动续期脚本设置全攻略
为什么外贸站需要SSL自动续期?
外贸站点依赖稳定HTTPS连接,Let's Encrypt免费证书有效期仅90天。
若忘记续期,访客会看到安全警告,影响信任和SEO排名。
手动续期既繁琐又易漏,配置一个自动续期脚本是省心稳定的做法。
前置准备:确认环境与权限
在动手之前,先检查以下条件是否满足:
- 宝塔面板已安装并登录(建议使用最新稳定版)。
- 网站已成功部署Let's Encrypt免费证书(在网站设置 -> SSL中可查看)。
- 服务器能正常访问外网,且域名解析正确。
- 了解SSH登录方式(用于测试脚本,也可在面板文件管理操作)。
分步配置:从脚本到定时任务
1. 编写自动续期脚本
登录宝塔面板,进入左侧菜单「文件」,找到 /root 目录(或其他自定义位置)。
新建一个名为 ssl_renew.sh 的文件,内容如下:
#!/bin/bash
# 强制续期所有Let's Encrypt证书(不限制次数)
/usr/bin/certbot renew --force-renewal --noninteractive
# 如果证书更新成功,重启Nginx使新证书生效
if [ $? -eq 0 ]; then
/etc/init.d/nginx reload
fi
如果宝塔使用Apache,将最后一行改为 /etc/init.d/httpd reload。
保存后,右键设置文件权限为 0755(或通过命令 chmod 755 /root/ssl_renew.sh 赋予执行权限)。
2. 添加计划任务
在宝塔面板左侧点击「计划任务」,然后点击「添加任务」。
按以下填写:
- 任务类型:Shell脚本
- 任务名称:SSL证书自动续期(可自定义)
- 执行周期:选择
每月,并设定具体日期(例如每月1号凌晨3点),或者选择N分钟(建议设为1440分钟,即每天执行一次,因为certbot自带续期逻辑,不会重复申请)。更推荐每天执行一次:在「执行周期」中选择N分钟,输入1440。 - 执行脚本内容:
bash /root/ssl_renew.sh - 点击「添加任务」
3. 测试脚本能否正常执行
在添加任务后,可临时点击该任务行的「执行」按钮,观察日志。
如果显示 Congratulations, all renewals succeeded 类似信息,则说明脚本有效。
避坑指南:这些细节决定成败
- 保证计划任务按时触发:检查服务器时间是否准确(可通过SSH执行
date确认),时区建议设置为Asia/Shanghai(在面板设置里调整)。 - 域名解析必须稳定:证书续期需要域名指向当前服务器IP,如果域名暂停解析或切换到其他IP,续期会失败。
- 端口80和443必须开放:Let's Encrypt验证过程需通过HTTP或TLS协议,请确保宝塔面板安全组中放行这两个端口。
- 多域名证书注意事项:一个证书包含多个域名时,每个域名都必须在有效期内可访问。
- 磁盘空间不足:日志累积可能导致写入失败,建议定期清理
/var/log/letsencrypt下的旧日志。
效果验证:如何确认证书已自动更新?
- 执行一次脚本后,访问任意浏览器打开你的外贸站,点击地址栏锁图标,查看证书有效期。如果过期时间已延长,说明自动续期成功。
- 你也可以通过SSH运行命令
certbot certificates查看所有证书的到期日和续期记录。 - 宝塔面板的SSL管理页面也会显示证书状态,通常会自动同步。
常见问题解答
Q1:脚本执行后报错 “Certbot doesn't know how to automatically configure the web server”
这是因为缺少 certbot 的Nginx插件。
请SSH执行 pip install certbot-nginx 或通过包管理器安装:
apt install python3-certbot-nginx # Debian/Ubuntu
yum install certbot-nginx # CentOS
Q2:计划任务显示执行成功,但证书并未续期
检查脚本中的证书路径是否与宝塔实际使用的路径一致。
宝塔面板将证书存储在 /www/server/panel/vhost/cert/ 下,且使用自己的管理方式。
更稳妥的做法是使用宝塔的API自动续期(需付费),或改用 acme.sh 工具。
对于免费方案,建议在脚本末尾添加手动复制命令:
cp /etc/letsencrypt/live/你的域名/fullchain.pem /www/server/panel/vhost/cert/你的域名/fullchain.pem
cp /etc/letsencrypt/live/你的域名/privkey.pem /www/server/panel/vhost/cert/你的域名/privkey.pem
/etc/init.d/nginx reload
注意将 你的域名 替换为实际域名。
Q3:使用acme.sh替换certbot是否更简单?
acme.sh是一款轻量级的ACME客户端,支持自动续期并直接刷新宝塔的证书目录。
如果你对certbot不够熟悉,可以考虑切换至acme.sh。
但本文基于certbot已集成在宝塔环境,优先推荐原生工具。
写在最后
自动续期脚本配置一次即可长期免维护,但建议每季度手动检查一次证书状态和计划任务日志。
如果你正在管理多个外贸站,可以将脚本中的证书操作循环执行,或者结合宝塔的批量SSL功能。
遇到异常时优先回看避坑部分,多数问题出在域名解析或端口限制上。
希望这篇教程能帮你省下每次手动续期的十几分钟。