Ghost真的是一个让我又爱又恨的博客平台,界面的简洁之美,写作的流畅与舒适,还有那烦人的安装与更新操作。在差不多一年之前吧,我安装了版本是 0.7.4
的Ghost平台,那时候用的是Ghost中文网中的那个 Ghost 中文集成版
,当时也是费了很多周折,使用到现在也没有出现什么问题。也是在最近几天,闲着没事去Ghost中文网看了看,竟然还是 0.7.4
的版本!心想难道Ghost一直没更新?于是去英文官网看了看,才发现原来Ghost有两个路线,一个是 Alpha
版本,已经更新到了 Alpha.21
,一个是正式版,也已经更新到了 0.11.9
;而Ghost中文网的内容就有点滞后了,希望可以尽快更新。之后我就想体验新版本的Ghost。开始吧~
一、尝试更新Ghost
根据Ghost英文官网的 How-To-Upgrade更新指导步骤,我整理如下:
- 备份:在后台中的”实验室”栏目中导出一个
.json文件
,并且将Ghost根目录中的content目录
进行备份(这里存放着博客站点的所有上传图片和主题)。而我直接是把整个Ghost目录和数据库
进行了备份。记住:一定要备份!无论你做什么一定要备份!!! - 检查Ghost平台是否可以重启:因为在更新Ghost完成之后,或者更新出错进行调试的时候,需要重启Ghost,所以我们必须确保Ghost可以重启;
- 关于跨版本更新的问题:源版本与目标版本如果跨度较大可能会出现问题,所以更新升级的建议如下:
0.7.1
或更高版本应该可以直接升级到0.11.9
;0.5.0
或更高版本应该可以直接升级到0.7.x
;0.4.2
的版本必须升级到版本0.7.1
(0.7.0
有几个升级错误,在0.7.1
中被解决),然后升级到更高版本的0.7.x
;0.4.2
之前的版本必须按照版本号由低到高升级,直到达到0.4.2
;- 下载新版本并解压:可以使用
wget
或者curl -LOk
下载
https://ghost.org/zip/ghost-latest.zip
中的最新版本文件,然后可以使用unzip Ghost-*.*.*.zip -d ghost-*.*.*
解压。 - 删除旧文件/复制新文件:删除Ghost更目录下的
core目录
、index.js
、*.md
和*.json
;复制新版本Ghost目录中的
core目录
、index.js
、package.json
和npm-shrinkwrap.json
到目前的Ghost根目录中。 - 开始升级:在目前的Ghost目录中执行升级命令
npm install --production --unsafe-perm
,如果期间报错,先删除node_modules文件夹
,再运行npm cache clean
并重试。最后运行npm start --production
进行调试。
使用
npm install --production --unsafe-perm
需要注意的问题:
- 添加
--unsafe-perm
的参数的原因是:如果我们不添加这个参数,会出现类似于npm WARN cannot run in wd test@0.0.0 echo something (wd=/Users/Lloyd/Documents/test)
的错误,原因是如果使用root权限调用npm
,那么它会将uid
更改为用户配置指定的uid
,默认为nobody
,设置--unsafe-perm
参数以使用root权限运行脚本; - 因为GFW的原因,使用
npm install --production --unsafe-perm
可能会出现很多错误,建议修改一下npm
的镜像源,这里推荐淘宝 NPM 镜像,具体使用命令为(其他修改方法见这里):
npm config set registry https://registry.npm.taobao.org |
- 由于我这里不使用
sqlite3
,所以我吧package.json
中的sqlite3
依赖包给删除了,否则的话安装会卡住不动。
二、全新安装Ghost平台
因为之前安装Ghost也出现了不少问题,但是目前都忘了,为了回顾一下,也为了照顾第一次使用Ghost的用户,这里再说明一下全新安装 Ghost 0.11.9
的方法。下文中部分参考于手把手教你搭建一个属于自己的Ghost博客
2.1 安装 Node
环境
由于 Ghost
是基于 Node
的,所以 Node
的环境是必须第一步要安装的,而 Ghost
对于 Node
版本的要求也是十分苛刻的,具体要求可以去官方的说明中去查看,我整理如下:
- Ghost目前支持的Node版本只有
0.12.x
、4.2+
、6.9+
; - 官方推荐的版本是
4.2+
,经实测使用4.5
会报错,所以这里的
4.2+
应该是指4.2.*
;
我在这里使用的 Node
版本是4.2.5,安装Node的命令如下所示:
wget http://nodejs.org/dist/v4.2.5/node-v4.2.5.tar.gz |
2.2 安装Nginx并配置
首先我们安装Nginx:
sudo apt-get install nginx |
安装之后可以使用IP访问,检查 Nginx
是否安装成功,然后我们需要为Ghost平台在 /etc/nginx/conf.d
目录下创建一个配置文件
ghost.conf
:
vi /etc/nginx/conf.d/ghost.conf |
写入的内容如下所示:
#http访问 |
保存退出,然后重启 Nginx
生效配置:
/etc/init.d/nginx restart |
2.3 安装 MySQL
并配置
Ghost 默认使用 sqlite3 数据库
, sqlite3 数据库
功能简约,小型化,追求最大磁盘效率,而 MySQL
是完善的服务器数据库,功能全面,综合化,追求最大并发效率,所以我这里使用的是 MySQL
,下面是操作命令:
apt-get install mysql-server # 安装Mysql |
输入 mysql_secure_installation
回车后,系统可能会询问一些 MySQL
的用户密码安全措施,建议在设置时选择 1 or MEDIUM
即可,这是说明你的 MySQL
用户密码必须包括”数字、大写字母、小写字母、特殊字符”,部分配置的解释为:
Set root password? [Y/n] # 设置root密码 |
为了防止在 MySQL
数据库中出现中文乱码,需要设置 MySQL
的编码,编辑 /etc/mysql/my.cnf
写入如下信息后保存退出,并重启 MySQL
服务:
[client] |
/etc/init.d/mysql restart #重启MySQL服务 |
然后我们新建一个数据库用来存放博客中的文章等信息,并且建立一个用户管理该数据库,由于我们之前设置的 MySQL
数据库用户密码策略,所以密码必须包含”数字、大写字母、小写字母、特殊字符”:
mysql -u root -p # 输入设置好的密码 |
2.4 安装 Ghost
并配置
下载并解压Ghost:
cd /var/www |
修改配置:
cp config.example.js config.js |
Ghost
有生产模式、开发模式和测试模式等多种运行模式,这里我们需要在配置文件中找到 production
模式:
# 生产模式 |
接下来下载 Ghost
所需要的依赖包:
npm config set registry https://registry.npm.taobao.org |
上面代码的解释如下:
npm config set registry https://registry.npm.taobao.org
是修改一下npm
的镜像源,避免因为GFW
而下载依赖包失败,其他修改方法见这里;- 添加
--unsafe-perm
的参数的原因是:如果我们不添加这个参数,会出现类似于npm WARN cannot run in wd test@0.0.0 echo something (wd=/Users/Lloyd/Documents/test)
的错误,原因是如果使用root
权限调用npm
,那么它会将uid
更改为用户配置指定的uid
,默认为nobody
,设置--unsafe-perm
参数以使用root
权限运行脚本;
1.5 开机后博客自动运行
安装 PM2
让 Ghost
可以在开机后自动后台运行
npm install -g cnpm --registry=https://registry.npm.taobao.org |
我们需要打开 /etc/rc.local
文件在其中添加如下代码,让 MySQL
和 Nginx
开机自动运行:
/etc/init.d/mysql restart |
2.出现的一些问题
2.1 config.js文件中的的URL配置https后,访问是浏览器提示重定向次数过多问题:
之前就曾在安装完运行过程中发现网站的针对谷歌的复合搜索卡中的URL是http的,如果改成https,浏览器提示重定向次数过多。由于不妨碍使用,当时就没注意。
今天(2017/06/03
) 在 Search Console 中发现 我们在您的网站上未找到复合搜索卡的任何结构化数据。
的提示信息。先通过谷歌的结构化数据测试工具检测了一番,发现我的复合搜索卡结构语法并没有错误,然后谷歌提供的问题排查,我发现是由于config.js文件中配置的是http://bugwz.com ,而我在谷歌的Search Console中配置的是https://bugwz.com ,导致Search Console 资源必须与托管网站不匹配,所以最后查阅一番,修正方法为在nginx的配置文件中的 location /
配置中加入如下代码:
proxy_set_header X-Forwarded-Proto $scheme; //其中$scheme也可以直接写为https |