0%

七牛云CDN + acme.sh 自动续签SSL证书

最近小程序项目上传图片越来越大,用户上传动辄10几MB,全走自己服务器带宽扛不住,决定上七牛云CDN直传。记录下整个配置过程,包括自动续签SSL证书,以后换项目可以直接复用。

为什么选七牛云

对比了阿里云OSS、腾讯云COS和七牛云Kodo:

项目 七牛云 阿里云OSS 腾讯云COS
上传流量 免费无上限 免费 免费
存储空间 10GB/月免费 按量付费 新户50GB/年
CDN回源流量 10GB/月免费 0.15元/GB 0.15元/GB
个人项目成本 约¥0/月 几块钱/月 首年免费

对于个人项目,七牛的免费额度完全够用,选了它。


一、七牛云创建存储空间

  1. 登录七牛云控制台,进入对象存储Kodo
  2. 点击新建空间
配置项
存储区域 华南-广东(ECS在深圳,就近)
访问控制 公开(公有读私有写,URL直接访问)
  1. 创建成功后拿到空间名称,后面会用到

二、配置CDN加速域名

进入CDN → 域名管理 → 添加域名

配置项
加速域名 cdn.rfcode.top(已备案域名)
通信协议 HTTPS
覆盖范围 中国大陆
使用场景 图片小文件
源站配置 七牛云存储 → 选择刚创建的空间
缓存时间 30天
缓存参数 忽略所有参数

提交后拿到七牛给的CNAME值(类似 cdn-rfcode-top-idvru26.qiniudns.com),下一步用。


三、DNS添加CNAME记录

域名在阿里云管理的,去阿里云控制台 → 域名 → 解析设置,添加一条记录:

记录类型 主机记录 记录值
CNAME cdn 粘贴七牛给的CNAME值

添加后等待几分钟生效,可以在七牛点「刷新检测」,状态变成已配置即可。


四、服务器安装acme.sh并签发证书

SSH登录到阿里云ECS:

1
2
3
4
5
# 1. 安装 acme.sh
curl https://get.acme.sh | sh

# 重新加载环境
source ~/.bashrc

安装时会自动添加定时任务,每天检查证书状态,不需要额外配置。

注册邮箱(用你的真实邮箱):

1
/home/myecs/.acme.sh/acme.sh --register-account -m your@email.com

签发证书需要能操作阿里云DNS(用来添加TXT验证记录),在阿里云RAM获取AccessKey:

1
2
3
4
5
6
# 设置阿里云DNS API密钥(用于自动验证域名)
export Ali_Key="LTAI5t***************"
export Ali_Secret="KDXj******************************"

# 签发证书
/home/myecs/.acme.sh/acme.sh --issue --dns dns_ali -d cdn.rfcode.top

⚠️ 阿里云的AccessKey建议去RAM访问控制创建子用户,只给AliyunDNSFullAccess权限,不要直接用主账号密钥。

看到 Cert success.Your cert is in: ... 就说明签发成功了。


五、配置自动部署到七牛CDN

设置七牛API密钥

七牛密钥管理获取AccessKey和SecretKey:

1
2
export QINIU_AK="tNCT7v*********************************"
export QINIU_SK="8Vis*********************************"

部署证书到七牛

1
/home/myecs/.acme.sh/acme.sh --deploy -d cdn.rfcode.top --deploy-hook qiniu

看到 Domain cdn.rfcode.top certificate has been deployed successfully 说明部署成功。

注意:如果提示 400302 错误,先去七牛CDN域名管理手动开启HTTPS(选择已有证书),部署后再跑一次就成功了。

关键一步:设置续期后自动部署

默认续期只更新本地证书文件,不会自动部署到七牛。要加一条 renew-hook:

1
2
3
/home/myecs/.acme.sh/acme.sh --set-renew-hook \
"/home/myecs/.acme.sh/acme.sh --deploy -d cdn.rfcode.top --deploy-hook qiniu" \
-d cdn.rfcode.top

验证一下:

1
/home/myecs/.acme.sh/acme.sh --info -d cdn.rfcode.top | grep renew_hook

看到输出有 renew_hook 指向 deploy 命令就对了。

验证自动续期

1
crontab -l | grep acme

会看到类似这样的定时任务,acme.sh每天自动检查:

1
0 0 * * * "/home/myecs/.acme.sh"/acme.sh --cron --home "/home/myecs/.acme.sh" > /dev/null

以后证书到期前自动续签 → 触发 renew-hook → 自动部署到七牛CDN,全程无人值守。


最终效果

  • 小程序图片直传七牛,不经过自己服务器
  • HTTPS自动配置完成
  • 证书到期自动续签、自动部署
  • 目前费用:¥0

踩坑记录

  1. CNAME生效需要等几分钟,七牛检测不到就多刷新几次
  2. 七牛CDN要先开启HTTPS再执行deploy,否则会报400302
  3. acme.sh默认用ZeroSSL,注册邮箱那一步不能跳过
  4. 记住去七牛CDN域名管理打开强制HTTPS,避免用户通过HTTP访问
  5. renew-hook 需要单独设置,只安装acme.sh不会自动部署到七牛——装好后一定要跑一遍 --set-renew-hook

以后其他项目要用CDN,这套流程直接复用就行。

-------------本文结束感谢您的阅读-------------