BAE(百度应用引擎)是百度推出的网络应用开发平台,支持 Node.js 运行环境,而 Ghost 是基于 Node.js 平台开发的,正好被 BAE 支持。恰巧最近有同学一直纠结在 BAE 上安装 Ghost 出现的问题,我们在这个系列文章中就来详细说说如何在 BAE 上安装 Ghost ,以及如何支持 MySQL 数据库和七牛云存储。
要求
首先,你要有 BAE 账号,并且了解 BAE 的基本使用,包括:创建部署、svn/git 的基本操作、发布新版本等。另外,既然是 Node.js 平台,你也需要了解 Node.js 的相关知识和操作。
准备
- 已经创建了一个可以使用的部署
- 已经通过 svn 或 git 在本地同步了源码仓库
- 从此地址下载 Ghost 安装包:http://dl.ghostchina.com/Ghost-0.4.2.zip
- 将安装包内的文件解压并复制到上面所创建的源码仓库中(
package.json
文件直接覆盖即可)
上述步骤完成之后,你的本地源码仓库应该是如下结构:
/
├── core/
├── content/
├── package.json
├── index.js
├── server.js
├── config.example.js
├── Grungfile.js
├── bower.json
├── app.conf
├── README.md
├── LICENSE
其中,从 BAE 默认为你创建的仓库中同步下来的文件包括:app.conf
、server.js
、package.json
。app.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 数据库,以及如何将图片存储到七牛云上面。
参考资料: