Monster - 用Ghost写博客的终极利器

是时候从Buster转到Monster了

我最先开始用Ghost写博客时,用来生成静态页面(并发布到aimingoo.github.io)的工具是Buster。首先它确实不太好用,其次用它生成(generate)出来的页面还需要做许多的后续处理才能使用。由于这个缘故,我写了Monster这个工具的第一代产品并放在了我的ghost-utils仓库中,名为makesite.sh

makesite.sh其实是类似Buster的。由于采用了相同的实现方案,所以也就有着Buster的最根本的问题:每次都要对全站做重新生成。为此,我另外又写了一个脚本,名为updatesite.sh,用来实现增量生成基于Ghost的静态网站。

再之后,将这两个脚本合在一起,就变成了:

Monster,一个同时支持全量和增量生成Ghost静态网站的工具。

这是一个用Bash写开源项目,Github地址在这里: https://github.com/aimingoo/monster

注:makesite.sh在早期就是Buster一个壳,从v1.0.5版本开始直接使用wget而不再依赖Buster。

Monster的功能

  • 全量和增量生成Ghost静态网站
  • 可以在本地预览或向github.io部署生成的网站
  • 支持生成并不Host在github.io上的网站
  • 支持同时管理多个网站,独立配置
  • 支持在url中使用缩短路径的风格(使用更精减的ghost slug)
  • 支持Ghost的多作者(multi-author)功能
  • 支持基于github issues的评论管理(面向gitment的工具功能)

安装Monster

> brew install aimingoo/repo/monster

快速上手

# 了解ghost运行的本地地址(例如下面的127.0.0.1:2368)
> npm start
Ghost is running in development... 
Listening on 127.0.0.1:2368 
...

# 如果你已经在Github上创建了自己的pages,那么你应该先将它clone到本地
#  - (设网站domain为xxxx.github.io)
> git clone 'https://github.com/xxxx/xxxx.github.io'

# 配置初始化(用上面的项目作为工作目录)
#	- 可以不使用xxxx.github.io,而使用自己的domain,例如your.site.com
#	- 路径"Ghost local .db file"可用如下命令查看(或先略过它):
#		> grep -Fe '.db' ${GHOST安装目录}/config.js
> cd xxxx.github.io
> monster --init
Your Github name or domain: xxxx
Your Github access token, or Enter to skip: 
Your Ghost local account(e-mail), or Enter to skip: 
Your Ghost local .db file, or Enter to skip: 
Your Ghost site, or Enter set default [localhost:2368]: 
...

# 全站生成
> monster --generate

# 更新
> monster update

# 预览(ctrl+c退出)
> monster preview
Serving HTTP on 0.0.0.0 port 8000 ...

# 发布/部署(在生成全站之后)
> monster --deploy-now
# 或发布更新(在使用'monster update'之后)
> monster update --deploy-only

# 其它

# 直接生成全站并发布
> monster --generate --deploy-now
# 或在更新后直接发布
> monster update --deploy-now

工作目录

在使用monster --init初始化之后,当前目录就被Monster视为工作目录。

Monster会根据当前目录下的.monster配置工作,因此只需要为多个site建立不同的目录,就可以管理multi-domain了。

Monster会操作和维护当前目录下的./static目录来生成静态文件,你可以通过上述的.monster配置来改变这个目录的位置。

最后,当前目录下的monster.log.sqlitedb也是由Monster来管理的。你可以手工编写一个名为patchme.sh的文件来实现一些复杂的操作,如果它存在,那么Monster会调用并管理它。

Monster的多数操作信息会直接出现在控制台,只有monster --generatemonster update会操作monster.log文件,前者总是覆盖整个文件,而后者是追加日志。

Monster会维护.gitignore.git/info/exclude文件来避免git将多余的文件push到仓库。所以,上述./static目录以及.monster.sqlitedbpatchme.shmonster.log等文件也已经加入了git的ingore list。

高级特性

关于Monster的Git issues评论、short path、sync、multi author等特性,请参考:

阅读列表