前言

接下来几篇博文会介绍本站在基于Ghost博客接入的插件及所做的修改,本篇将介绍Ghost接入七牛对象存储的方法。

Ghost默认将上传的媒体文件,图片等保存在本地服务器中,对于按流量计费的小型vps,不管是在存储空间还是网络流量上,都比较难以承受,所以静态资源CDN化还是非常有必要的。七牛在国内做的比较久了,国内访问速度还不错,功能齐全,价格优惠,如果是HTTP还有一定的免费流量,而且Ghost官方也有推荐七牛的插件。Ghost官方storage adapters列表有列出七牛的adapter(https://docs.ghost.org/concepts/storage-adapters/),不过目测应当不是官方提供,而是一个三方插件——qn-store。看了下npm底层依赖了七牛官方SDK——qn,应当还是靠谱的。

安装及配置

安装

qn-store的安装和配置方法,GitHub上还是比较清楚的。为了方便后续的更新和备份,这里选取了直接从git拉取的方式,将项目代码拉取到docker映射出来的content目录下面

cd [path/to/ghost]/content/adapters/storage
git clone https://github.com/Minwe/qn-store.git

然后安装npm依赖:

cd qn-store
npm install

注:如果宿主机没有安装node环境,推荐使用nvm进行安装。
可以考虑宿主机node版本与Ghost容器中的node版本保持一致,具体方法如下:

# 打开docker容器的shell
docker exec -it ghost /bin/ash

# 查看版本,目前为LTS的最新版本8.12.0
node -v

Ghost配置

docker-compose的yaml文件,在ghost配置的environment中添加如下字段:

      # 指定storage adapter为七牛
      storage__active: "qn-store"
      # 在链接中可以生成和查看密钥https://portal.qiniu.com/user/key
      storage__qn-store__accessKey: ""
      storage__qn-store__secretKey: ""
      # 对象存储bucket的名称https://portal.qiniu.com/bucket/mypal/index
      storage__qn-store__bucket: ""
      # 配置cdn地址,七牛已停止提供免费域名,需要绑定自有域名https://portal.qiniu.com/cdn/overview
      storage__qn-store__origin: "https://cdn.mypal.wang"
      # 此项设置可以将中文等字符转义成字母拼音等,保证文件名为ASCII范围内的字符
      storage__qn-store__fileKey__safeString: "true"
      # 设置文件名前缀,可以按日期归档目录
      storage__qn-store__fileKey__prefix: "YYYYMM/"  

七牛后台配置

七牛对http的cdn提供了每月10G的免费下载流量,超出后才会收费。但本站已切https,为了URL栏的那把小锁,只好将cdn切换到https了。证书可以直接在七牛免费申请,有效期1年,但愿一年后不会忘记续期吧。

由于https流量不是免费的,为了避免盗链、spider、爬虫、图片未压缩等不必要的流量耗费。建议设置Referer 防盗链,图片瘦身等。上传图片前,也建议过一遍tinypng,确保图片有进一步的压缩。其他配置按需自行设置就好。

遗留问题

最后重启docker,就可以看到图片可以上传到七牛了~

要注意的是如果有同名文件,上传是不会成功的,所以在给图片起名的时候要注意保证唯一性,或者把prefix设置的粒度更小一点。

另外还遇到一个上传图片时node的报错,不确定是adapter还是qn sdk还是七牛服务器问题,一旦触发图片上传就会失败,只能重启docker恢复。这个问题不太容易出现,还需要继续定位一下。