开发者社区> 余二五> 正文

Node.js生产环境配置

简介:
+关注继续查看

1 理论部分

1.1 方案简介

本文部署了一个Linux + MySQL + Node.js + Express + PM2的生产环境下,我们需要借助PM2的群集模式的特征,PM2带负载均衡功能,是一个完美的Node.js进程管理器,可轻松实现Node.js的服务器多CPU并发,并保证进程永远活着,0秒重载,PM2可监视Node.js底层代码的修改,使得修改代码无需重启Node.js进程。

1.2 Node.js简介

- Node.js是运行在服务端的JavaScript

- Node.js是基于Chrome JavaScript运行时建立的一个平台

- Node.js是事件驱动I/O服务端JavaScript环境,基于Google的V8引擎

注:V8引擎执行Javascript的速度非常快,性能非常好

1.3 Express的简介

Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用(几行代码即可快速地搭建一个完整功能的网站)。

1.4 PM2的简介

PM2的群集模式带负载均衡功能,是一个完美的Node.js进程管理器,可轻松实现Node.js的服务器多CPU并发,并保证进程永远活着,0秒重载,PM2可监视Node.js底层代码的修改,使得修改代码无需重启Node.js进程。

2 Node.js生产环境配置

2.1 环境信息

2.1.1 环境配置

OS = CentOS 7.3 x86_64

IPAddress = 10.168.0.55

App Env = Linux + MySQL + Node.js + express + PM2

2.1.2 配置MySQL源

1
vim /etc/yum.repos.d/mysql56-community.repo

输入如下内容:

1
2
3
4
5
6
7
# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://repo.mysql.com/RPM-GPG-KEY-mysql

2.1.3 配置Node.js源

1
yum install -y http://rpm.nodesource.com/pub_8.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm

2.1.4 配置防火墙

1
2
3
firewall-cmd --permanent --add-port 8080/tcp
firewall-cmd --reload
firewall-cmd --list-all

2.1.5 配置SELinux

1
2
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2.2 配置MySQL服务

2.2.1 安装MySQL相关包

1
yum install -y mysql-community-server mysql-community-devel mysql-community-client

2.2.2 启动并配置服务自启动

1
2
systemctl start mysqld
systemctl enable mysqld

2.2.3 初始化MySQL服务

1
mysql_secure_installation

向导如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[…]
Enter current password for root (enter for none):
[…]
Set root password? [Y/n] y
New password: dbAdminPassword1
Re-enter new password: dbAdminPassword1
[…]
Remove anonymous users? [Y/n] y
[…]
Disallow root login remotely? [Y/n] n
[…]
Remove test database and access to it? [Y/n] y
[…]
Reload privilege tables now? [Y/n] y
[…]

2.2.4 创建数据库

1
create database nodedb character set utf8;

2.2.5 数据库授权

1
grant all privileges on nodedb.* to 'nodeDBUser1'@'localhost' identified by 'nodeDBPassword1';

2.3 配置Node.js

2.3.1 安装Node.js包

1
yum install -y nodejs-8.1.3

2.3.2 配置运行环境

1) 配置运行用户

1
2
useradd npm
su - npm

注:如无特殊说明第3章节往下代码都使用npm用户身份执行,而非root

2) 查找npm默认路径

1
npm config get prefix

显示如下:

1
/usr

3) 新建npm全局目录

1
mkdir ~/.npm-global

4) 设置npm全局目录

1
npm config set prefix '~/.npm-global'

5) 配置npm环境变量

1
2
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bash_profile
source  ~/.bash_profile

2.3.3 安装全局npm包并保存依赖关系

1
npm install -g --save express-generator mysql pm2

确认包的安装:

1
npm ls -g --depth=0

显示如下:

1
2
3
4
/home/npm/.npm-global/lib
├── express-generator@4.15.0
├── mysql@2.13.0
└── pm2@2.6.1

2.3.4 配置express依赖环境

1) 新建项目文件夹

1
2
3
4
mkdir -p /var/www/project1
chown npm:npm /var/www/project1
chmod 755 /var/www
chmod 770 /var/www/project1

注:1)使用root用户身份执行

2) 创建应用程序

1
2
3
su - npm
cd /var/www/project1/
express .


3) 安装依赖关系

1
npm install

4) 建立演示文件

1
vim express_demo.js

输入如下内容:

1
2
3
4
5
6
7
8
var express = require('express')
var app = express()
 
app.get('/'function (req, res) {
  res.send('Hello World')
})
 
app.listen(8080)

5) 启动演示

1
node express_demo.js

注:【Ctrl+C】退出

6) 测试演示

1
curl 127.0.0.1:8080

显示如下:

1
Hello World

注:看到以上信息证明Express包的依赖关系正确。

2.3.5 配置MySQL依赖环境

1) 安装本npm地包

1
2
3
su - npm
cd /var/www/project1/
npm install mysql

2) 建立测试演示

1
vim mysql_demo.js

输入如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'nodeDBUser1',
  password : 'nodeDBPassword1',
  database : 'nodedb'
});
 
connection.connect();
 
connection.query('SELECT 1 + 1 AS solution'function (error, results, fields) {
  if (error) throw error;
  console.log('The solution is: ', results[0].solution);
});
 
connection.end();

3) 运行测试代码

1
node mysql_demo.js

显示如下:

1
The solution is:  2

注:看到以上信息证明MySQL包的依赖关系正确,数据库可正常连接。

2.3.6 配置PM2

1) 启动服务

1
pm2 start -i 4 express_demo.js --watch

显示如下:

wKioL1l4ObWSQPIDAABRnnyJ4Pw308.png

参数解析:

1
2
"-i" 启动的应用程序实例数量(整数)
"--" watch 监视文件变化并自动重启应用程序

2) 确认群集状态

1
pm2 list

显示如下:

wKiom1l4Olmiv0ljAABBW6sUuHk850.png

3) 配置服务自启动

生成启动配置命令:

1
2
pm2 save
pm2 startup

最后3行显示如下:

1
2
3
[PM2] Writing init configuration in /etc/systemd/system/pm2-npm.service
[PM2] You have to run this command as root. Execute the following command:
sudo env PATH=$PATH:/usr/bin /home/npm/.npm-global/lib/node_modules/pm2/bin/pm2 startup systemd -u npm --hp /home/npm

执行配置命令:

1
2
exit
sudo env PATH=$PATH:/usr/bin /home/npm/.npm-global/lib/node_modules/pm2/bin/pm2 startup systemd -u npm --hp /home/npm

注:以上行需要root身份执行

4)测试PM2服务命令

1
2
3
systemctl status pm2-npm.service
systemctl stop pm2-npm.service
systemctl start pm2-npm.service

注:以上三行需要root身份执行,以上三条命令能正常运行即可证明PM2服务方式启动OK


5) 浏览器测试

wKiom1l2utzRcVSqAAAiW-Ch-k0006.png

=====================================

npm参考:

----------

http://cmdschool.blog.51cto.com/2420395/1950640

https://www.npmjs.com/package/cnpm

https://npm.taobao.org/

https://cnpmjs.org/


nodejs参考:

------------

http://www.runoob.com/nodejs/nodejs-mysql.html


express使用文档

------------------------

https://www.npmjs.com/package/express


pm2使用文档:

-----------

https://www.npmjs.com/package/pm2










本文转自 tanzhenchao 51CTO博客,原文链接:http://blog.51cto.com/cmdschool/1951112,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
grunt 一个目录下所有的js文件压缩 配置收藏
module.exports = function(grunt){ // 项目配置 grunt.initConfig({ pkg: grunt.file.readJSON('package.
680 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18728 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
25103 0
菜鸟入门【ASP.NET Core】5:命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options
命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample   可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我们可以直接添加Microsoft.
1426 0
jsp JavaBean配置
JavaBean配置1 编写Bean可以放到自己的包中。如:SelfBean/SelfBean.java完全目录为:虚拟目录/WEB-INF/classes/SelfBean/SelfBean.java2 编译目录情况为:虚拟目录/WEB-INF/classes/SelfBean/SelfBean.
522 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
18706 0
webstorm配置node.js--webstorm下载配置node失败解决办法
  webstorm是开发node.js最好的工具,大家可以去网上下载最新版本。他是付费软件,有30天的试用时期,大家可以找破解版来用,我下载的是4.0版本,网上找了破解密钥。 密钥内容: username:solq 35758-12042010 00001cIW59IBVHRPp019pvqMI0zUcw RqOCGkr4xcLxYJaUE6RgIfTVRv43kV 80GauemJf4PvNrFQdFYdjTGBTmZZXQ   软件安装完毕就需要为其配置node,方法如下:   点击圈中的icon,会有对话框弹出。
904 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
10167 0
+关注
20381
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载