LAMP环境搭建Ghost博客

前面自己的博客一直架在wordpress上,本来用的好好的,但是一直文件上传比较成问题,加上觉得Wordpress的架构比较陈旧,插件一大坨一大坨的。恰好某很是羡慕的大神的博客是用Ghost搭的,自己今天睡了一个上午周末起来又有时间,本着生(bu)命(zuo)在(jiu)于(bu)折(hui)腾(si)的精神,我勇敢的尝试了下在之前遗留下来的LAMP环境下搭建Ghost博客。

之间查查网上的教程,发现中文资料主要都是在LNMP环境下搭建的教程,这里也是尝试下吧这个过程和里面遇到的各种坑写出来,希望给后来的各位一些参考。


下面是这个博客的生成指南:

安装Node.js

最开始发现自己的vps竟然没装curl,于是先装了下curl:

sudo apt-get update
sudo apt-get install curl

接下来安装Node.js v4.x

Ubuntu 系统

curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -  
sudo apt-get install -y nodejs  

Debian 系统。以 root 权限执行下列指令

curl -sL https://deb.nodesource.com/setup_4.x | bash -  
apt-get install -y nodejs  

使用node --version命令确认安装成功:

v4.6.2

使用npm --version命令确认npm安装成功:

2.15.11

下载Ghost7.4

\var\www\html 下下载中文版Ghost

wget http://dl.ghostchina.com/Ghost-0.7.4-zh.zip

此处因为自己的服务器在境外,所以不用忍受墙内npm install --production的限制,直接用了单纯的Ghost 中文标准版下载,有需要集成node_modules的墙内小伙伴可以直接下载Ghost 中文集成版:

wget http://dl.ghostchina.com/Ghost-0.7.4-zh-full.zip

然后解压缩:

unzip -d ghostblog Ghost-0.7.4-zh.zip 

安装Ghost

cd /var/www/ghostblog/
cp config.example.js config.js

反馈发现弹了个错:

npm WARN cannot run in wd ghost@0.7.4 npm install semver && node -e "require('./core/server/utils/startup-check.js').nodeVersion()" (wd=/var/www/html/ghostblog)
npm WARN deprecated minimatch@0.3.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
|

发现问题之后采用npm install -g minimatch@3.0.2升级minimatch:

minimatch@3.0.2 /usr/lib/node_modules/minimatch
└── brace-expansion@1.1.6 (balanced-match@0.4.2, concat-map@0.0.1)

清理SWAP后安装正常

> sqlite3@3.1.1 install /var/www/html/ghostblog/node_modules/sqlite3
> node-pre-gyp install --fallback-to-build

添加一个Ghost用户:

useradd -d /var/www/html -s /bin/bash ghost   
passwd ghost

-d = 表示把ghost用户的home地址设在 /var/www/html.

-s = 为Ghost用户定义shell.

(我当时就念了两句诗)

然后需要把ghostblog的所有权交给ghost用户:

chown -R ghost:ghost /var/www/ghostblog

设置和运行Ghost

在开始开启Ghost前需要设置下相关参数,参数主要在ghostblog文件夹下的config.js里,打开在相应输入域名和数据库用户名密码的位置输入就好了。

接下来用su - ghost切换到ghost用户,满心欢喜地输入cd ghostblog\npm start --production准备运行Ghost,结果蹦出这样一条提示:

ERROR: Unsupported version of Node
Ghost needs Node version ~0.10.0 || ~0.12.0 || ~4.2.0 you are using version 4.6.2

官网不是口口声声说4.X版都行么?

于是查了下论坛发现有人保证这只是文档错误,屏蔽掉版本检查就好:

export GHOST_NODE_VERSION_CHECK=false && npm start --production

反馈:


热泪盈眶!

然后用curl -I localhost:2368测试一下反馈一切正常:

HTTP/1.1 200 OK
X-Powered-By: Express
Cache-Control: public, max-age=0
Content-Type: text/html; charset=utf-8
Content-Length: 4449
ETag: W/"1161-UOstMmTxpGSGaOmiNTQWpw"
Vary: Accept-Encoding
Date: Sat, 19 Nov 2016 12:57:12 GMT
Connection: keep-alive

让 Ghost 一直运行

前面提到的启动 Ghost 使用 npm start 命令。这是一个在开发模式下启动和测试的不错的选择,但是通过这种命令行启动的方式有个缺点,即当你关闭终端窗口或者从 SSH 断开连接时,Ghost 就停止了。为了防止 Ghost 停止工作,我们使用Supervisor实现开机自启动和持续运行。

安装 Supervisor:

apt-get install supervisor

通过 service supervisor start 确保 Supervisor 运行

为 Ghost 创建一个启动脚本。通常为 /etc/supervisor/conf.d/ghost.conf ,例如:

[program:ghost]
command = npm start --production
directory = /var/www/html/ghostblog
user = ghost
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/ghost.log
stderr_logfile = /var/log/supervisor/ghost_err.log
environment = NODE_ENV="production",GHOST_NODE_VERSION_CHECK="false"

然后通过service supervisor restart重启Supervisor并自动运行Ghost

接下来通过netstat -plntu确认运行情况,可以看到2368端口在监听状态

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:2368          0.0.0.0:*               LISTEN      7381/node   

设置域名

由于很早之前服务器就装好了apache,所以直接到apache下面更改配置文件就好了:

sudo cd /etc/apache2/sites-available/
sudo vim ghostblog.conf

文件内容如下:

<VirtualHost *:80>
    #Domain Name
    ServerName ghostblog.me
    ServerAlias www.ghostblog.me

    #HTTP proxy/gateway server
    ProxyRequests off 
    ProxyPass / http://127.0.0.1:2368/ 
    ProxyPassReverse / http:/127.0.0.1:2368/     
</VirtualHost>

最后开启代理服务并重启apache:

sudo a2enmod proxy proxy_http
sudo a2ensite ghostblog
sudo service apache2 restart

这样,Ghost博客系统就华丽丽地在主页上运行起来了。


其实后面还是遗留了些小问题的,比如说我直接把主页80端口链接到了Ghost上面,造成之前apache下Wordpress搭建的博客就没法访问了,一直弹出Ghost下的404界面,这个明天需要解决一下。

整个搭建过程参考了下面几个链接的资料,感谢下:


2016.12.9更新

最后我用子域名的方式解决了同时运行apache里wordpress博客和Ghost博客的问题。只用在apache的设置文件里改成如下的样子就好。
(此处需要注意下在网站域名dns时需要把所有子域名都解析到这台服务器上)

<VirtualHost *:80>
    #Domain Name
    ServerName blog.ghostblog.me
    ServerAlias blog.ghostblog.me

    #HTTP proxy/gateway server
    ProxyRequests off 
    ProxyPass / http://127.0.0.1:2368/ 
    ProxyPassReverse / http:/127.0.0.1:2368/     
</VirtualHost>