生产环境部署node记录:pm2和nginx

Posted Jason齐齐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生产环境部署node记录:pm2和nginx相关的知识,希望对你有一定的参考价值。

安装完node和npm ,接下来安装pm2

首先简单介绍下pm2,官网的介绍是:

pm2 是一个带有负载均衡功能的Node应用的进程管理器.
当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的。它非常适合IaaS结构,但不要把它用于PaaS方案(随后将开发Paas的解决方案).

备注:SaaS、PaaS和IaaS是云服务模式。
        SaaS 软件即服务,例如Google的 Gmail 邮箱服务.面向应用型用户.
        PaaS 平台即服务.例如Google的GAE,面向开发型用户
        IaaS 基础架构即服务,例如亚马逊的AWS,IaaS对于不知道新推出的应用程序/网站会有多成功的创业公司来说非常有用
 
主要特性:

内建负载均衡(使用Node cluster 集群模块)
后台运行
0秒停机重载,我理解大概意思是维护升级的时候不需要停机.
具有Ubuntu和CentOS 的启动脚本
停止不稳定的进程(避免无限循环)
控制台检测
提供 HTTP API
远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )
 
简单来说,安装完了node ,当你启动主机上已有的服务的时候执行node server.js,此时服务开启,当你ctrl+C关闭当前命令的时候,这个服务便停止了,pm2正是用来解决这个问题的,有了pm2,我们可以在主机上开启服务,并且当服务遇到错误或者其他情况的时候,pm2会帮我们重启这个服务,并且除非你杀掉这个服务,这个服务会一直启动着,同时,pm2还有日志和负载均衡的提供,很方便很强大。
 
【安装pm2】
 
npm install -g pm2

这里我遇到了一些小问题,特地记录下来:

全局安装pm2后在运行任意pm2命令的时候出现 not found,排查原因是因为

 

这里

 

 

这里使用which pm2命令查找pm2命令是否安装成功,提示在对应的几个目录里没有找到pm2,但是下载确实成功了,在 /root/node-v8.4.0-linux-x64/lib/node_modules/pm2/bin/ 下也确实有了pm2的文件,此时,需要做的是建立这个下载路径到系统执行路径的软连接:

ln -s /root/node-v8.4.0-linux-x64/lib/node_modules/pm2/bin/pm2 /usr/local/bin/pm2

 再次运行 pm2命令

搞定!

现在你可以把你的node项目上传到你的主机上面,用git也行,用ftp也行。(以下以express项目为例)

  1。进入项目目录使用npm install下载项目依赖

  2。运行你的项目入口文件(以express项目为例): pm2 start bin/www

  3。查看已启动的服务: pm2 list  

  

 

 

下面简单记录几种pm2的命令:

用法
$ npm install pm2 -g # 命令行安装 pm2
$ pm2 start app.js -i 4 #后台运行pm2,启动4个app.js
                                # 也可以把\'max\' 参数传递给 start
                                # 正确的进程数目依赖于Cpu的核心数目
$ pm2 start app.js --name my-api # 命名进程
$ pm2 list # 显示所有进程状态
$ pm2 monit # 监视所有进程
$ pm2 logs # 显示所有进程日志
$ pm2 stop all # 停止所有进程
$ pm2 restart all # 重启所有进程
$ pm2 reload all # 0秒停机重载进程 (用于 NETWORKED 进程)
$ pm2 stop 0 # 停止指定的进程
$ pm2 restart 0 # 重启指定的进程
$ pm2 startup # 产生 init 脚本 保持进程活着
$ pm2 web # 运行健壮的 computer API endpoint (http://localhost:9615)
$ pm2 delete 0 # 杀死指定的进程
$ pm2 delete all # 杀死全部进程

运行进程的不同方式:
$ pm2 start app.js -i max # 根据有效CPU数目启动最大进程数目
$ pm2 start app.js -i 3 # 启动3个进程
$ pm2 start app.js -x #用fork模式启动 app.js 而不是使用 cluster
$ pm2 start app.js -x -- -a 23 # 用fork模式启动 app.js 并且传递参数 (-a 23)
$ pm2 start app.js --name serverone # 启动一个进程并把它命名为 serverone
$ pm2 stop serverone # 停止 serverone 进程
$ pm2 start app.json # 启动进程, 在 app.json里设置选项
$ pm2 start app.js -i max -- -a 23 #在--之后给 app.js 传递参数
$ pm2 start app.js -i max -e err.log -o out.log # 启动 并 生成一个配置文件
你也可以执行用其他语言编写的app ( fork 模式):
$ pm2 start my-bash-script.sh -x --interpreter bash
$ pm2 start my-python-script.py -x --interpreter python
 
 
 
nginx : (查于百度百科)
Nginx (engine x) 是一个高性能的HTTP反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东新浪网易腾讯淘宝等。
 
Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 php 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。
处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。
无缓存的反向代理加速,简单的负载均衡和容错。
FastCGI,简单的负载均衡和容错。
模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理服务器处理单页中存在的多个 SSI,则这项处理可以并行运行,而不需要相互等待。
 
个人理解是 : nginx 是中介,没有它用户访问网站是 用户->服务器,有了nginx,用户访问是用户->nginx->服务器,所以我们可以设置过滤加强安全,设置些比如请求不到404页面,如此之类的东西
 
【安装NGINX】
  使用Yum安装是推荐的方式,整体的流程非常的简单,也不容易出错,如果不需要什么特殊配置,建议使用Yum尽进行安装。
 
    1、安装epel-release源并进行安装
    
yum install epel-release
yum update
yum install nginx

    2、执行相关的应用操作

systemctl start nginx #启动
systemctl stop nginx #停止
systemctl restart nginx #重启
systemctl status nginx #查看运行状态
systemctl enable nginx #开机启动

     3、设置防火墙

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

 

相关截图:

  第一步:

 

 

 安装过程中会有提示,输入y,回车:

 

 

 

安装完毕,启动 nginx (centos 7.2系统):
 
现在访问你服务的域名:
 

 

 

打开xftp,将你的静态资源放到对应目录里,然后访问
 
静态资源目录:  /usr/share/nginx/html
配置文件目录:  /etc/nginx/nginx.conf
 
然后访问你的页面,搞定!
 
 
 
 
 

 

 

 

以上是关于生产环境部署node记录:pm2和nginx的主要内容,如果未能解决你的问题,请参考以下文章

我们可以同时使用 NGINX 和 PM2 进行 node.js 生产部署吗?

PM2 部署项目

Django 生产环境部署-记录 nginx+uwsgi+Django

在生产环境中运行 NodeJS 服务器

nodejs + pm2 +gitee+Ubuntu 配置一键部署的开发环境

Flask+Gunicorn+Gevent+Supervisor+Nginx生产环境部署