Ghost 开源博客平台

Ghost 是一个简洁、强大的写作平台。你只须专注于用文字表达你的想法就好,其余的事情就让 Ghost 来帮你处理吧。

在 BAE 上安装 Ghost 之:基本安装

BAE(百度应用引擎)是百度推出的网络应用开发平台,支持 Node.js 运行环境,而 Ghost 是基于 Node.js 平台开发的,正好被 BAE 支持。恰巧最近有同学一直纠结在 BAE 上安装 Ghost 出现的问题,我们在这个系列文章中就来详细说说如何在 BAE 上安装 Ghost ,以及如何支持 MySQL 数据库和七牛云存储。

要求

首先,你要有 BAE 账号,并且了解 BAE 的基本使用,包括:创建部署、svn/git 的基本操作、发布新版本等。另外,既然是 Node.js 平台,你也需要了解 Node.js 的相关知识和操作。

准备

  1. 已经创建了一个可以使用的部署
  2. 已经通过 svn 或 git 在本地同步了源码仓库
  3. 从此地址下载 Ghost 安装包:http://dl.ghostchina.com/Ghost-0.4.2.zip
  4. 将安装包内的文件解压并复制到上面所创建的源码仓库中(package.json 文件直接覆盖即可)

上述步骤完成之后,你的本地源码仓库应该是如下结构:

/
├── core/
├── content/
├── package.json
├── index.js
├── server.js
├── config.example.js
├── Grungfile.js
├── bower.json
├── app.conf
├── README.md
├── LICENSE

其中,从 BAE 默认为你创建的仓库中同步下来的文件包括:app.confserver.jspackage.jsonapp.conf 是 BAE 用来配置 http 服务器的,我们不用修改;package.json 是任何 Node.js 项目都要有的配置文件,我们在复制 Ghost 文件时将此文件覆盖即可;server.js 是一个实例代码文件,对我们毫无用处,如果你是爱干净的人,将其删除即可。

配置文件 config.js

接下来我们将 config.example.js 文件复制一份并命名为 config.js,这是 Ghost 的配置文件。

用编辑器打开配置文件,修改 production 配置段:

  • url 是用来配置博客地址的,修改为你的实际地址即可。比如,如果你用的是 BAE 提供的二级域名,就配置为类似形式的地址:http://myblog.duapp.com
  • port 必须修改为 18080 端口,这是 BAE 平台的限制,没得商量
  • 其余配置保持默认即可

最终配置信息如下:

// ### Production
// When running Ghost in the wild, use the production environment
// Configure your URL and mail settings here
production: {  
    url: 'http://ghost9.duapp.com', //修改为你自己的网站地址
    mail: {},
    database: {
        client: 'sqlite3',
        connection: {
            filename: path.join(__dirname, '/content/data/ghost.db')
        },
        debug: false
    },
    server: {
        // Host to be passed to node's `net.Server#listen()`
        host: '127.0.0.1',
        // Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT`
        port: '18080'
    }
},

修改 package.json

根据 BAE 文档上给出的说法

Node.js通过node-manager运行用户的node代码,node-manager会解析package.json文件,获取其中的"scripts":{"start": "node index.js"},通过获取空格和".js"之间的内容为入口文件名,来启动用户应用.

我们知道 BAE 是以很粗暴的手段获知你的应用入口文件名的,这种方式的确很傻!

人在矮檐下,怎能不低头!既然用 BAE 平台,那就按照人家的要求改吧:打开 package.json 文件,将

"start": "node index",  

修改为

"start": "node index.js",  

由于 sqlite 所依赖的某些文件是存储在亚马逊存储上的,而国内“墙"厉害的时候可能就访问不到了,就会出现 Ghost 依赖库安装失败的现象,即便将 npm 源更换为国内的也是无解。所以,BAE 特意将 sqlite 做了一份镜像,如果你在 BAE 上安装 Ghost 失败,可以使用此镜像链接。

一点儿 Hack 手段

Ghost 运行时会根据 NODE_ENV 环境变量来判断是运行在 development (开发)环境下,还是 production (生产)环境下,但是,由于 BAE 并未提供配置 NODE_ENV 环境变量的方法,所以我们需要对 Ghost 源码做些小小的改动。

打开 core/index.js 文件,将第 8 行的代码

process.env.NODE_ENV = process.env.NODE_ENV || 'development';  

修改为

process.env.NODE_ENV = 'production';  

修改之后,Ghost 将总是运行在 production 环境下。

Ghost Go Go Go!

上述工作完成之后,将本地仓库中所有新增加的和修改的文件统统同步到 BAE 服务器上。然后进入 BAE 控制台发布新代码。

等待 BAE 重新部署成功后,打开你的网站的地址,是否再次出现这个久违的页面:

总结

我们这次是采用 Ghost 的默认配置进行安装的,即:数据库(sqlite)和上传的图片全部存储在 BAE 的临时文件系统中,一旦 BAE 发生执行单元迁移时,所有文件都会丢失。这的确很大的一个坑!

后面的系列文章我们将讲解如何配置 MySQL 数据库,以及如何将图片存储到七牛云上面。


参考资料:

王赛
关于作者 王赛