8

我的博客从 Ghost 迁移回 Wordpress | 优化记录

 1 year ago
source link: https://luolei.org/migrate-from-ghost-to-wordpress
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

我的博客从 Ghost 迁移回 Wordpress | 优化记录

发布时间: 2019-07-06



如你所见,我的博客「罗磊的独立博客」在2019年7月,间隔3年,又一次进行了大改版。

如果你在大陆地区,网络不太差的话,打开这个博客,应该有挺大的概率,算得上是「秒开」体验。

过去很长时间,我的博客都是用Ghost作为我的博客平台,几年前,也做了几款 Ghost 的主题,其中的 Yasuko 由于不错的阅读体验,还被网友改成了Wordpress 主题。

为什么我要放弃Ghost

Ghost 轻巧、简单、速度的特性,的确也吸引了不少程序员做为轻量的的博客后台,我算是从 Ghost 刚发布就开始使用,过去这五年,只升级过几次,也没做啥定制开发啥的,毕竟速度够快、功能够用,也没有啥折腾的必要。

但是这两年,我的博客内容从过去简单的文字为主的博客,变成了图文、视频为主的自媒体,Ghost这种轻量博客后台越来越不满足自己的需要。这个星期,抽了几天时间,从 Ghost 迁移回了 Wordpress,也进行了大量优化。目前呈现给大家的,就是我的新博客。

今天这篇文章,也整理一下这次迁移、优化过程中的一些经验和分享。中间参考了许多已有的教程、解决方案,根据自己的需求,略有调整。

为什么不自己写主题

我不熟PHP,且现在已经没时间折腾代码这些啦,这次直接购买的某国内工作室主题,比较符合国内使用习惯,看完代码后,表示幸亏没挖坑给自己写主题,WP的主题生态还是挺好的。

服务器硬件

  • Web Server:阿里云 深圳 2U/4G/5M
  • DNS解析:腾讯云 Dnspod 付费个人专业版
  • 数据库:腾讯云数据库 MySQL
  • 海外反向代理:阿里云国际版 香港 1U/1G/40G/带宽:100M/1TB
  • 静态资源服务器1: 阿里云国际版 香港 1U/1G/40G/带宽:100M/流量:1TB(同上)
  • 静态资源服务器2: 阿里云国际版 上海 1U/1G/40G/带宽:30M/流量:1TB
  • 静态资源服务器3: Linode JP2区 1U/1G/40G /带宽:理论1Gbps / 流量:理论上没限制

域名都有备案,服务器放深圳,速度和延迟都尚好,国外访问解析到香港阿里云IP,通过反向代理转发到深圳服务器。这么做是因为香港服务器本身网络不稳定(有被墙的风险),但是香港机房到深圳机房之间的线路相对来说比较稳(理论上如果是同家云的话,还能走内网)。

原本有考虑过主站直接套腾讯云的动态CDN加速,测试后发现CNAME和MX记录不能同时共存,导致我的域名邮箱无法正常接发邮件,无奈放弃。

之所以弄三个静态资源服务器,是因为我的博客图文很多,每个月流量都过T,对比过国内的CDN的报价,不管是哪一家,流量费用都太高,成本吃不消。三台服务器分别位于香港、上海、日本,通过 DNS 境内外负载,国内不同线路负载,分担了服务器压力。

三台静态服务器之间,通过 rsyncd 增量同步,三个服务器都采用相同的 Linux 版本,管理后台,APP路径什么都统一,所以管理起来也很方便。

之所以不放微博之类的图床,一个是因为静态资源种类很多,各种文件都有,另外不想被人审核。

由于还有其他数据库,后台接入的阿里云数据库,新建一个表就好了,其他的就不用操心了。

数据库备份与迁移

转换到WP XML之前,先在Sublime里批量替换了Ghost JSON 里的许多lazyload的<image>中的URL,懒得后期去 MySQL 里改了。

Web优化

一开始装上WP的时候,再不做任何优化的情况下,速度感动得吐血,TTFB时间能到3S,属于没法用的程度。后来上了Memcached后,TTFB下降到1-2S以内,虽然访问起来速度可以接受,但是依旧慢,并且PHP + Memcached 的方案,在高并发的场景下,依旧会有大量query,CPU会爆。

wp-1.jpg

最终上了OpenResty + Redis 的解决方案,目前TTFB是10ms+,达到秒开级别,并发测速时,CPU负载低(毕竟无Query了),由于上了缓存,博客的阅读量统计需要改成 ajax 形式,难度不大,有现成分享方案。

wp-2.jpg

有nginx缓存的情况下,全国测速大概这样的情况,比较欣慰,第一次见到自己博客一片绿。

静态资源优化

HTTP2,Brotli 这些顺便开启了,优化效果比较轻微,聊胜于无。

WebP这个折腾了比较多时间,由于想无缝切换,不想在前端做WebP判断,直接通过Head中的Accept头,Nginx自动判断返回.webp文件,nginx配合lua和 cwebp后端自动生成web图片。

大概就是原图 demo.jpg > demo.jpg.webp,用户访问时,URL依旧是 /demo.jpg,但是实际返回的是 demo.jpg.webp图片,亲测在压缩75%质量的情况下,体积减少至少50%,极大地节约了流量,降低了服务器压力。

待解决的问题

  • nginx 模块 lua-nginx-module 编译 失败,涉及gcc相关error,有坑
  • Wordpress配合nginx-helper插件处理nginx缓存,没有方便的接口清缓存更新页面,想crontab定时清理某些页面缓存有点麻烦。
  • 谷歌 AMP
  • Telegram Instant View: TG被Block,大陆服务器的所有网站都无法直接抓取,Instant View的爬虫语法比较磨人。

总结

这次从 Ghost 迁移到 Wordpress,整体难度不大,在还没做前端JS等优化的情况下,目前网站的效果已经算比较不错了。

迁移的过程中也看了看主题PHP代码,感觉Wordpress还是可以的,生态成熟、插件多,自定义接口也多,开发定制功能啥的也不难,以后接入公众号、小程序、社群这些也都方便。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK