写在前面的话
很早就想搞个博客,最近有朋友跟我安利使用GHOST博客来创建个人博客。本周末正好有空,就开始动手整了。
没想到,开始上手做之后,才发现GHOST官网给的教程有一堆坑。
原本计划两个小时搞定博客安装并对外的,愣是搞了一个晚上。目前网站终于鼓捣出来,能够正常访问了。
趁现在,把那些填过的坑记录下。以便后来者能躲过去。
本次安装大致参考如下文章,在此感谢作者。
http://docs.ghostchina.com/zh/installation/linux/
我的网站用Ghost博客作为应用服务,使用nginx在前端做一层隔离,也方便以后再继续扩展。数据存储采用了mysql。
故在正式开始安装GHOST之前,首先要准备好nginx和mysql。
因为Ghost博客是使用nodejs开发的,所以最开始需要安装nodejs相关的环境。
上述三个软件的具体安装过程网上已有很多教程,在此不赘述。
开始安装Ghost:
把基础软件装好后,现在就参照上文开始安装Ghost博客。
1. 首先是把ghost博客的最新的包下载下来:
curl -L https://ghost.org/zip/ghost-latest.zip -o ghost.zip
2. 解压到一个目录里面
unzip -uo ghost.zip -d ghost
注:使用的服务器上可能并没有安装unzip服务,那要切到有权限的用户下,把unzip装一下。
3. 转到刚刚解压的目录
cd /你的 Ghost 解压目录
4. 安装Ghost
npm install --production
至此,一切正常。
按照上文博客的说明,此刻,只需启用Ghost博客的服务即可,然而,当我输入 npm start的时候,开始报错了。。
对呀,还没配置数据库信息呢,当然不能启动起来了。可是怎么配置数据库呀?文章没有说。
于是搜索了下,网上有文章说在ghost程序目录下有config.example.js,可在此配置数据库相关信息。
然而,我的目录结构下面根本就没有这个文件,find全工程也没有这个文件名的文件。
那么,这个配置文件在哪里呢?回去看了下启动过程,发现程序有从ghost目录/core/server/conf加载文件。
于是顺藤摸瓜,果然,在ghost目录/core/server/conf/env下面找到了如下几个conf文件:
config.development.json
config.production.json
config.testing.json
config.testing-mysql.json
5. 修改数据库配置信息
先改config.development.json
原来的文件长这样,在开发模式下,ghost使用了sqlite作为他的数据库,但是我使用的是mysql。
故需要修改"database"节点内容。
{
"url": "http://localhost:2368",
"database": {
"client": "sqlite3",
"connection": {
"filename": "content/data/ghost-dev.db"
},
"debug": false
},
"paths": {
"contentPath": "content/"
},
"privacy": {
"useRpcPing": false,
"useUpdateCheck": true
},
"useMinFiles": false,
"caching": {
"theme": {
"maxAge": 0
},
"admin": {
"maxAge": 0
}
}
}
修改后的文件是这样子的,"database"节点内为修改过的内容:
{
"url": "http://localhost:2368",
"database": {
"client": "mysql",
"connection": {
"host": "127.0.0.1",
"user": "yourdbuser",
"password": "yourdbpassword",
"database": "yourdatabase",
"charset": "utf8"
},
"debug": false
},
"paths": {
"contentPath": "content/"
},
"privacy": {
"useRpcPing": false,
"useUpdateCheck": true
},
"useMinFiles": false,
"caching": {
"theme": {
"maxAge": 0
},
"admin": {
"maxAge": 0
}
}
}
按同样的逻辑,修改config.production.json,至此,数据库配置就修改好了。
修改好数据库配置,我马上再次运行npm start,可惜,仍然报错了。
报错信息如下:
NAME:DatabaseIsNotOkError
CODE:MIGRATION_TABLE_IS_MISSING
MESSAGE:Please run knex-migrator init
其实这报错是因为数据库没初始化,该有的表呀什么的都没有建,所以应用启动不起来。
6. 数据库初始化
阅读报错信息后,我决定先跑一边knex-migrator init。
第一遍果然失败了,因为我都没装knex-migrator,于是搜索了,跑了下如下命令:
npm install -g knex-migrator
把knex-migrator 装上了。然后回到ghost安装目录,执行数据库初始化。
cd yourpathtoghostfolder
knex-migrator init
OK。显示了一堆的create table等信息,终于把数据库初始化好了。
此刻再运行npm start,终于把网站起起来了。
npm start
npm start是在development模式下启动应用。
按照以往部署的经验,production数据配置已经配置好了,应该可以启动production模式了。
于是我执行如下命令,企图在production模式下启动博客,然而,失败了。
npm start --production
又报这个错,
NAME:DatabaseIsNotOkError
刚刚不是刚刚初始化过吗,怎么又不行了呢?
我赶紧登上Mysql上去看看。这一看是吓我一跳,development db上的库表都建好了。
但是,productiondb上的没有建好!!!
哎,原来这个knexi-migrator init 只给我初始化了development 数据库。
刚开始我试图搜索方案让knexi-migrator直接帮我把开发库和生产库初始化了,左试试右试试,最终还是没解决。
最后没法,我只能把produciton库的库表信息写到config.development.json里面,再跑一次knex-migrator init。
初始化表之后,再跑一次npm start --production,终于把production模式的博客也启动起来了。至此,博客安装完成。
npm start --production
后面就是配置nginx了,此处略过。