Node.js生产环境配置

本文涉及的产品
云数据库 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,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
JavaScript 前端开发
【快捷键配置】常用HTML类名、CSS样式名称、JS方法变量名、vue代码片段
【快捷键配置】常用HTML类名、CSS样式名称、JS方法变量名、vue代码片段
|
2月前
|
中间件
egg.js 24.17中间件配置
egg.js 24.17中间件配置
20 0
egg.js 24.17中间件配置
|
3月前
|
API
在vite.config.js 配置代理
在vite.config.js 配置代理
86 2
|
3月前
|
Web App开发 缓存 JavaScript
【安装指南】nodejs下载、安装与配置详细教程
这篇博文详细介绍了 Node.js 的下载、安装与配置过程,为初学者提供了清晰的指南。读者通过该教程可以轻松完成 Node.js 的安装,了解相关配置和基本操作。文章首先介绍了 Node.js 的背景和应用场景,随后详细说明了下载安装包、安装步骤以及配置环境变量的方法。作者用简洁明了的语言,配以步骤图示,使得读者能够轻松跟随教程完成操作。总的来说,这篇文章为初学者提供了一个友好的入门指南,使他们能够顺利开始使用 Node.js 进行开发。
245 1
【安装指南】nodejs下载、安装与配置详细教程
|
1天前
|
缓存 资源调度 JavaScript
nodejs环境安装与配置记录
nodejs环境安装与配置记录
|
12天前
|
JavaScript 前端开发 Linux
Node.js安装与配置
`Node.js` 是一个基于 `Chrome V8` 引擎的 `JavaScript` 运行环境,它允许开发者使用 `JavaScript` 编写服务器端代码。以下是 `Node.js` 的安装与配置的详细步骤:
Node.js安装与配置
|
16天前
|
JSON JavaScript 前端开发
vue2_vite.config.js的proxy跨域配置和nginx配置代理有啥区别?
vue2_vite.config.js的proxy跨域配置和nginx配置代理有啥区别?
32 1
|
1月前
|
JavaScript Windows
NodeJS 安装及环境配置
NodeJS 安装及环境配置
|
3月前
|
缓存 JavaScript
2023年8月份nodejs——v20.5.1版本安装与环境配置
2023年8月份nodejs——v20.5.1版本安装与环境配置
69 1
|
3月前
|
数据安全/隐私保护
Wiki.js 配置 LDAP 认证
Wiki.js 配置 LDAP 认证