05月20, 2016

网站迁移笔记 2016.05

Wordpress 在某种意义来说是十分强大的,能涵盖各方面的需求,而它丰富的插件也能让网站实现各种各样的功能。但对我来说,我觉得 Wordpress 太臃肿了,它十分的依赖数据库,导致了响应时间过慢,打开页面的时间长等问题(特别是 wp-admin)。感觉最近静态页面的博客很火,像 Hexo、octopress、ghost等等。静态页面的的最大特点就是快,而且能用上 CDN 的缓存。 于是我也抵不住诱惑,开始了博客的迁移。

正如上面所说的有这么多博客系统,用什么博客系统大家各有所爱,我一开始选用的是 Octopress ,到最后决定用 FireKylin ,它是一款基于 ThinkJS 2.0 开发的博客系统。至于我为什么要用它放在最后说,但这教程能适用于大多数的使用了 Markdown 的静态博客系统。

准备工作

再开始迁移之前,我觉得应该预留一段时间做好充分的准备工作。不然就会像我一样,因为漏了数据没有迁移,而导致博客在迁移过程中,需要新旧博客切换来切换去的。也应该有朋友留意到了我的博客这几天一时一个样了。2333

推荐先在本地环境搭建一次,调试过没问题了,再到线上环境搭建。

因为你要了解到新的博客的 URL 结构是怎样的,才能更好的去迁移。比如我的博客某文章之前的 URL 是 https://g.32ph.com/wordpress-use-cdn-real-ip/ 的,以前后变成了 https://g.32ph.com/post/wordpress-use-cdn-real-ip.html 。我们就可以开始去 Wordpress 的设置里面,把固定链接改成新博客的模样,以便后续的迁移工作 URL 不会变。

Wordpress 伪静态后需要在 nginx 的 conf 加入以下代码:

location / {
if (-f $request_filename/index.html){
                rewrite (.*) $1/index.html break;
        }
if (-f $request_filename/index.php){
                rewrite (.*) $1/index.php;
        }
if (!-f $request_filename){
                rewrite (.*) /index.php;
        }
}

那么改完 URL 后必然就会导致别人链接到你博客的地址会出现 404 了,这里献上一段 nginx 的重定向代码,大家可以自行修改。意思是当没有这个文件时,把 URL 加上 post/ 和 .html

if (!-e $request_filename){
     rewrite ^(.*)\/$ /post$1.html permanent;
}

迁移文章

这里不同的博客系统有不同的迁移方式,有些博客支持从 Wordpress 直接导入,例如 Firekylin。在这里介绍一个工具叫 exitwp ,能自动的把从 Wordpress 导出的 XML 文件转换成一份份的 Markdown 文件。如果使用了类似七牛的插件又想在新博客继续使用的话,那么直接打开这份 XML 把 uploads 文件夹的路径搜索替换成你在七牛的域名就好了。先替换,再生成 Markdown 。

https://github.com/thomasf/exitwp/

迁移评论

评论我用的是 Disqus ,我们可以直接在 Wordpress 插件里面搜索安装 Disqus ,插件里面就有导入评论到 Disqus 的功能,这时候我们之前更改固定链接的作用就发挥出来了。如果新旧博客 URL 不一致的话,在新博客是显示不了评论的。

那么到这里准备工作就基本完成了

安装新博客

我的博客需要运行在 Node.js 大于 4.0 的环境,在 Centos 里面安装这么新潮的玩意实在有点头疼,用 yum install 安装出来的版本只有 0.9 。安装 Octopress 还需要 Ruby ,而同样的用 yum install 安装出来的版本也是过旧的。而且编辑安装时要修改一下某个 openssl 的文件才能成功,具体我也忘了,大家可以自行 Google 。但因为我现在的博客不是纯静态的,所以可以直接运行在服务器上,并不需要 Ruby 环境,通常要的博客系统都可以在本地搭建好后,再把静态页面以 Git 的方式传到服务区上,高级点的玩法还可以用 git hook 的方式让服务器自动更新文件。

安装 Node.js 4.2.2:(32 位系统只需替换 64 为 86 就可以啦)

curl -o node-4.2.2.tar.gz https://nodejs.org/dist/v4.2.2/node-v4.2.2-linux-x64.tar.gz
tar -zxvf node-4.2.2.tar.gz -C /opt
mkdir /opt/npm-path
mkdir /opt/npm-path/npm-global
mkdir /opt/npm-path/npm-cache
echo "export NODE_HOME=/opt/node-v4.2.2-linux-x64
export PATH=${NODE_HOME}/bin:${PATH}">/etc/profile.d/node.sh
echo "export NPM_PATH_GLOBAL=/opt/npm-path/npm-global
export NPM_PATH_CACHE=/opt/npm-path/npm-cache
export PATH=${PATH}:${NPM_PATH_GLOBAL}/bin:${NPM_PATH_CACHE}">/etc/profile.d/npm.sh
chmod +x /etc/profile.d/node.sh
chmod +x /etc/profile.d/npm.sh
source /etc/profile.d/node.sh
source /etc/profile.d/npm.sh
exit
npm config set prefix /opt/npm-path/npm-global
npm config set cache /opt/npm-path/npm-cache
node -v
npm -v

环境搭建好以后就没啥好讲了,接下来看官方的指引就好了:

https://github.com/75team/firekylin/

CDN 优化

博客上了静态页面以后。我们就可以去 CDN 控制台的设置页面打开全站缓存了。虽然我的不是全静态,但也可以通过 CDN 帮我变成纯静态。我是这样设置的:

  • /post/* 缓存一年 //这是文章内容页
  • /static/upload/* 缓存一年 //这是文件目录
  • 全站缓存 2 小时

    感谢作者的提醒:Firekylin 网站使用此步骤,会导致用户直接访问静态化的页面时,没办法拿到静态资源而一直刷新。

还有就是尽量把 JS 和 CSS (特别是放在 header 的),放在同一个域名下,因为现在制约我们的已经不是网速了。这里引用一下 Terry 的博客:

虽然说公共 CDN 库在全球每个地区都有 CDN,但是有一个不容忽视的问题是 DNS 解析 / TCP 握手 / TCP 慢启动等开销,会导致用户首页访问白屏时间变长。之前一直不察觉这个问题,借助 Chrome 的开发者工具发觉的确开销太大了,最后花了一晚上优化这个问题。
引用:https://t.32ph.com/technology-diary/move-static-file-in-one-domain/

为什么我选用了 FireKylin ?

因为我感觉这个博客系统 简介、排版好、速度快 ,这三样刚好满足了我对一个博客系统的要求。而且使用起来也没有纯静态博客系统那么复杂。上图:

  • 界面简洁,响应式设计
    index

  • 博客后台首页:
    admin

  • 博客后台编辑器(Markdown):
    markdown

  • 还能设置两步验证登录:
    adminlog

最后感觉现在的博客打开速度快了不少~~~

本文链接:https://g.32ph.com/post/wordpress-move-to-firekylin.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。