说明:我用的虚机是qcloud上的,其它云服务商的CentOS可能配置不同,或者网络环境不同。

在QCloud CentOS7 开发与部署Nodejs大致有如下几布:

  1. 安装Nodejs,及其组件
  2. 开发第一个Nodejs app
  3. 配置node进程管理程序
  4. 安装配置Nginx

1. 安装Nodejs

1.1 安装Nodejs 和npm

现在可以直接使用yum安装Nodejs了,

yum -y install nodejs

而现在版本的nodejs也自带了npm程序,我们可以通过一下指令检查程序是否安装成功。

> [root@VM_186_77_centos code]# node --version
>  v6.16.0
> [root@VM_186_77_centos code]# npm --version
> 3.10.10

1.2 安装mongodb

我们后面的程序用到了mongodb存储数据,这里需要吧mongodb先安装上,mongodb也支持yum安装了,步骤如下:

  1. 进入网址
    https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ 先阅读官方指南
  2. 创建文件
    在下列位置创建文件:/etc/yum.repos.d/mongodb-org-4.0.repo
[mongodb-org-4.0] 
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1 enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
  1. 安装配置
    安装mongodb的时间有点长,需要多等待几分钟
yum install -y mongodb-org
  1. 开启或者关闭服务

开启服务

service mongod start

或者systemctl start mongod

关闭服务使用如下命令

service mongod stop

或者 systemctl stop mongod

重启服务

service mongod restart

或者 systemctl restart mongod

  1. 设置开机自启
chkconfig mongod on

或者 systemctl ennable mongod

  1. 测试

直接输入mongo,既可以连接并使用mongo数据库了。

> [root@VM_186_77_centos code]# mongo 
> MongoDB shell version v4.0.6

2. 开发第一个Nodejs app

2.1 使用nodejs下的若干组件,可以快速搭建起后台网站。

常见的组件如下代码:

var express = require('express');
var app = express();
var mongodb = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/test');
// test
app.get('/api/helloworld', function (req, res, next) {
    var data = {
    key: "hello world"
};
    res.end(JSON.stringify(data));
});

app.listen(4466);
console.log("app.listen is running");

2.2 安装Git

通常我们会在开发机器上开发好nodejs的代码,如果我们使用了在线的Git仓库,那么可以直接拉源码下来运行。

安装git的命令:

yum install -y git

同样, 验证一下:

[root@VM_186_77_centos code]# git --version
git version 1.8.3.1

2.3 安装Nodejs App中的所需要的各种组件

因为Nodejs已经自带了npm,nodejs app中需要的组件都可以通过npm进行安装。一般情况直接使用npm install xxxx 就可以。本示例中仅仅需要安装express

npm install express

3. 配置node进程管理程序

PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。

3.1 pm2安装

全局安装pm2

npm install -g pm2

3.2 pm2 运行程序

使用pm2启动node的进程非常简单

pm2 start ./bin/www --watch

注意,这里用了--watch参数,意味着当你的express应用代码发生变化时,pm2会帮你重启服务,这样就对开发过程中的程序员就很贴心了。

3.3 pm2其它常用指令

pm2提供了examples命令,常见指令都在里面:

[root@VM_186_77_centos code]# pm2 examples
[PM2] pm2 usage examples:

- Start and add a process to the pm2 process list:
  $ pm2 start app.js --name app
  
- Show the process list:
  $ pm2 ls
  
- Stop and delete a process from the pm2 process list:
  $ pm2 delete app
  
- Stop, start and restart a process from the process list:
  $ pm2 stop app
  $ pm2 start app
  $ pm2 restart app
- Clusterize an app to all CPU cores available:
  $ pm2 start -i max

- Update pm2 :
  $ npm install pm2 -g && pm2 update

- Install pm2 auto completion:
  $ pm2 completion install

Check the full documentation on https://pm2.io/doc

4. 配置Nginx

4.1 配置域名

为了方便测试,我配置了一个二级域名 xx.xxxx.xxx,这个大家在自己的域名提供商增加A记录的方式来完成。

4.2 申请域名证书

因为现在很多地方都要求HTTPS访问,我同步申请这个域名的证书,好搭建HTTPS服务。

我是用腾讯云的SSL服务来完成的:https://console.cloud.tencent.com/ssl, 申请完以后会得到一个压缩包,里面有常见网站服务器端的证书。

4.3 配置Nginx反向域名

我的测试机上还有其它的一些应用,因此需要安装一个Nginx做反向代理,将刚才写好的接口开放到公网上。

首先,将上一步得到的证书上传到Nginx目录下,分别为:

“/etc/pki/nginx/1_xx.xxxx.xxx_bundle.crt”
“/etc/pki/nginx/private/2_xx.xxxx.xxx.key”

其次,编辑/etc/nginx/nginx.conf,增加如下配置

# Settings for a TLS enabled server.
#
    server {
        listen       443 ssl http2;
        server_name  xx.xxxx.xxx;
        root         /usr/share/nginx/html;

        ssl_certificate "/etc/pki/nginx/1_xx.xxxx.xxx_bundle.crt";
        ssl_certificate_key "/etc/pki/nginx/private/2_xx.xxxx.xxx.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            proxy_pass http://127.0.0.1:4466;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

这里需要注意
xx.xxxx.xxx: 需要替换成读者自己的域名
1_xx.xxxx.xxx_bundle.crt:需要替换成读者自己的域名的证书文件
2_xx.xxxx.xxx.key:需要替换成读者自己的域名的私钥文件
4466:我们在2.1步骤中使用了4466这个端口,如果您改成其它的端口,这里也要做相应修改

最后,重启Nginx,测试网站访问。

5. 参考资料

Nginx SSL证书部署:https://cloud.tencent.com/document/product/400/4143#2.-nginx-.E8.AF.81.E4.B9.A6.E9.83.A8.E7.BD.B2 Nginx 使用指南:https://cloud.tencent.com/developer/section/1258922 MongoDB官方指南:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ 使用安全组配置腾讯云服务的开放端口: https://cloud.tencent.com/document/product/213/18197#common