本文已废弃。 排版的错误是由于 WordPress 转换至 Ghost 文章所致,懒得改了(笑

虽然说网上有很多部署 Ghost 的教程了,官方中文文档也已经很完善了。但看了大多数的教程,都感觉叙述了太多冗余内容,譬如说 安装并配置 nginx、apache、mysql 等,甚至有些还教了如何使用 ssh。窝这里希望写的是干净、优雅、易懂的教程,并标出容易踩坑的地方。

教程目录:(点击展开)

- - - - - -

  • 一、安装所需环境- 1.1 Node.js
  • 1.2 Nginx/Apache,Mysql
  • 二、下载安装 Ghost- 2.1 建立 Ghost 所使用的 mysql 数据库
  • 2.2 下载 Ghost 最新版本 v0.6.4
  • 2.3 安装 Ghost
  • 三、配置 Ghost- 3.1 使你的 Ghost 可以被外网访问
  • 3.2 使你的 Ghost 持久运行
  • 3.3 配置 nginx 使 ghost 可以使用域名访问
  • 四、Ghost 优化

页内标签跳转等有空再做吧~


本教程所使用的环境以及所需材料:

  • Ubuntu 14.04 VPS 或其他
  • 一颗折腾的心
  • 熟练运用搜索引擎的技能

一、安装所需环境

1.1 Node.js

Ghost 构建于 Node.js 平台之上,支持 0.10.* 版本(最新稳定版)的 Node.js。

什么是 Node.js ?

Node.js 是一个开放源代码、跨平台的、用于服务器端和网络应用的运行环境。Node.js 应用用 JavaScript 语言写成,在 Node.js 运行时运行。Node.js 主要用于编写像 Web 服务器一样的网络应用,提供事件驱动和非阻塞 I/O API,可优化应用程序的吞吐量和规模。 From Wikipedia

顺带一提 Node.js 的衍生版本 io.js 也可以,这里就不介绍了。

直接使用软件包管理器安装 Node.js 即可

$ sudo apt-get install node.js nodejs-legacy npm

安装完成后可以使用 node -v  和 npm -v  查看版本信息 

1.2 Nginx/Apache,Mysql

这里不再赘述,网上教程一搜一大把。

二、下载安装 Ghost

2.1 建立 Ghost 所使用的 mysql 数据库

同样不多说,自行创建一个。当然你也可以使用 SQLite。

2.2 下载 Ghost 最新版本 v0.6.4

英文原版:https://ghost.org/download/

汉化版:http://www.ghostchina.com/download/

下哪个随你喜欢,原版的话洋文应该不是问题,主要是后期需要对国内网络情况做一些优化。另外,国内 VPS 请使用 ghostchina 提供的源码完整包,不然伟大的墙会造成安装依赖包失败。

下载到 VPS 上并解压:

$ mkdir ghost && cd ghost $ wget https://ghost.org/zip/ghost-0.6.4.zip $ unzip -d ./ ghost-0.6.4.zip

解压时可能会提示未安装 unzip,$ sudo apt-get install unzip  即可

2.3 安装 Ghost

确保你现在所处的目录下有 npm-shrinkwrap.json 后:

$ npm install --production

安装完毕后启动 Ghost:

$ npm start --production

这样 Ghost 就会监听在 localhost:2368 上了

可以使用 $ curl http://127.0.0.1:2368  查看是否返回 html 页面

三、配置 Ghost

3.1 使你的 Ghost 可以被外网访问

很好。你现在 curl 已经可以得到正确的 html 页面了,于是你兴高采烈地在浏览器中输入 http://your-ip:2368/ 。。

boom~

Oh…What The Fuck !!! 明明本地 curl 都可以 get 到页面的啊!而且 log 上也完全没有滚动。。

最初窝以为是 iptables 的问题。但是执行 $ sudo iptables -A INPUT -p tcp –dport 2368 -j ACCEPT  后还是同样的问题。网上搜了搜,有人说将 config.js 中的 127.0.0.1 改成 0.0.0.0 就好了,于是窝就去试了一下:

ghost-done wow~液!It works !! XD

不过只知其然,不知其所以然是不行的,窝自然要去搜索下 127.0.0.10.0.0.0 之间的区别

这是有用的链接:@stackoverflow,窝简单翻译一下:

127.0.0.1 是本地环回地址,专门用于本地访问。这一般用于本地调试程序,譬如架设专门服务于本地客户端的服务端。然而一台主机可能有多个网卡或 IP 地址,监听在 0.0.0.0 上即为监听在所有可用的 IP 地址上。

渣翻译,轻喷 qwq。反正就是这么个意思~

顺带一提,如果按照下面的方法配置 nginx 反代后,nginx 以本地应用身份访问 127.0.0.1 就完全没有问题了。你也可以不改动这些,直接配置 nginx 反代即可。

3.2 使你的 Ghost 持久运行

可以外网访问了,于是你高兴地关掉终端想在 Ghost 上写第一篇文章,然后你发现。。

未收到数据

ERREMPTYRESPONSE

关掉 ssh 连接就不能访问了!如何解决呢?

1) 使用 Supervisor

为啥把 supervisor 放在第一位而不是 forever 呢?也不是因为他俩的优缺点,只是因为上次安装 shadowsocks 时就已经安装了 supervisor 了,可以直接拿来用嘛

对于没有安装的人:

$ sudo apt-get install supervisor

为 ghost 创建一个启动脚本

$ vim /etc/supervisor/conf.d/ghost.conf

加入如下内容:

[program:ghost] command = node /path/to/ghost/index.js directory = /path/to/ghost user = ghost autostart = true autorestart = true stdoutlogfile = /var/log/supervisor/ghost.log stderrlogfile = /var/log/supervisor/ghosterr.log environment = NODEENV="production"

记得把路径改成自己的。

注意,你现在并没有添加 ghost 用户,请使用 $ sudo useradd -r ghost -U  添加并使用

$ sudo chown -R ghost:ghost /your-ghost-dir 赋予权限。

顺带一提,如果你的 ghost 放在 root 下(和窝一样)就要把 user 改成 root

重启 supervisor 服务

$ sudo service supervisor restart

可以使用 $ supervisorctl {start|stop|restart} ghost  管理

2) 使用 forever

http://docs.ghost.org/zh/installation/deploy/#forever

这样你的 ghost 就可以一直运行啦

3.3 配置 nginx 使 ghost 可以使用域名访问

安装 nginx 就不多说了,而且你应该早就装好了吧

1) 对于手动安装 nginx 的用户

http://docs.ghost.org/zh/installation/deploy/#配置-ghost-域名

2) 对于lnmp 一键包以及各类面板使用者:

用你的一件包/面板的方法创建一个虚拟机

找到这个虚拟机的 nginx.conf 文件。当然,很可能不叫这个名字,AMH 面板以及军哥 lnmp 似乎都是命名为 your-domain.conf 的。总之找到里面结构类似于

server { listen 80; #listen end server_name your-domain.com; }

这样的就是了。还是找不到请求助于搜索引擎。

找到后,编辑此配置文件为如下:

server { listen 80; servername example.com; #change it to your domian name location / { proxysetheader X-Real-IP $remoteaddr; proxysetheader Host $httphost; proxypass http://127.0.0.1:2368; } }

原来配置文件中那些乱七八糟的玩意儿删掉也没事

四、Ghost 优化

Good Job ! 你已经成功配置好 Ghost 并可以使用域名访问了。可以说 ghost 博客的搭建已经成功了。那么下面就是一些 ghost 博客的优化技巧。

To Be Continued. https://ghost.prinzeugen.net/

反正没人看,Ghost 字体微调好麻烦,已弃坑。

20150808110252

除另有声明外,本博客文章均采用 知识共享(Creative Commons) 署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议 进行许可。