如果你准备用Ghost做博客,先别急着买服务器,我去年脑子一热,直接上了官方推荐的DigitalOcean最低配,结果第一个月就崩了三次,后来换了配置,改了策略,才算稳住,今天把这几个坑掰开揉碎讲清楚,能帮你省下至少两千块冤枉钱和两周的调试时间。
坑一:盲目跟风官方一键部署
Ghost官网推荐DigitalOcean一键部署,看着简单,点几下就完事,但那个默认配置是给临时演示用的,真上线扛不住,我第一周流量刚过300,CPU直接飙到95%,页面加载要8秒。

Ghost建站一年,我踩过的五个大坑(附解决方案)
解决方案: 别用最低配的2核1G,至少4核4G起步,更推荐用Vultr或Linode,同样价格配置能高20%,部署时别偷懒,手动用Docker装,官方一键脚本会绑死版本,后面升级特别麻烦,手动Docker部署的步骤就三行:
docker pull ghost:5-alpine
docker run -d --name ghost -p 2368:2368 -v /data/ghost:/var/lib/ghost/content ghost:5-alpine
记得挂载持久化卷,不然重新部署数据全没了——我吃过这个亏,凌晨三点恢复备份,差点把键盘砸了。
坑二:以为SQLite够用
Ghost默认用SQLite,小站没问题,但我写到第200篇文章,标签、会员、自定义页面上来之后,后台动不动就超时,查了日志,全是SQLite的锁冲突。
解决方案: 用户量超过1000或者文章超过300篇,立刻切MySQL 8.0,别用MariaDB,Ghost对MySQL的兼容性更好,迁移也很简单:导出SQLite数据,用ghost migrate命令转成MySQL格式,注意数据库字符集一定要设成utf8mb4,不然emoji和生僻字会变成问号,我帮朋友迁移时没注意,他一百多篇带😊的文章全废了,最后用Python脚本挨个修编码,折腾了三个通宵。
坑三:主题开发踩了Webpack的雷
Ghost的主题用Handlebars模板,看起来简单,但自定义功能必碰Webpack,官方文档说用“ghost install”会自带编译,实际根本不是,我改了个导航栏样式,结果Webpack版本冲突,编译一次要5分钟,而且报错信息全是英文乱码。
推荐配置: 别用官方自带的编译工具,改用Vite,在主题根目录下装vite和@tryghost/admin-api,配置个简单的watch模式:
{
"scripts": {
"dev": "vite build --watch",
"build": "vite build"
}
}
改了文件自动刷新,两秒就编译完,所有自定义CSS和JS都放进assets/built/目录,别嵌套到模板里,否则升级主题版本时会丢失修改,这是我从Ghost社区一个老外帖子里学的,他比我惨,改了1000行代码直接覆盖没了。
坑四:邮件服务用默认方案
Ghost自带的mailgun配置,新手照着填就能用,但那个免费额度只有1000封/月,我推了一篇文章,订阅用户260人,结果第三天邮件队列堵了800多封,全被Mailgun封了域名。
推荐方案: 改用SendGrid的免费计划,每月可发100封免费(其实够用),超出后按量计费,比Mailgun便宜一半,配置在Ghost的config.production.json里加这一段:
"mail": {
"transport": "SMTP",
"options": {
"host": "smtp.sendgrid.net",
"port": 587,
"auth": {
"user": "apikey",
"pass": "你的SendGrid API Key"
}
}
}
注意,SendGrid的API Key创建时要勾选“Full Access”权限,不然发不了会员邮件,我之前只开了发送权限,结果成员订阅确认邮件发不出去,用户注册了收不到验证,投诉到差点被封站。
坑五:忽略了图片存储的长期成本
Ghost默认把图片存在本地磁盘,时间一长占空间不说,迁移服务器时还要手动复制,我网站写了半年,图片文件夹快15GB,备份都传不上去。
长期解决方案: 用S3兼容的对象存储,比如Cloudflare R2,R2的免费额度是10GB存储+每月100万次请求,对小博客完全够,配置也不难:
- 在Cloudflare创建R2存储桶,设置公开访问。
- 在Ghost的config.production.json里加:
"storage": {
"active": "s3",
"s3": {
"accessKeyId": "你的Key",
"secretAccessKey": "你的密钥",
"region": "auto",
"bucket": "你的桶名",
"assetHost": "https://你的自定义域名.com"
}
}
记得给存储桶设置生命周期规则,旧版本图片自动删除,不然手删会疯,我去年手动清理了三天,还误删了首页的封面图,找备份又花了俩小时。
长期维护的三条铁律
-
每周备份数据库和图片:用crontab执行脚本,每天凌晨自动打包上传到另一个R2桶,备份保留30天,过期的自动删,我有个血的教训:Ghost升级到5.0时数据库结构变了,没备份的话就等着从头重建吧。
-
每月检查Node.js和Ghost版本:Ghost更新频率高,安全漏洞修复很快,但不要追新,等新版本发布两周后再升,让社区先踩坑,升级前一定先测试环境,我有次直接上最新版,结果会员系统表单提交报500,回滚花了半天。
-
善用官方插件,少自己造轮子:Ghost市场的插件虽少,但够用,Member Subscription”插件,配合Stripe就能做付费会员,别自己写支付接口,我见过一个博主自己写PayPal集成,上线第一天就被刷了50单退款,代码里没校验签名。
最后说一句:Ghost确实是好CMS,但它的坑都在细节里,记住以上五点,你至少能省下两周的调试时间和两千块的服务器浪费,如果还有什么没写到的,评论区问,我尽量回,毕竟,踩过坑的人,最知道怎么绕过去。
发表评论