前面自己的博客一直架在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界面,这个明天需要解决一下。
整个搭建过程参考了下面几个链接的资料,感谢下:
- How to Install Ghost Blog Software with Apache and SSL on Ubuntu 16.04
- Installing Ghost on Ubuntu, Nginx and MySQL
- Ghost使用指南
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>