Node.js生产环境配置

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

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,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
JavaScript
Nest.js 实战 (十一):配置热重载 HMR 给服务提提速
这篇文章介绍了Nest.js服务在应用程序引导过程中,TypeScript编译对效率的影响,以及如何通过使用webpackHMR来降低应用实例化的时间。文章包含具体教程,指导读者如何在项目中安装依赖包,并在根目录下新增webpack配置文件webpack-hmr.config.js来调整HMR相关的配置。最后,文章总结了如何通过自定义webpack配置来更好地控制HMR行为。
|
29天前
|
JavaScript
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
这篇文章介绍了如何将webpack的配置文件分离成开发环境和生产环境的配置文件,以提高打包效率。
42 1
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
|
11天前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍了如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤。通过这些工具,可以显著提升编码效率和代码质量。
132 4
|
24天前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
119 0
|
2月前
|
JavaScript
Vue3基础(19)___vite.config.js中配置路径别名
本文介绍了如何在Vue 3的Vite配置文件`vite.config.js`中设置路径别名,以及如何在页面中使用这些别名导入模块。
71 0
Vue3基础(19)___vite.config.js中配置路径别名
|
2月前
|
前端开发 JavaScript 安全
node登陆接口权限配置cookie-parser、express-session
本文介绍了在Node.js中使用express-session和cookie-parser实现登录接口的权限配置,包括验证码接口的生成和自定义中间件的创建,用于验证用户权限。
24 0
node登陆接口权限配置cookie-parser、express-session
|
2月前
|
JavaScript 应用服务中间件 Linux
宝塔面板部署Vue项目、服务端Node___配置域名
本文介绍了如何使用宝塔面板在阿里云服务器上部署Vue项目和Node服务端项目,并配置域名。文章详细解释了安装宝塔面板、上传项目文件、使用pm2启动Node项目、Vue项目打包上传、以及通过Nginx配置域名和反向代理的步骤。
423 0
宝塔面板部署Vue项目、服务端Node___配置域名
|
3月前
|
移动开发 JavaScript 前端开发
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
这篇文章介绍了在UniApp H5项目中处理跨域问题的两种方法:通过修改manifest.json文件配置h5设置,或在项目根目录创建vue.config.js文件进行代理配置,并提供了具体的配置代码示例。
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
|
3月前
|
JSON 前端开发 JavaScript
vue.config.js配置详解
【8月更文挑战第16天】vue.config.js配置详解
56 1
vue.config.js配置详解
|
3月前
|
监控 JavaScript Linux
[译] 在生产环境运行 PM2 & Node.js
[译] 在生产环境运行 PM2 & Node.js
下一篇
无影云桌面