## 4.15.1 申请 MLab
[MLab](https://mlab.com) (前身是 MongoLab) 是一个 mongodb 云数据库提供商,我们可以选择 500MB 空间的免费套餐用来测试。注册成功后,点击右上角的 `Create New` 创建一个数据库(如: myblog),成功后点击进入到该数据库详情页,注意页面中有一行黄色的警告:
```
A database user is required to connect to this database. To create one now, visit the 'Users' tab and click the 'Add database user' button.
```
每个数据库至少需要一个 user,所以我们点击 Users 下的 `Add database user` 创建一个用户。最后分配给我们的类似下面的 mongodb url:
```
mongodb://<dbuser>:<dbpassword>@ds139327.mlab.com:39327/myblog
```
如我创建的用户名和密码都为 myblog 的用户,新建 config/production.js,添加如下代码:
**config/production.js**
```
module.exports = {
mongodb: 'mongodb://myblog:myblog@ds139327.mlab.com:39327/myblog'
};
```
停止程序,然后以 production 配置启动程序:
```
NODE_ENV=production supervisor --harmony index
```
## 4.15.2 pm2
当我们的博客要部署到线上服务器时,不能单纯的靠 `node index` 或者 `supervisor index` 来启动了,因为我们断掉 SSH 连接后服务就终止了,这时我们就需要像 [pm2](https://www.npmjs.com/package/pm2) 或者 [forever](https://www.npmjs.com/package/forever) 这样的进程管理器了。pm2 是 Node.js 下的生产环境进程管理工具,就是我们常说的进程守护工具,可以用来在生产环境中进行自动重启、日志记录、错误预警等等。以 pm2 为例,全局安装 pm2:
```
npm install pm2 -g
```
修改 package.json,添加 start 的命令:
**package.json**
```
"scripts": {
"test": "node --harmony ./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha",
"start": "NODE_ENV=production pm2 start index.js --node-args='--harmony' --name 'myblog'"
}
```
然后运行 `npm start` 通过 pm2 启动程序,如下图所示 :
![](https://box.kancloud.cn/65393b5fd4f3e1903a088a47df1117c1_717x215.png)
pm2 常用命令:
1. `pm2 start/stop`: 启动/停止程序
2. `pm2 reload/restart [id|name]`: 重启程序
3. `pm2 logs [id|name]`: 查看日志
4. `pm2 l/list`: 列出程序列表
更多命令请使用 `pm2 -h` 查看。
## 4.15.2 部署到 Heroku
[Heroku](www.heroku.com) 是一个支持多种编程语言的云服务平台,Heroku 也提供免费的基础套餐供开发者测试使用。现在,我们将论坛部署到 Heroku。
> 注意:新版 heroku 会有填写信用卡的步骤,如果没有请跳过本节。
首先,需要到 [https://toolbelt.heroku.com/](https://toolbelt.heroku.com/) 下载安装 Heroku 的命令行工具包 toolbelt。然后登录(如果没有账号,请注册)到 Heroku 的 Dashboard,点击右上角 New -> Create New App 创建一个应用。创建成功后运行:
```
$ heroku login
```
填写正确的 email 和 password 验证通过后,本地会产生一个 SSH public key,然后输入以下命令:
```
$ git init
$ heroku git:remote -a 你的应用名称
$ git add .
$ git commit -am "first blood"
$ git push heroku master
```
稍后,我们的论坛就部署成功了。访问:
```
https://你的应用名称.herokuapp.com/
```
## 4.15.3 部署到 UCloud
[UCloud](https://www.ucloud.cn/) 是国内的一家云计算服务商,接下来我们尝试将博客搭在 UCloud 上。
> 小提示:不是给 UCloud 打广告。Heroku 不能用后,于是寻找可以免费试用的云主机,注册 UCloud 后发现没有免费试用,于是果断弃坑。过了一会 UCloud 的人打电话回访然后给充了点钱。。于是我就试了下。如果你们注册没有赠送金额,可以联系 UCloud 索要。。
#### 创建主机
1. 注册 UCloud
2. 点击左侧的 `云主机`,然后点击 `创建主机`,统统选择最低配置
3. 右侧付费方式选择 `按时`(每小时),点击 `立即购买`
4. 在支付确认页面,点击 `确认支付`
购买成功后回到主机管理列表,如下所示:
![](https://box.kancloud.cn/0cb1ffa306bba0cf7eadde609a4ed6e3_1187x200.png)
> 注意:下面所有的 ip 都替换为你自己的外网 ip。
#### 环境搭建与部署
修改 config/production.js,将 port 修改为 80 端口:
**config/production.js**
```
module.exports = {
port: 80,
mongodb: 'mongodb://myblog:myblog@ds139327.mlab.com:39327/myblog'
};
```
登录主机,用刚才设置的密码:
```
ssh root@106.75.47.229
```
因为是 CentOS 系统,所以我选择使用 yum 安装,而不是下载源码编译安装:
```
yum install git #安装git
yum install nodejs #安装 Node.js
yum install npm #安装 npm
npm i npm -g #升级 npm
npm i pm2 -g #安装 pm2
npm i n -g #安装 n
n v6.9.1 #安装 v6.9.1 版本的 Node.js
n use 6.9.1 #使用 v6.9.1 版本的 Node.js
node -v
```
> 注意:如果 `node -v` 显示的不是 6.9.1,则断开 ssh,重新登录主机再试试。
此时应该在 `/root` 目录下,运行以下命令:
```
git clone https://github.com/nswbmw/N-blog.git myblog #或在本机 myblog 目录下运行 rsync -av --exclude="node_modules" ./ root@106.75.47.229:/root/myblog
cd myblog
npm i
npm start
pm2 logs
```
> 注意:如果不想用 git 的形式将代码拉到云主机上,可以用 rsync 将本地的代码同步到你的 UCloud 主机上,如上所示。
最后,访问你的公网 ip 地址试试吧,如下所示:
![](https://box.kancloud.cn/b814e5de9303b26b0d6eabc3f9066943_1920x1080.png)
> 小提示:绑定域名不在本节讲解范围,读者可自行尝试。
> 小提示:因为我们选择的按时付费套餐,测试完成后,可在主机管理页面选择关闭主机,节约费用。
- 使用 Express + MongoDB 搭建多人博客
- 1.1 Node.js 的安装与使用
- 1.2 MongoDB 的安装与使用
- 2.1 require
- 2.2 exports 和 module.exports
- 2.3 Promise
- 2.4 环境变量
- 2.5 package.json
- 2.6 npm 使用注意事项
- 3.1 初始化一个 Express 项目
- 3.2 路由
- 3.3 模板引擎
- 3.4 Express 浅析
- 4.1 开发环境
- 4.2 准备工作
- 4.3 配置文件
- 4.4 功能设计
- 4.5 页面设计
- 4.6 连接数据库
- 4.7 注册
- 4.8 登出与登录
- 4.9 文章
- 4.10 留言
- 4.11 404 页面
- 4.12 错误页面
- 4.13 日志
- 4.14 测试
- 4.15 部署