最近小程序项目上传图片越来越大,用户上传动辄10几MB,全走自己服务器带宽扛不住,决定上七牛云CDN直传。记录下整个配置过程,包括自动续签SSL证书,以后换项目可以直接复用。
为什么选七牛云
对比了阿里云OSS、腾讯云COS和七牛云Kodo:
| 项目 | 七牛云 | 阿里云OSS | 腾讯云COS |
|---|---|---|---|
| 上传流量 | 免费无上限 | 免费 | 免费 |
| 存储空间 | 10GB/月免费 | 按量付费 | 新户50GB/年 |
| CDN回源流量 | 10GB/月免费 | 0.15元/GB | 0.15元/GB |
| 个人项目成本 | 约¥0/月 | 几块钱/月 | 首年免费 |
对于个人项目,七牛的免费额度完全够用,选了它。
一、七牛云创建存储空间
- 登录七牛云控制台,进入对象存储Kodo
- 点击新建空间
| 配置项 | 值 |
|---|---|
| 存储区域 | 华南-广东(ECS在深圳,就近) |
| 访问控制 | 公开(公有读私有写,URL直接访问) |
- 创建成功后拿到空间名称,后面会用到
二、配置CDN加速域名
进入CDN → 域名管理 → 添加域名:
| 配置项 | 值 |
|---|---|
| 加速域名 | cdn.rfcode.top(已备案域名) |
| 通信协议 | HTTPS |
| 覆盖范围 | 中国大陆 |
| 使用场景 | 图片小文件 |
| 源站配置 | 七牛云存储 → 选择刚创建的空间 |
| 缓存时间 | 30天 |
| 缓存参数 | 忽略所有参数 |
提交后拿到七牛给的CNAME值(类似 cdn-rfcode-top-idvru26.qiniudns.com),下一步用。
三、DNS添加CNAME记录
域名在阿里云管理的,去阿里云控制台 → 域名 → 解析设置,添加一条记录:
| 记录类型 | 主机记录 | 记录值 |
|---|---|---|
| CNAME | cdn |
粘贴七牛给的CNAME值 |
添加后等待几分钟生效,可以在七牛点「刷新检测」,状态变成已配置即可。
四、服务器安装acme.sh并签发证书
SSH登录到阿里云ECS:
1 | # 1. 安装 acme.sh |
安装时会自动添加定时任务,每天检查证书状态,不需要额外配置。
注册邮箱(用你的真实邮箱):
1 | /home/myecs/.acme.sh/acme.sh --register-account -m your@email.com |
签发证书需要能操作阿里云DNS(用来添加TXT验证记录),在阿里云RAM获取AccessKey:
1 | # 设置阿里云DNS API密钥(用于自动验证域名) |
⚠️ 阿里云的AccessKey建议去RAM访问控制创建子用户,只给
AliyunDNSFullAccess权限,不要直接用主账号密钥。
看到 Cert success. 和 Your cert is in: ... 就说明签发成功了。
五、配置自动部署到七牛CDN
设置七牛API密钥
在七牛密钥管理获取AccessKey和SecretKey:
1 | export QINIU_AK="tNCT7v*********************************" |
部署证书到七牛
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 | /home/myecs/.acme.sh/acme.sh --set-renew-hook \ |
验证一下:
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
踩坑记录
- CNAME生效需要等几分钟,七牛检测不到就多刷新几次
- 七牛CDN要先开启HTTPS再执行deploy,否则会报400302
- acme.sh默认用ZeroSSL,注册邮箱那一步不能跳过
- 记住去七牛CDN域名管理打开强制HTTPS,避免用户通过HTTP访问
- renew-hook 需要单独设置,只安装acme.sh不会自动部署到七牛——装好后一定要跑一遍
--set-renew-hook
以后其他项目要用CDN,这套流程直接复用就行。