ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 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) > 小提示:绑定域名不在本节讲解范围,读者可自行尝试。 > 小提示:因为我们选择的按时付费套餐,测试完成后,可在主机管理页面选择关闭主机,节约费用。