利用阿里云 OSS 作为 Ghost 的存储空间

Ghost 可以使用自定义存储适配 (Custom storage adapter)来自定义文件存储的方法。事实上,目前有现成的项目可以使用,原版是 MT-Libraries/ghost-oss-store,但是推荐使用 fancyer/ghost-oss-store 这个改进版,它们的差别在于,原版没有重写 read 方法,因此从 OSS 读取文件时无法进行鉴权操作,这样你就必须开启 OSS 的公共读权限才能正常获取文件。新版增加了 read 方法,可以正常进行鉴权操作。

同时,由于这个项目长时间没更新,新版 Ghost 配置方法会有点小的区别。本文按照成文时的最新版本为 2.19

简要步骤如下:

  1. 安装项目到你的 Ghost 。
  2. 配置 OSS,上传 ssl 证书。
  3. 修改 Ghost 配置文件并重启 Ghost。

安装项目到 Ghost

由于国内特殊的网络环境,建议设置 npm 的国内镜像再进行安装,否则速度很慢甚至无法成功安装。如果你没有安装 git,按照错误提示进行安装即可。

# 将 npm 更改为淘宝镜像
npm config set registry http://registry.npm.taobao.org/
# 将项目 clone 到指定的文件夹
cd /var/www/ghost/content/adapters/storage
sudo mkdir oss-store && cd oss-store
sudo git clone https://github.com/fancyer/ghost-oss-store.git ./
# 安装项目
sudo npm install

配置 OSS 并上传 ssl 证书

在上一篇文章中,我们下载了生成的 ssl 证书,现在它们将会派上用场。

对于 OSS 的使用不做过多的描述,大家有需要可以搜索相关的文章。

需要注意的地方:

  1. 开启 OSS 的 HTTPS 功能,并创建秘钥对。
  2. 注意正确配置防盗链设置,保证你的域名有权限访问其中的资源。
  3. 上传我们保存的 ssl 证书, fullchain.cer 上传至公钥, swiity.com.key 上传至私钥。

修改 Ghost 配置文件并重启 Ghost

cd /var/www/ghost
sudo nano config.production.json

在配置文件内增加顶层元素,示例如下:

"storage": {
  "active": 'oss-store',
  "oss-store": {
    "accessKeyId": "accessKeyId",
    "accessKeySecret": "accessKeySecret",
    "bucket": "bucket",
    "region": "oss-cn-hangzhou",
    "origin": "https://your-oss-domain.com/",
    "fileKey": {
      "safeString": true,
      "prefix": "ghost/",
      "suffix": ""
    }
  }
}
  • accessKeyId 你在阿里云中设置的具有访问 oss 权限的 accessKeyId
  • accessKeySecret 你在阿里云中设置的具有访问 oss 权限的 accessKeySecret
  • bucket 你的 oss 的 bucket 名称
  • region 你的 oss 的地区编号,是你 oss 的公共域名的一部分。
  • origin 填写你的 oss 所绑定的域名。如果没有绑定域名,这一项填写 false。
  • prefix oss 存储路径的前缀,根目录为 oss bucket 的根目录。
  • suffix 后缀,会添加在文件的扩展名之前。

需要注意的是,由于新版 Ghost 采用 json 作为配置文件的格式,因此必须符合 json 文件的语法,例如字符串必须使用双引号(而非单引号),以及不允许添加注释。

最后重启 Ghost 就大功告成了:

cd /var/www/ghost
ghost restart

需要注意的是,原来已经上传的文件仍然会存储在 Ghost 的本地存储里,需要你自己进行替换。

显示评论