Ghost up and running
2016-06-28

博客这些年来衰退得很厉害,社区在这方面的投入也大不如前。如果非要挑一个的话,Ghost 也许是不错的选择。本文是一篇入门指引,旨在一步一步把 Ghost 跑起来。

本文篇幅有限,如遇问题最好的参考还是官方文档

安装 Node.js 和 cnpm

注意,上来就有坑!现在 Node.js 版本已经升级到了 6.x.x 但是 Ghost 依然只支持到 4.2.0 以上的 LTS 版本,具体能兼容哪些版本最好还是看看官方的说法

这里顺带科普一下 npm 的版本号,我没有那么幸运在一开始就看到 Supported Node Versions 而是安装报错后才发觉的。报错说 Ghost 向上支持到 ^4.2.0,这是什么意思呢?它和 ~4.2.0 有什么区别呢?

举例说明:

^4.2.0:表示大于等于4.2.0,但主版本号不能变

~4.2.0:表示大于等于4.2.0,但前两个数都不能变

目前符合条件的最新的 Node 版本是 4.4.6,符合 ^4.2.0 的要求。

安装 Node.js 可以参考 Node.js up and running,可把原文中的版本号 0.12.2 替换成当前最新的 4.4.6。

Ghost 需要用 npm 来安装依赖,服务器如果在国外,npm 速度搜搜的,但是在国内最好还是用 cnpm,磨刀不误砍柴工。安装 cnpm 的方法可以参考这里

如果安装好了 cnpm,可将下文安装命令中出现的所有 npm 都改成 cnpm,以获得更好的速度。

安装 Ghost

第一步,下载:

$ curl -L http://ghost.org/zip/ghost-latest.zip -o ghost.zip

第二步,解压:

$ unzip -uo ghost.zip -d /var/www/ghost

如果想把 Ghost 安装到别的目录也可以,这里用默认的 /var/www/ghost

第三步,安装依赖:

进入解压的目录:

$ cd /var/www/ghost

安装依赖包:

$ npm install --production

这一步有可能出现安装失败的提示,最有可能就是上文提到的 Node.js 版本不对。另外,好奇的你可能想知道 –production 这个参数有什么用?不加的话会有什么后果?官网上说,不加也没事,只不过会给你安装一大堆没用的包,这些包是给想改动 Ghost 内核的开发者准备的,大多数人压根用不到,所以还是建议加上 –production。

配置文件

配置文件位于安装目录下,文件名 config.js,官网上有全面的文档,不用改配置文件就能跑起来。关于配置文件,以后有机会再详细解读。

用 PM2 把它跑起来

官网上用 npm start 默认的启动方式不值得推荐。PM2 或 forever 能让进程持久地运行,正是我们需要的。

去年曾在博文里介绍过 forever,不再赘述。这次我们用一用比 forever 更强大的 PM2。

首先是安装:

$ sudo npm install pm2 -g

在安装目录 /var/www/ghost,用 PM2 启动 Ghost:

$ NODE_ENV=production pm2 start index.js --name "ghost"

NODE_ENV=production 是指定环境变量,index.js 是 Ghost 的启动文件。

启动后 PM2 会维护一个列表,记录了当前用户用 PM2 启动的所有 Node.js 程序。pm2 list 命令能输出这个列表,而参数 –name “ghost” 正是给列表中的进程一个名字,以方便辨识。

$ pm2 list

重启:

$ pm2 restart ghost

停止:

$ pm2 stop ghost

停止后依然会保留在 PM2 维护的列表中,只是状态变成了 stopped,此时 start 和 restart 都可以重新启动它。如果要从列表中删掉,则需要用到 delete 命令:

$ pm2 delete ghost

反向代理

Ghost 默认运行在 2368 端口,可以在配置文件里改端口号但没啥必要。Ghost 对外不允许直接通过端口号访问,也就是说只有 127.0.0.1:2368 才是可访问的。那么就需要通过反向代理,以 Nginx 为例,配置文件中,在对应的 server 块里加上 proxy_pass 指向 2368 端口。

server{
    ...

     location / {
        proxy_pass http://localhost:2368;
     }
}
END