Ghost博客接入阿里云OSS做图床

减少服务器硬盘空间使用,温馨提示:接入之前导出博客数据进行备份

前几天接入阿里云 OSS 当博客图床,并经历了未备份数据导致部分文章数据的丢失,正好有段空余时间来记录下接入过程

之前发现博客如果整站备份的或做迁移的话整体备份数据太大了,最多的也就是其实使用 Ghost 博客系统好看、简洁,很多文章都需要图片来支撑。博客服务器也不是什么高配版本,考虑下给站点图片加对象存储做图床,本身服务器使用的是阿里云的服务相比之下使用同一家云服务器厂商的服务,同地域内内网传输速度快并费用都会更低点。毕竟阿里云 OSS 40G 的费用一年也就几块钱,对比隔壁的 COS 费用少了点请求数费用还是比较良心的,相比之下还是比较便宜的。

阿里云 OSS 内网访问

购买 OSS 后开通 bucket 就可以内网做代理访问了,如果 Caddy 服务器可以使用以下配置文件:

二级域名地址 {
  reverse_proxy 阿里云Bucket内网访问地址 {
		header_up X-Real-IP {remote}
	  	header_up X-Forwarded-For {remote}
	  	header_up REMOTE-HOST {remote}
		header_up Access-Control-Allow-Headers *
		header_up Access-Control-Allow-Origin *
		header_down X-Real-IP {remote}
	  	header_down X-Forwarded-For {remote}
	  	header_down REMOTE-HOST {remote}
		header_down Access-Control-Allow-Headers *
		header_down Access-Control-Allow-Origin *
	}
}

通过上边配置后就可以使用绑定到服务器的二级域名访问 OSS 对应的资源了,这样不会产生额外的使用费用。

接下来就解决 Ghost 博客编辑器上传资源到对应的 OSS 内就行啦。

Ghost 阿里云 OSS 配置

Ghost 博客系统可以通过 Adapters Storage 来进行对应的上传站点资源进行处理,对应的文档参考:Ghost Storage adapters,如果有其他想法其实通过自定义开发 Adapters 可以实现很多有趣的小东西,这里不讨论 Adapter 继续阿里云 OSS 的配置。

  1. github 下载ghost-oss-store,上传到服务器 ghost 对应content/adapters/storage文件夹内重命名为 oss-store
    1. Docker Compose 搭建,修改docker-compose.yml 文件,在 Ghost 容器 environment 配置对应的环境变量,参考以下参数配置:

nodejs 搭建的 Ghost 博客系统,修改config.js在其中加入以下内容:

	   storage: {
  active: 'oss-store',
  'oss-store': {
    accessKeyId: 'accessKeyId',
    accessKeySecret: 'accessKeySecret',
    bucket: 'bucket',
    region: 'oss-cn-hangzhou',
    origin: 'https://www.thonatos.com/', // if you have bind custom domain to oss bucket. or false
    fileKey: {
      safeString: true, // use Ghost safaString util to rename filename, e.g. Chinese to Pinyin
      prefix: 'ghost/',  // { String } will be formated by moment.js, using `[]` to escape,
      suffix: '' // { String } string added before file extname.
    }
  }
}

配置文件修改

  # AliyunOSS
  storage__active: oss-store
  storage__oss-store__accessKeyId: 'accessKeyId'
  storage__oss-store__accessKeySecret: 'accessKeySecret'
  storage__oss-store__bucket: 'bucket'
  storage__oss-store__region: 'bucket所在地域 oss-cn-hangzhou'
  storage__oss-store__origin: '服务器访问资源地址'
  storage__oss-store__endpoint: 'bucket内网或外网访问地址'
  storage__oss-store__internal: 1 #是否内网访问
  storage__oss-store__secure: 1 #是否https访问
  storage__oss-store__fileKey__safeString: 1
  storage__oss-store__fileKey__prefix: ghost
  storage__oss-store__fileKey__suffix: ''

后记

如果使用的 docker 搭建的系统,近期国内很多 Docker Hub 镜像源站点关闭导致更新镜像可能会出现超时和拉取错误,操作之前导出博客数据进行备份。