不使用Ghost-CLI安装新版Ghost

新版的Ghost出来有一段时间了,我一直没太注意。偶然发现最新版已经到1.20了,便决定升级下自己的老版本。

根据官方的说明,新版已经不能像老版本那样通过一些文件的覆盖更新来升级了,貌似新版从1.0.0开始采用了Ghost-CLI来进行安装升级,不用像以前那样人工动作比较多。这确实挺好的,但是仔细一看说明,只能是先导出老版的数据,然后直接安装新版,最后导入。好吧,那么就按照官方的做吧,可是这新版的安装的限制也太多了吧,居然要指定Ubuntu16.04的OS,我可不太想重建我的VPS。。。

我尝试在我的CentOS 6.9的系统上用Ghost-CLI来安装,但是中途出了很多错,我尝试着修改源码(这样以后升级就不方便了),大部分错误都是系统环境差异调用的命令参数不一致造成的,我固然可以一个个找到错误点,修改Ghost-CLI的源码执行,但是这样谁知道会不会埋坑啊。。。而且以后升级不得重新再来一次?

搜索后,发现了下面两个博客的文章。

第2篇博客是根据第1篇博客找到的,感觉第2篇博客介绍的方法高效方便,而且末尾也介绍了如何升级到最新版,十分详尽,遂采用之,顺利升级。

安装过程

这个方法是使用NPM来完成安装的,官网也有说明

安装yarn(如果没有安装yarn)
关于yarn就不用多说啥了,干过前端的都知道,具体安装参见官方文档

安装 knex-migrator

sudo yarn global add knex-migrator

创建一个目录作为安装目录,比如/var/www/ghost,或者其他合适位置,注意这里涉及到目录和权限之类的问题,具体自己控制,过程这里省去,这里假设分配给ghost的用户和目录都已经确定好

cd $GHOST_DIR
yarn init ### 自己确定工程信息
yarn add ghost@latest --save ### 安装ghost最新NPM包
cp node_modules/ghost/core/server/config/env/config.production.json . 

生产环境配置文件config.production.json修改成如下,如果需要指定其他的数据库,自行更改即可。

{
    "url": "${外网访问的域名}",
    "server": {
        "host": "127.0.0.1",
        "port": "${端口}"
    },
    "database": {
        "client": "mysql",
        "connection": {
            "host"     : "127.0.0.1",
            "user"     : "${数据库用户}",
            "password" : "${数据库密码}",
            "database" : "${数据库名}"
        }
    },
    "auth": {
        "type": "password"
    },
    "paths": {
        "contentPath": "content/"
    },
    "logging": {
        "level": "info",
        "rotation": {
            "enabled": true
        },
        "transports": ["file", "stdout"]
    }
}
touch index.js
vi index.js

index.js内容如下

var ghost = require('ghost');
var path = require('path');

ghost().then(function (ghostServer) {
    ghostServer.start();
});
cp -r node_modules/ghost/content . ### 创建content文件夹
NODE_ENV=production knex-migrator init --mgpath node_modules/ghost ### 数据初始化

这样Ghost基本工作就完成了,可以使用

NODE_ENV=production node index.js

看下运行效果和日志,如果能正确运行,那么就差不多大功告成了,下面可以使用pm2来运行Ghost,如果有必要,也可以包装成systemd或者老系统的SysV服务。

pm2启动问题

用pm2启动Ghost过程中,发现出现莫名奇妙的数据库重复连接问题,而且错误日志报很多次,我做了个试验,把index.js改成

console.info(process.env.NODE_ENV);

pm2启动脚本

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

观察启动日志,按照常理,info日志应该会出现一次production,但是日志有时候竟然出现16次。。。

查了下pm2参数,发现默认的自动重启配置默认就是15,加上本来的一次启动刚好是16次,看来是什么因素让pm2错误的重启了Ghost16次。具体细节我也不太追究了,我直接加了个--no-autorestart参数变成如下

NODE_ENV=production pm2 start $GHOST_DIR/index.js --name "ghost" --no-autorestart

再观察日志,正常运行了。

最后顺带说下,新版的主题也和之前的不一样了,我看了下官方市场上的主题蛮少,大部分都是收费。如果有时间的话还是自己订制吧。

代码高亮部分可以参考Adding code highlighting to Ghost blog,采用Prism.js

Show Comments