Ghost博客配置阿里云OSS作为图床完整指南

@KG from Secretplan.cn
目录

Ghost博客配置阿里云OSS作为图床完整指南

本文档提供了将Ghost博客的媒体存储从默认的本地存储更改为阿里云OSS的完整步骤。通过使用阿里云OSS作为图床,您可以减少服务器硬盘空间使用,并利用阿里云OSS的高可用性和CDN加速能力。

目录

  1. 准备工作
  2. 阿里云OSS配置
  3. 安装Ghost OSS适配器
  4. 配置Ghost使用阿里云OSS
  5. 测试集成效果
  6. 常见问题与故障排除
  7. 最佳实践与优化建议

准备工作

在开始配置之前,请确保:

  1. 您已经有一个正常运行的Ghost博客(您提到位于/var/www/ghost目录)
  2. 您有对Ghost博客目录的访问权限(使用bruce用户)
  3. 重要:在进行任何配置更改前,请备份您的Ghost博客数据

备份Ghost数据的命令示例:

sudo su - bruce
cd /var/www/ghost
ghost export --file=ghost-backup-$(date +%Y%m%d).json
cp config.production.json config.production.json.bak

阿里云OSS配置

1. 创建阿里云OSS存储桶

  1. 登录阿里云OSS控制台
  2. 单击左侧的Bucket列表,然后单击创建Bucket
  3. 在创建Bucket页面配置以下参数:
    • Bucket名称:全局唯一的名称,建议使用有意义的名称,如your-blog-images
    • 地域:选择与您的ECS服务器相同的地域,可以使用内网传输,节省流量费用
    • 存储类型:标准存储(适合图片等频繁访问的文件)
    • 读写权限:私有(推荐,提高安全性)
    • 版本控制:关闭(图片存储通常不需要版本控制)
    • 服务端加密:根据需要选择
    • 实时日志查询:根据需要选择
    • 定时备份:根据需要选择
  4. 阅读并同意服务协议,然后单击确定

2. 创建RAM用户并获取AccessKey

为了安全起见,建议创建专门的RAM用户来访问OSS,而不是使用主账号的AccessKey。

创建RAM用户

  1. 登录RAM控制台
  2. 在左侧导航栏,选择身份管理 > 用户
  3. 单击创建用户
  4. 设置用户信息:
    • 登录名称:如ghost-oss-user
    • 显示名称:如Ghost OSS User
    • 访问方式区域,选择编程访问,即启用AccessKey
  5. 单击确定,创建RAM用户

为RAM用户授权

  1. 在用户列表中,找到刚创建的用户,单击添加权限
  2. 在添加权限面板,选择系统策略,搜索并选择AliyunOSSFullAccess(或者根据最小权限原则,创建自定义权限策略)
  3. 单击确定,完成授权

获取AccessKey

  1. 在用户列表中,找到刚创建的用户,单击用户名
  2. 认证管理页签下的AccessKey区域,单击创建AccessKey
  3. 阅读AccessKey使用场景及使用建议,选择对应使用场景后,勾选我确认必须创建AccessKey,然后单击继续创建
  4. 根据界面提示完成安全验证
  5. 在创建AccessKey对话框中,务必保存AccessKey ID和AccessKey Secret,这些信息只会显示一次

3. 配置Bucket访问权限

设置跨域访问CORS(必要)

为了让Ghost博客能够正常上传和访问OSS中的图片,需要配置跨域访问规则:

  1. 在Bucket列表中,单击您创建的Bucket名称
  2. 在左侧导航栏,选择权限管理 > 跨域设置
  3. 单击创建规则,配置以下参数:
    • 来源:输入您的Ghost博客域名,如https://secretplan.cn
    • 允许Methods:选择GETPOSTPUTDELETEHEAD
    • 允许Headers:输入*
    • 暴露Headers:输入ETagx-oss-request-id
    • 缓存时间:可设置为86400秒(1天)
  4. 单击确定,完成跨域设置

配置防盗链(可选但推荐)

为了防止其他网站盗用您的图片资源,建议配置防盗链:

  1. 在Bucket列表中,单击您创建的Bucket名称
  2. 在左侧导航栏,选择权限管理 > 防盗链
  3. 单击设置
  4. 添加Referer框中,添加允许访问的域名,如*.secretplan.cn
  5. Referer白名单为空时,是否允许空Referer访问:建议选择不允许
  6. 单击确定,完成防盗链设置

绑定自定义域名(可选)

如果您希望通过自定义域名访问OSS中的图片,可以进行以下配置:

  1. 在Bucket列表中,单击您创建的Bucket名称
  2. 在左侧导航栏,选择传输管理 > 域名管理
  3. 单击绑定域名
  4. 输入您的自定义域名,如images.secretplan.cn
  5. 如需开启HTTPS访问,可以配置SSL证书
  6. 单击确定

注意:绑定自定义域名前,需要先在您的DNS服务商处添加CNAME记录,将自定义域名指向OSS的默认访问域名。

安装Ghost OSS适配器

方法一:使用NPM安装(推荐)

  1. 登录到您的服务器,并切换到bruce用户:

    sudo su - bruce
    
  2. 进入Ghost博客目录:

    cd /var/www/ghost
    
  3. 安装ghost-oss-store适配器:

    npm install ghost-oss-store
    
  4. 创建存储适配器目录(如果不存在):

    mkdir -p content/adapters/storage
    
  5. 创建OSS存储适配器文件:

    echo "module.exports = require('ghost-oss-store');" > content/adapters/storage/oss-store.js
    

方法二:手动安装

如果您希望手动安装或者自定义适配器,可以按照以下步骤操作:

  1. 登录到您的服务器,并切换到bruce用户:

    sudo su - bruce
    
  2. 进入Ghost博客目录:

    cd /var/www/ghost
    
  3. 创建存储适配器目录(如果不存在):

    mkdir -p content/adapters/storage/oss-store
    
  4. 从GitHub克隆ghost-oss-store仓库:

    cd content/adapters/storage
    git clone https://github.com/MT-Libraries/ghost-oss-store ./oss-store
    
  5. 进入oss-store目录并安装依赖:

    cd oss-store
    npm install
    
  6. 返回到Ghost根目录:

    cd /var/www/ghost
    

配置Ghost使用阿里云OSS

修改Ghost配置文件

使用文本编辑器(如nano或vim)编辑Ghost的配置文件:

nano config.production.json

在配置文件中添加或修改storage部分,添加以下内容:

"storage": {
  "active": "oss-store",
  "oss-store": {
    "accessKeyId": "您的AccessKey ID",
    "accessKeySecret": "您的AccessKey Secret",
    "bucket": "您的Bucket名称",
    "region": "您的地域,如oss-cn-hangzhou",
    "endpoint": "您的Endpoint,如果在同一地域可以使用内网地址",
    "origin": "您的自定义域名或OSS访问域名,如https://your-bucket.oss-cn-hangzhou.aliyuncs.com/",
    "internal": true,  // 如果使用内网访问OSS,设置为true
    "secure": true,    // 如果使用HTTPS访问,设置为true
    "fileKey": {
      "safeString": true,  // 使用Ghost的safeString工具重命名文件名,例如将中文转为拼音
      "prefix": "ghost/",  // 文件前缀,可以按日期格式化,如"ghost/[YYYY]/[MM]/"
      "suffix": ""         // 文件后缀,添加在文件扩展名之前
    }
  }
}

请将上述配置中的占位符替换为您的实际信息:

  • accessKeyId:您的RAM用户AccessKey ID
  • accessKeySecret:您的RAM用户AccessKey Secret
  • bucket:您创建的OSS存储桶名称
  • region:OSS的地域,如oss-cn-hangzhou
  • endpoint:OSS的访问域名,如果在同一地域可以使用内网地址,如oss-cn-hangzhou-internal.aliyuncs.com
  • origin:访问OSS资源的域名,可以是自定义域名或OSS默认域名

重启Ghost服务

配置修改完成后,需要重启Ghost服务使配置生效:

cd /var/www/ghost
ghost restart

如果您使用的是systemd管理Ghost服务,可以使用以下命令:

sudo systemctl restart ghost

测试集成效果

1. 上传测试

  1. 登录到您的Ghost管理后台(通常是 https://secretplan.cn/ghost
  2. 创建一篇新的文章或页面
  3. 点击编辑器中的图片上传按钮,上传一张测试图片
  4. 观察上传过程是否顺利完成,没有出现错误提示

2. 检查图片URL

  1. 上传完成后,检查图片的URL
  2. 右键点击图片,选择"复制图片地址"或"复制图片链接"
  3. 检查URL是否包含您配置的OSS域名

3. 验证OSS存储

  1. 登录阿里云OSS控制台
  2. 进入您为Ghost配置的Bucket
  3. 在文件列表中,查找刚才上传的图片文件
  4. 确认文件已成功上传到OSS,并且路径与配置的前缀一致

常见问题与故障排除

上传失败

如果上传失败,请检查:

  1. Ghost日志文件中的错误信息:

    cd /var/www/ghost
    tail -f content/logs/ghost.log
    
  2. 确认OSS配置信息正确:

    • AccessKey ID和Secret是否正确
    • Bucket名称是否正确
    • 地域和Endpoint是否匹配
  3. 检查RAM用户权限:

    • 确保RAM用户有足够的OSS操作权限
  4. 网络连接:

    • 确保服务器可以连接到OSS服务
    • 如果使用内网Endpoint,确保服务器和OSS在同一地域

图片无法显示

如果图片上传成功但无法显示,请检查:

  1. 跨域设置:

    • 确保OSS的CORS设置允许您的网站域名访问
  2. 防盗链设置:

    • 如果配置了防盗链,确保您的网站域名在白名单中
  3. 文件权限:

    • 确保上传的文件在OSS中设置了正确的读取权限
  4. URL格式:

    • 检查URL是否完整,包含正确的协议(http/https)

恢复到本地存储(如需回退)

如果测试不成功,需要临时回退到本地存储,可以修改Ghost配置:

  1. 编辑配置文件:

    cd /var/www/ghost
    nano config.production.json
    
  2. 移除或注释掉storage部分,或将active值改为local:

    "storage": {
      "active": "local"
    }
    
  3. 重启Ghost服务:

    ghost restart
    

    sudo systemctl restart ghost
    

最佳实践与优化建议

性能优化

  1. 使用内网传输:如果您的Ghost博客和OSS在同一地域,使用内网Endpoint可以显著提高上传速度并节省流量费用。

  2. 配置CDN加速:为OSS绑定CDN可以提高全球各地访问图片的速度。

  3. 图片压缩:考虑在上传前压缩图片,或使用OSS的图片处理功能自动压缩图片。

成本优化

  1. 生命周期管理:设置OSS生命周期规则,自动将不常访问的文件转换为低频访问或归档存储类型。

  2. 定期清理:定期清理不再使用的媒体文件,减少存储费用。

  3. 监控使用情况:定期查看OSS的使用量和费用,及时调整策略。

安全建议

  1. 最小权限原则:为RAM用户仅授予必要的OSS操作权限。

  2. 定期轮换AccessKey:定期更新RAM用户的AccessKey,提高安全性。

  3. 启用OSS访问日志:开启OSS访问日志,便于追踪和分析访问情况。

  4. 设置防盗链:配置Referer防盗链,防止其他网站盗用您的图片资源。

迁移现有内容

如果您希望将现有的媒体文件从本地存储迁移到OSS,可以考虑以下方法:

  1. 手动上传:将content/images目录中的文件手动上传到OSS
  2. 使用ossutil工具批量上传
  3. 更新数据库中的URL引用(需要谨慎操作)

注意:迁移过程可能会影响现有内容的显示,建议在非高峰期进行,并提前做好完整备份。


希望本指南能帮助您成功配置Ghost博客使用阿里云OSS作为图床。如有任何问题,请参考阿里云OSS和Ghost的官方文档,或者联系相关技术支持。