说明:我用的虚机是qcloud上的,其它云服务商的CentOS可能配置不同,或者网络环境不同。
在QCloud CentOS7 开发与部署Nodejs大致有如下几布:
- 安装Nodejs,及其组件
- 开发第一个Nodejs app
- 配置node进程管理程序
- 安装配置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安装了,步骤如下:
-
进入网址
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
先阅读官方指南 -
创建文件
在下列位置创建文件:/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
- 安装配置
安装mongodb的时间有点长,需要多等待几分钟
yum install -y mongodb-org
- 开启或者关闭服务
开启服务
service mongod start
或者systemctl start mongod
关闭服务使用如下命令
service mongod stop
或者 systemctl stop mongod
重启服务
service mongod restart
或者 systemctl restart mongod
- 设置开机自启
chkconfig mongod on
或者 systemctl ennable mongod
- 测试
直接输入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