Ghost博客配置阿里云OSS作为图床完整指南
本文档提供了将Ghost博客的媒体存储从默认的本地存储更改为阿里云OSS的完整步骤。通过使用阿里云OSS作为图床,您可以减少服务器硬盘空间使用,并利用阿里云OSS的高可用性和CDN加速能力。
目录
准备工作
在开始配置之前,请确保:
- 您已经有一个正常运行的Ghost博客(您提到位于
/var/www/ghost
目录) - 您有对Ghost博客目录的访问权限(使用bruce用户)
- 重要:在进行任何配置更改前,请备份您的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存储桶
- 登录阿里云OSS控制台
- 单击左侧的Bucket列表,然后单击创建Bucket
- 在创建Bucket页面配置以下参数:
- Bucket名称:全局唯一的名称,建议使用有意义的名称,如
your-blog-images
- 地域:选择与您的ECS服务器相同的地域,可以使用内网传输,节省流量费用
- 存储类型:标准存储(适合图片等频繁访问的文件)
- 读写权限:私有(推荐,提高安全性)
- 版本控制:关闭(图片存储通常不需要版本控制)
- 服务端加密:根据需要选择
- 实时日志查询:根据需要选择
- 定时备份:根据需要选择
- Bucket名称:全局唯一的名称,建议使用有意义的名称,如
- 阅读并同意服务协议,然后单击确定
2. 创建RAM用户并获取AccessKey
为了安全起见,建议创建专门的RAM用户来访问OSS,而不是使用主账号的AccessKey。
创建RAM用户
- 登录RAM控制台
- 在左侧导航栏,选择身份管理 > 用户
- 单击创建用户
- 设置用户信息:
- 登录名称:如
ghost-oss-user
- 显示名称:如
Ghost OSS User
- 在访问方式区域,选择编程访问,即启用AccessKey
- 登录名称:如
- 单击确定,创建RAM用户
为RAM用户授权
- 在用户列表中,找到刚创建的用户,单击添加权限
- 在添加权限面板,选择系统策略,搜索并选择
AliyunOSSFullAccess
(或者根据最小权限原则,创建自定义权限策略) - 单击确定,完成授权
获取AccessKey
- 在用户列表中,找到刚创建的用户,单击用户名
- 在认证管理页签下的AccessKey区域,单击创建AccessKey
- 阅读AccessKey使用场景及使用建议,选择对应使用场景后,勾选我确认必须创建AccessKey,然后单击继续创建
- 根据界面提示完成安全验证
- 在创建AccessKey对话框中,务必保存AccessKey ID和AccessKey Secret,这些信息只会显示一次
3. 配置Bucket访问权限
设置跨域访问CORS(必要)
为了让Ghost博客能够正常上传和访问OSS中的图片,需要配置跨域访问规则:
- 在Bucket列表中,单击您创建的Bucket名称
- 在左侧导航栏,选择权限管理 > 跨域设置
- 单击创建规则,配置以下参数:
- 来源:输入您的Ghost博客域名,如
https://secretplan.cn
- 允许Methods:选择
GET
、POST
、PUT
、DELETE
、HEAD
- 允许Headers:输入
*
- 暴露Headers:输入
ETag
、x-oss-request-id
- 缓存时间:可设置为86400秒(1天)
- 来源:输入您的Ghost博客域名,如
- 单击确定,完成跨域设置
配置防盗链(可选但推荐)
为了防止其他网站盗用您的图片资源,建议配置防盗链:
- 在Bucket列表中,单击您创建的Bucket名称
- 在左侧导航栏,选择权限管理 > 防盗链
- 单击设置
- 在添加Referer框中,添加允许访问的域名,如
*.secretplan.cn
- Referer白名单为空时,是否允许空Referer访问:建议选择不允许
- 单击确定,完成防盗链设置
绑定自定义域名(可选)
如果您希望通过自定义域名访问OSS中的图片,可以进行以下配置:
- 在Bucket列表中,单击您创建的Bucket名称
- 在左侧导航栏,选择传输管理 > 域名管理
- 单击绑定域名
- 输入您的自定义域名,如
images.secretplan.cn
- 如需开启HTTPS访问,可以配置SSL证书
- 单击确定
注意:绑定自定义域名前,需要先在您的DNS服务商处添加CNAME记录,将自定义域名指向OSS的默认访问域名。
安装Ghost OSS适配器
方法一:使用NPM安装(推荐)
登录到您的服务器,并切换到bruce用户:
sudo su - bruce
进入Ghost博客目录:
cd /var/www/ghost
安装ghost-oss-store适配器:
npm install ghost-oss-store
创建存储适配器目录(如果不存在):
mkdir -p content/adapters/storage
创建OSS存储适配器文件:
echo "module.exports = require('ghost-oss-store');" > content/adapters/storage/oss-store.js
方法二:手动安装
如果您希望手动安装或者自定义适配器,可以按照以下步骤操作:
登录到您的服务器,并切换到bruce用户:
sudo su - bruce
进入Ghost博客目录:
cd /var/www/ghost
创建存储适配器目录(如果不存在):
mkdir -p content/adapters/storage/oss-store
从GitHub克隆ghost-oss-store仓库:
cd content/adapters/storage git clone https://github.com/MT-Libraries/ghost-oss-store ./oss-store
进入oss-store目录并安装依赖:
cd oss-store npm install
返回到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 IDaccessKeySecret
:您的RAM用户AccessKey Secretbucket
:您创建的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. 上传测试
- 登录到您的Ghost管理后台(通常是
https://secretplan.cn/ghost
) - 创建一篇新的文章或页面
- 点击编辑器中的图片上传按钮,上传一张测试图片
- 观察上传过程是否顺利完成,没有出现错误提示
2. 检查图片URL
- 上传完成后,检查图片的URL
- 右键点击图片,选择"复制图片地址"或"复制图片链接"
- 检查URL是否包含您配置的OSS域名
3. 验证OSS存储
- 登录阿里云OSS控制台
- 进入您为Ghost配置的Bucket
- 在文件列表中,查找刚才上传的图片文件
- 确认文件已成功上传到OSS,并且路径与配置的前缀一致
常见问题与故障排除
上传失败
如果上传失败,请检查:
Ghost日志文件中的错误信息:
cd /var/www/ghost tail -f content/logs/ghost.log
确认OSS配置信息正确:
- AccessKey ID和Secret是否正确
- Bucket名称是否正确
- 地域和Endpoint是否匹配
检查RAM用户权限:
- 确保RAM用户有足够的OSS操作权限
网络连接:
- 确保服务器可以连接到OSS服务
- 如果使用内网Endpoint,确保服务器和OSS在同一地域
图片无法显示
如果图片上传成功但无法显示,请检查:
跨域设置:
- 确保OSS的CORS设置允许您的网站域名访问
防盗链设置:
- 如果配置了防盗链,确保您的网站域名在白名单中
文件权限:
- 确保上传的文件在OSS中设置了正确的读取权限
URL格式:
- 检查URL是否完整,包含正确的协议(http/https)
恢复到本地存储(如需回退)
如果测试不成功,需要临时回退到本地存储,可以修改Ghost配置:
编辑配置文件:
cd /var/www/ghost nano config.production.json
移除或注释掉storage部分,或将active值改为local:
"storage": { "active": "local" }
重启Ghost服务:
ghost restart
或
sudo systemctl restart ghost
最佳实践与优化建议
性能优化
使用内网传输:如果您的Ghost博客和OSS在同一地域,使用内网Endpoint可以显著提高上传速度并节省流量费用。
配置CDN加速:为OSS绑定CDN可以提高全球各地访问图片的速度。
图片压缩:考虑在上传前压缩图片,或使用OSS的图片处理功能自动压缩图片。
成本优化
生命周期管理:设置OSS生命周期规则,自动将不常访问的文件转换为低频访问或归档存储类型。
定期清理:定期清理不再使用的媒体文件,减少存储费用。
监控使用情况:定期查看OSS的使用量和费用,及时调整策略。
安全建议
最小权限原则:为RAM用户仅授予必要的OSS操作权限。
定期轮换AccessKey:定期更新RAM用户的AccessKey,提高安全性。
启用OSS访问日志:开启OSS访问日志,便于追踪和分析访问情况。
设置防盗链:配置Referer防盗链,防止其他网站盗用您的图片资源。
迁移现有内容
如果您希望将现有的媒体文件从本地存储迁移到OSS,可以考虑以下方法:
- 手动上传:将
content/images
目录中的文件手动上传到OSS - 使用ossutil工具批量上传
- 更新数据库中的URL引用(需要谨慎操作)
注意:迁移过程可能会影响现有内容的显示,建议在非高峰期进行,并提前做好完整备份。
希望本指南能帮助您成功配置Ghost博客使用阿里云OSS作为图床。如有任何问题,请参考阿里云OSS和Ghost的官方文档,或者联系相关技术支持。