详解Monster的初始化及配置

尽管Monster并不强制你创建与初始化工作目录,并且也不强制依赖Ghost来工作,但是“Ghost + 工作目录”仍然
是Monster的最佳使用场景。

关于在没有Ghost的情况下使用Monster的说明请看这里:将Monster用作网站离线下载的方法

预备工作

  • 你需要先启动Ghost并了解它运行在的本地地址
> npm start
Ghost is running in development... 
Listening on 127.0.0.1:2368 
...

Ghost可以运行在不同的模式下,上面的是development模式,这种情况下它的缺省端口是:2368

另外,你需要找到Ghost运行的目录中的sqlite数据库文件。假设你的Ghost运行的目录是在${GHOST},那么这些数据文件的位置是在:

> grep -Fe '.db' ${GHOST}/config.js
filename: path.join(__dirname, '/content/data/ghost.db')
filename: path.join(__dirname, '/content/data/ghost-dev.db')
filename: path.join(__dirname, '/content/data/ghost-test.db')

根据你启动的Ghost的版本不同,选择上面的一个库文件即可(一般是ghost-dev.db)。

  • (discard)你需要安装Buster并确信它可用

在Monster早期版本中是调用Buster来生成全站的,但从v1.0.5版本开始就移除了对Buster的依赖。

  • 你需要确信mac环境是否能运行Monster

Monster依赖mac环境上的一些工具。如果你使用brew,那么可以用下面的命令来安装它:

> brew install wget jq curl
...

其它还会使用到的工具包括sqlite3sumgitsqlite3应该已经在安装Ghost时安装过了,而sum是MacOSX原生自带的;多数情况下,建议你安装git,使用brew install git即可。

注:

Monster主要是用于生成静态网页,只有当你使用它的部署(deploy)功能时,才会用到git。所以事实上git并不是必须安装。

Monster使用Git api访问github issues,所以在使用评论相关的功能时并不要求安装git客户端。

  • 最后,你需要安装Monster

有两种方法安装Monster:

# 使用Brew安装
> brew install aimingoo/repo/monster

# 使用Git仓库安装
> git clone https://github.com/aimingoo/monster
> ln -s "$(pwd)/monster/libexec/monster.sh" /usr/local/bin/monster
> chmod +x /usr/local/bin/monster

初始化及配置

# 创建一个目录,并在该目录中运行如下命令
> monster --init
Your Github name or domain : aimingoo
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]: 
File .monster saved.
File .gitignore updated.

第一项配置Github name or domain总是必须输入的。它可以是一个名为xxxx.github.io的域名,或只是xxxx这样的域名前缀(亦即是Github用户账号名),此外还可以是一个非github的域名,例如your.site.com

如果domain是无效的

你可以使用任何domain——哪怕它不是真实的值。Monster的基本逻辑是:

  • GENERATE:下载一个SITE上的网页,放在STATIC_PATH中;并尝试
  • RESET_DOMAIN:将网页中有关SITE的信息替换成DOMAIN;以及
  • DEPLOY_NOW:将STATIC_PATH中的文件复制到当前目录,并尝试将当前目录作为Git仓库来部署。

所以只要不启用RESET_DOMAIN(传入--reset-domain=false参数或者修改.monster配置),那么无效的DOMAIN是不影响Monster的使用的。

如果domain是空值

在调用monster --init并输入缺省配置时,是不能使domain值为空的。

你可以编辑.monster以使该参数值为空,但这样的配置仅对update工作模式是有意义的。这会缺省使用<GITHUB_USER>.github.io来作为DOMAIN值,如果在update工作模式中调用了--deploy-now--deploy-only--reset-domain,那么该值也会通过命令行参数传入makesite.sh,以确保后者可用。

你不应当使.monster文件中的DOMAINGITHUB_USER值同时为空值。——如果是这样,你就必须总是从命令行中传入参数了。

关于domain的协议

由于Monster并不访问你的domain(它只是更新本地静态网页中的内容),所以在配置文件中并不需要指定domain使用的协议,例如httpshttp。但有一个极小极小的例外,如果:

  • 你使用了Git issues来作评论,并且
  • 你的domain并没有host在xxxx.github.io上,并且
  • 你还打算使用Monster的update --sync-issue来管理它,

那么你需要修改.monster中的PROTOCOL参数,缺省时它的值是https

如果没有.monster文件

如果你没有调用monster --init来初始化一个.monster文件,或者你误删除了它,那么你事实上仍然是可以使用Monster的。

这种情况下,对于generate工作模式来说,你必须从命令行通过--domain传入DOMAIN参数;对于update工作模式来说,则必须传入--db。当然你还可能需要传入其它在运行中要用到的参数,例如GITHUB_USER

配置文件.monster的详细说明

## Github domain
#  - (参见上文)
DOMAIN="..."

## Ghost .db file path
# - update工作模式下的相关功能依赖该配置
DB="/User/..."

## Ghost site address
# - 要静态化(下载)的网站,可以是本地Ghost或远端的任何网址
# - 可以是任何网站(不是Ghost的网站,甚至不是博客)
SITE="http://..."

## Github account, and rate of api access
# - 你的Github账号,是指当前工作目录对应的xxxx.github.io
GITHUB_USER="Your name"
# - 你需要在Github后台为Git client创建一个Access token
GITHUB_TOKEN="Access token"
# - 每次Github API访问之后sleep的时间(单位为秒);当值为1时,意味着每分钟不会超过60次访问
GITHUB_APIRATE=1
# - 当读取Gitment等博客评论时,每次用Github取数据时的页大小(缺省为每页100条记录)
GITHUB_PAGESIZE=100

## Other
# - 你在本地Ghost中的登录帐号
EMAIL="..."
# - 特殊情况下需要用到的domain的协议值(参见上文)
PROTOCOL="https"

## Advertisement token string for your site
# - 一个标记字符串,极少使用(仅在update功能中用于检查特定文件中是否包含该字符串,以确保整个内容有效)
AD_TOKEN=""

## Default directory of static files
# - 生成静态文件的路径
# - (对于Monster的preview工作模式来说,必须使用该配置而不能用命令行传入参数)
STATIC_PATH="./static"

## Default behavior
# - 在GENERATE阶段中显示更多信息
GENERATE_INFO=false
# - 在update工作模式下,强制更新列表类网页
SYNC_REMOVED=false
# - 在操作过程中是否移除static目录中的文件名的'?xxxxxx'版本后缀
PATCH_VERSION=true
# - 是否启用RESET_DOMAIN阶段
RESET_DOMAIN=true
# - 是否启用SHORT_PATH阶段
SHORT_PATH=false
# - 是否启用CHECK_STATIC阶段
CHECK_STATIC=true

## Pick more files
# - 是否拾取静态化的云标签文件/tag-cloud
PICK_STATIC_TAGCLOUD=false
# - 是否拾取静态化的profile文件/profile-xxx
PICK_STATIC_PROFILE=false
# - 是否拾取静态化的归档文件/archive-post
PICK_ARCHIVES_POST=false
# - 是否拾取/robots.txt
PICK_ROBOTS_TXT=true
# - 是否拾取sitemap文件/sitemap-*
PICK_SITEMAP=true
# - 在update工作模式下,强制尝试上述PICK_xxxx和索引页等文件
FORCE=false

## Other override
# - 在SHORT_PATH阶段中不处理的目录名
IGNORE_LIST=("archives-post" "author" "page" "rss" "tag" "assets" "content" "shared")
# - 在PATCH_VERSION阶段中需要处理的目录名
VERDIR_LIST=("assets" "shared" "public")