本文已废弃。
排版的错误是由于 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 -vnpm -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 上写第一篇文章,然后你发现。。

未收到数据

ERR_EMPTY_RESPONSE

关掉 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 stdout_logfile = /var/log/supervisor/ghost.log stderr_logfile = /var/log/supervisor/ghost_err.log environment = NODE_ENV=”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; server_name example.com; #change it to your domian name location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_pass 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 中国大陆许可协议 进行许可。