我刚刚完成了将这个博客从WordPress迁移到Ghost的工作。
为什么
WordPress在很长一段时间内为我提供了很好的服务,但它导致了一个难以维护的设置。为了获得相当基本的功能,我使用了一个复杂的自定义主题和少量的插件,这些都需要保持更新。
在WordPress编辑器中写文章也变得越来越烦人,尤其是当我使用的几乎所有其他工具都支持Markdown时。
最后,当主题被移除时,我不得不做一些事情:Suffusion不再可用。在这一点上,寻找和配置一个新的主题(并升级我所有的插件)似乎和寻找一个新的博客工具一样费劲。
我环顾四周,Ghost似乎不错。我知道其他人对它非常满意,而且有一条从WordPress迁移的清晰路径。它的功能也很齐全,速度也够快,我不需要安装很多插件(就像我用WordPress那样)。
我是如何迁移的
迁移并不太痛苦,但它涉及到。希望通过记录我的步骤,我可以在将来帮助别人。
运行Ghost
我需要的第一件事是运行Ghost的方法。我不想担心安装Ghost的所有依赖项,所以我决定通过Docker运行它。这样一来,我也可以通过改变Docker镜像的版本来升级。我设置了一个init脚本,基本上就是做这个。
/usr/bin/docker run \
-e NODE_ENV=production \
-p 127.0.0.1:2368:2368 \
-v /var/www/ghost:/var/lib/ghost \
--log-driver=syslog \
--rm \
ghost:0.11.2
这在127.0.0.1 上运行ghost,并将/var/www/ghost 挂载到容器中。这样一来,我就可以在不同的Docker容器中保留我的文件。然后,我用Apache将其前置。
配置Ghost
-
我决定暂时坚持使用默认的主题(Casper)。然后,我浏览了所有的设置,配置了明显的设置(标题、描述等)。我还在页脚添加了谷歌分析。
-
我打开了
Dated Permalinks。方便的是,这个设置使所有的URL都与我的WordPress设置相同,所以我不必添加一堆重定向。 -
我想要语法高亮,但我在网上找到的大多数信息都涉及编辑Ghost主题(或切换到一个自定义主题)。我真的不想编辑主题,因为我希望能够很容易地利用升级(并且不必将我的差异应用于未来版本的文件)。最终,我找到一个帖子,告诉我如何通过
Code injection。Ghost上的语法高亮。我使用了现有的最新版本,所以我的标题看起来像。
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.6.0/styles/github.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.6.0/highlight.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.6.0/languages/clojure.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.6.0/languages/groovy.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<style>
pre {
word-wrap: normal;
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
font-size: 0.7em;
line-height: 1.3em;
}
pre code, pre tt {
white-space: pre;
}
</style>
- 我也设法为Disqus的评论做了类似的事情。我没有编辑主题,而是在
Code injection脚注中加入了这个,除了他们的javascript块。
<script>
$("section.post-content").after('<div id="disqus_thread"></div>');
</script>
迁移帖子
我在WordPress中安装了Ghost插件,并将我的数据导出为JSON文件。从html到markdown的转换不是很顺利(尤其是代码块)。我钻研了这个插件,甚至在GitHub上开了一个问题(https://github.com/TryGhost/wp-ghost-exporter/issues/7),但这个项目似乎已经死了。
与其手工修复所有的markdown,我发现另一个转换器做得更好。Pandoc。我写了一个小脚本来使用现有的导出,但用更好的转换来替换markdown。
# reformat_markdown.rb
require "json"
require "open3"
def main
parsed = JSON.parse(File.read(ARGV.first))
parsed["data"]["posts"].each do |post|
post["markdown"] = fix_markdown(html2markdown(post["html"]))
end
puts parsed.to_json
end
def html2markdown(html)
Open3.popen3("pandoc -f html -t markdown") do |stdin, stdout, stderr, wait_thr|
stdin.write(html)
stdin.close
return stdout.read
end
end
def fix_markdown(markdown)
markdown.gsub(/ \{lang="(.*?)"\}/m, '\1')
end
main if __FILE__ == $0
然后,我把这个JSON文件加载到Ghost中。大多数帖子看起来都很好,但我确实不得不修改一些帖子的格式。然而,我并没有看完每一个帖子,所以很可能一些旧的帖子有不正确的格式。
迁移评论
我决定把我的评论转到Disqus,以方便使用。我按照手动导入的说明,从WordPress导出我的数据,然后导入到Disqus。
结论
到目前为止,我对Ghost非常满意。写作体验真的很好(并排的markdown编辑器和预览)。而且我已经简单地通过提高docker镜像的版本号进行了升级。
我确实希望我可以用twitter、github等链接来定制我的作者页面。我还想在侧边栏上添加关于我的额外信息和突出的文章。我可能会考虑换成一个能提供这些功能的主题。