编制程序基础,使用pm2自动化铺排node项目

By admin in 4858美高梅 on 2019年3月26日

1、pm2简介

pm2(process
manager)是二个经过管理工科具,维护二个经过列表,可以用它来管理你的node进程,负责全数正在运营的进度,并查阅node进程的意况,也支撑品质监察和控制,负载均衡等职能。

Centos7安装nodejs、npm、pm2

前些日子,在做 “淘方案” 项目时,写着写着 iOS App 时, 后台 PHP
突然辞职了。一下子招不到后台,等了半个月。领导让自家本人做了。好呢。只可以学起
NodeJS 写了2个后台 API 和 用 Vue
写了个后台管理的网站。今后好不简单要上线了。以下 马克 一下上线经验。

<<编制程序基础-语言JavaScript.Nodejs.Mobile>>
https://github.com/openstf

1.一 、使用pm2管理的node程序的裨益

  1. 监听文件变化,自动重启程序
  2. 帮助品质监察和控制
  3. 负载均衡
  4. 程序崩溃自动重启
  5. 服务重视新运营时自动重新起动
  6. 自动化陈设项目

1、        设置软件包:

① 、购买Ali云服务器 ECS

https://www.aliyun.com/product/ecs
挂号,实名认证,买了个一年360元低于配制
CPU: 1核 / 内部存款和储蓄器: 1024 MB / 带宽:1Mbps / 操作系统: CentOS 7.3

购买环节会设置 ssh 登陆密码,记下密码。

4858美高梅 1

Snip20170830_2.png

登陆到Ali云,查看购买的实例,找到公网 IP

<pre>

贰 、pm2安装与利用

安装nodejs

贰 、登陆服务器

打开 Terminal, 输入

ssh root@公网IP 登陆服务器。第三遍登陆会通晓公钥,yes 即可。

选取 root 用户身份登陆后,会直接进入到下图 鲜黄箭头标出的 root
目录下。先 cd .. 跳转到上一层, 再 ls -a ,就能够见到目录结构了。

4858美高梅 2

Paste_Image.png

详情能够进来那几个网站看看
http://www.runoob.com/linux/linux-system-contents.html

pm2和forever是启动Nodejs服务常用到的多个工具。使用那五个指令能够使node服务在后台运转(类似于linux的nohup),别的它们能够在劳务因不胜或其余原因被杀掉后进行自动重启。
由于Node的单线程特征,自动重启能非常的大程度上的增强它的健壮性。
正文不相比较两者工具优劣,只是结合本身的施用,简要介绍怎么样在工程陈设时更好的运用pm2。

2.壹 、全局安装

npm install pm2 -g 

 

# yum -y install nodejs

常用的 Linux 命令

cd 进入目录
cd .. 重返上三个索引
ls -a 查看当前目录
mkdir abc 创建abc文件夹
mv 移动或重命名
rm 删除三个文书恐怕目录

基本指令

npm install pm2 -g : 全局安装。
pm2 start app.js : 运维服务,入口文件是app.js。
pm2 start app.js -i [n] --name [name]
运维n个进度,名字命名为name。
npm restart [name or id] : 重启服务。
npm reload [name or id]
和rastart功效雷同,可是能够实现0s的无缝衔接;要是有nginx的采用经验,能够相比nginx
reload指令。
pm2 start app.js --max_memory_restart 1024M
当内部存款和储蓄器超越1024M时自动重启。
假诺工程中有比较困难的内部存储器走漏难点,这些好不简单三个折中方案。
pm2 monit : 对服务开始展览监察。

越来越多的命令能够参考 PM2
介绍

2.二 、常用命令

  • 最先二个node程序 

    pm2 start start.js

 4858美高梅 3

  • 启航进度并钦定应用的主次名

    pm2 start app.js –name application1

     

  • 集群格局运行

 

// -i 表示 number-instances 实例数量
// max 表示 PM2将自动检测可用CPU的数量 可以自己指定数量
pm2 start start.js -i max

4858美高梅 4

 

  • 加上经过监视

    // 在文件改变的时候会另行启航程序
    pm2 start app.js –name start –watch

4858美高梅 5

 

  • 列出装有进度

    pm2 list
    pm2 ls // 简写
    
     
    
  • 从进度列表中删去进度

    // pm2 delete [appname] | id
    pm2 delete app  // 指定进程名删除
    pm2 delete 0    // 指定进程id删除
    
     
    
  • 剔除进度列表中颇具进度

    pm2 delete all
    

 

  • 查阅有个别进度具体意况

    pm2 describe app
    

 

4858美高梅 6

 

  • 翻开进程的能源消耗处境
    pm2 monit
    

 

4858美高梅 7

 

  • 重启进度

     pm2 restart app // 重启指定名称的进程
     pm2 restart all // 重启所有进程
    
     
    
  • 查看过程日志

     pm2 logs app    // 查看该名称进程的日志
     pm2 logs all    // 查看所有进程的日志
    
     
    
  • 设置pm2开机自启

拉开启动设置,此处是CentOS系统,其余系统替换最终一个选项(可挑选:ubuntu,
centos, redhat, gentoo, systemd, darwin, amazon)

   pm2 startup centos 

 

下一场按照提示需求输入的一声令下实行输入

最终保存设置

pm2 save

安装npm

三、安装 NodeJS 和 Mongodb

node — 编译后二进制文件应在/usr/local/bin/node 下
mongodb — 安装在/usr/local/mongodb 下

高级用法

pm2辅助配置文件运行:
pm2 ecosystem: 生成配置文件ecosystem.json
pm2 startOrRestart /file/path/ecosystem.json : 通过布置文件运维服务

一般来说是本人付出时ecosystem.json的始末:

  {
    /**
    * Application configuration section
    * http://pm2.keymetrics.io/docs/usage/application-declaration/
    * 多个服务,依次放到apps对应的数组里
    */
    apps : [
    // First application
        {
            name      : "nova",
            max_memory_restart: "300M",
            script    : "/root/nova/app.js",
            out_file : "/logs/nova_out.log",
            error_file : "/logs/nova_error.log",
            instances  : 4,
            exec_mode  : "cluster",
            env: {
                NODE_ENV: "production"
            }
        }
    ]
 }

上述采取cluster格局运营了陆个服务进度;若是服务占用的内部存款和储蓄器超越300M,会自动实行重启。

3、通过pm2配置文件来机关安插项目

管教服务器安装了pm2,没有设置的话先安装

npm install pm2 -g

#yum -y install npm

1.安装 NodeJS

升级 CentOS 的 yum

yum -y update

提高常用库文件

yum -y install gcc gcc-c++ autoconf

跳转到 /usr/local/src , 这么些文件夹经常用来存放在软件源代码

cd /usr/local/src

下载 nodejs 代码

wget
http://nodejs.org/dist/v8.4.0/node-v8.4.0.tar.gz

解压

tar -xzvf node-v8.4.0.tar.gz

进入解压后的文书夹

cd node-v8.4.0

执行配置脚本来进行编译预处理

./configure

编写翻译源代码

make

当编写翻译实现后,必要使之在系统范围内可用,
编写翻译后的二进制文件将被停放到系统路径,暗中同意情状下,Node二进制文件应当放在/user/local/bin/node文件夹下

make install

安装 express 推荐 global 安装

npm -g install express

创立一流链接, 不然 sudo node 时会报 “command not found”

sudo ln -s /usr/local/bin/node /usr/bin/node
sudo ln -s /usr/local/lib/node /usr/lib/node
sudo ln -s /usr/local/bin/npm /usr/bin/npm
sudo ln -s /usr/local/bin/node-waf /usr/bin/node-waf

NodeJS 到那里就大旨安装到位了。

监察和控制工具

pm2的监察和控制功效是其一大特征,它提供的监督服务Keymetrics
monitoring
很酷炫,感兴趣的能够布署玩一下。

 

安装pm2

上传 NodeJS 代码

代码存放地点: /home/
cd /home 进入目录

我使用
https://gitee.com/squallml
码云来中间转播服务器代码,那几个和github 使用大约,主借使个体项目是免费的。

到 home 目录下,接代码下来

git clone
https://gitee.com/squallml/taoprojectserver.git

履新项目库文件

npm install

将来代码更新,只要在团结电脑上 git push 上码云后,服务器上git pull
拉下来就行了。

部分心想

3.1 在类型根目录下新建二个 deploy.yaml 文件

# deploy.yaml
apps:
  - script: ./start.js       # 入口文件
    name: 'app'              # 程序名称
    env:                     # 环境变量
      COMMON_VARIABLE: true
    env_production:
      NODE_ENV: production

deploy:                     # 部署脚本
  production:               # 生产环境
    user: lentoo            # 服务器的用户名
    host: 192.168.2.166     # 服务器的ip地址
    port: 22                # ssh端口
    ref: origin/master      # 要拉取的git分支
    ssh_options: StrictHostKeyChecking=no # SSH 公钥检查
    repo: https://github.com/**.git # 远程仓库地址
    path: /home              # 拉取到服务器某个目录下
    pre-deploy: git fetch --all # 部署前执行
    post-deploy: npm install &&  pm2 reload deploy.yaml --env production # 部署后执行
    env:
      NODE_ENV: production

#npm install pm2 -g

2.安装mongodb

软件设置地点:/usr/local/mongodb
数量存放地方:/home/mongodb/data
日志存放地点:/home/mongodb/logs

下载安装包

cd /usr/local
wget
http://fastdl.mongodb.org/linux/mongodb-linux-x86\_64-3.4.0.tgz

解压安装包,重命名文件夹为mongodb

tar zxvf mongodb-linux-x86_64-3.4.0.tgz
mv mongodb-linux-x86_64-3.4.0 mongodb

创建数量和日志存放目录

mkdir /home/mongodb
mkdir /home/mongodb/data
mkdir /home/mongodb/logs

启动 Mongodb

/usr/local/mongodb/bin/mongod –dbpath=/var/mongodb/data –logpath
/var/mongodb/logs/log.log -fork

启动 mongo shell

cd /usr/local/mongodb/bin/
./mongo

1. 劳动进程数

至于要开动多少个经过,可以经过服务器的内核数举办规定,多少个基础就开发银行多少个服务。指令如下:

  # 查看物理CPU个数
  cat /proc/cpuinfo| grep "physical id" | sort| uniq | wc -l

  # 查看每个物理CPU中core的个数(即核数)
  cat /proc/cpuinfo| grep "cpu cores"| uniq

  # 查看逻辑CPU的个数
  cat /proc/cpuinfo| grep "processor"| wc -l

自然能够运维多少个端口,叁个端口号对应七个劳务,那样的话就要求nignx来做负载均衡了。

3.② 、配置git的ssh免密认证

  1. 在服务器中生成rsa公钥和私钥,当前是 centos7 下进行

  2. 前提服务器要设置git,没有设置的先安装git,已安装的跳过

    yum –y install git
    
  3. 变迁秘钥

     ssh-keygen -t rsa -C "xxx@xxx.com"
    

    在~/.ssh目录下有 id_rsa和
    id_rsa.pub七个文本,个中id_rsa.pub文件里存放的便是公钥key。

  4. 签到到GitHub,点击右上方的头像,接纳settings ,点击Add SSH
    key,把id_rsa.pub的内容复制到里面即可。

 

4858美高梅 8

 

常用命令:

始建数据库管理员

在 mongo shell 中开创管理员及数据库
切换来 admin 数据库,创设一流管理员帐号

use admin
db.createUser({ user: "用户名", pwd:"登陆密码", roles:[{ role: "userAdminAnyDatabase", db: "admin" }] })

切换来要运用的数据库,如 taodb 数据库,创制那么些数据库的管理员帐号

use taodb
db.createUser({ user: "用户名", pwd:"登陆密码", roles:[ { role: "readWrite", db: "taodb" }] //读写权限 })

按二下 control+c 退出 mongo shell

到那里 mongodb 基本已经安装设置完毕了。

2. 是否供给nginx

nginx能够做的政工要害有三个:

  1. 反向代理,达成简单的负荷均衡:
    假如有多台服务器大概一台服务器七个端口,能够考虑用nginx。

  2. 静态财富缓存:把有个别静态能源(如静态页面,js等能源文件)放到nginx里,能够十分大的增高劳动的习性。

3.3 使用pm2安插项目

历次布署前先将本地的代码提交到长途git仓库

  • 第一遍配置

    pm2 deploy deploy.yaml production setup

安顿到位后,既可登陆服务器查看配置的目录下是或不是从git上拉取了项目

  • 重复布署

    pm2 deploy deploy.yaml production upddate

     

$ npm install pm2 -g     # 命令行安装 pm2

④ 、设置 Linux 开机运行 NodeJS 和 Mongodb

3. 自动化铺排

因此shell脚本完成能源拉取、服务重启、nginx缓存更新等操作,再同盟pm2的督察作用,就起来完结了1个后端工程铺排的标配了。

3.4 该铺排流程同样适用前端项目

如vue-cli的种类,自动安排到服务器,自动执行npm run build
命令,生成的dist目录,钦点到nginx的静态文件目录下。

$ pm2 start app.js -i 4  # 后台运行pm2,运转6个app.js

1、安装进程守护软件 PM2

安装pm2

npm install pm2@latest -g

cd 到品种目录

cd /home/taoprojectserver

运维 — 后边是参数 –name 改名, –watch 文件或文件夹变更时自动重启

pm2 start app.js –name “tao” –watch true

把node服务加到进度

pm2 startup centos #pm2 startup ubuntu
pm2 save

那般,NodeJS 就一向在后台运转了,即便重启了,也自动运维。

常用命令计算如下:

安装pm2
npm install pm2@latest -g
开发银行应用
pm2 start app.js
列出具有应用
pm2 list
翻看财富消耗
pm2 monit
查阅某3个使用状态
pm2 describe [app id]
翻开全数日志
pm2 logs
重启应用
pm2 restart [app id]
终止利用
pm2 stop [编制程序基础,使用pm2自动化铺排node项目。app id]
开启api访问
pm2 web

详情查看官网地址:http://pm2.keymetrics.io/docs/usage/quick-start/

参考资料:

  1. pm2官网

  2. node-deploy-practice

  3. pm2监控

pm2是足够美妙工具,它提供对依照node.js的品类周转托管服务。它根据命令行界面,提供不胜枚举特色:
内置的载荷均衡器等等,上面大家就伙同来探视啊。

一、简介

pm2是叁个暗含负载均衡功效的利用进度管理器,类似有Supervisor,forever。

二、安装

Linux
Binaries下载地址:https://nodejs.org/dist
cd oneinstack/src
wget
https://nodejs.org/dist/v4.2.4/node-v4.2.4-linux-x64.tar.gz
tar xzf node-v4.2.4-linux-x64.tar.gz
cp node-v4.2.4-linux-x64/bin/node /usr/local/bin/
cp -R node-v4.2.4-linux-x64/lib/node_modules /usr/local/lib/
ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js
/usr/local/bin/npm
npm install pm2@latest -g #安装新型版本pm2模块
PS:
若是你的主机不可能连接公网,先找到能连公网的主机安装上边的情势安装pm2,然后拷贝到你要安装的主机。拷贝如下目录:
/usr/local/bin/node
/usr/local/lib/node_modules
再创建连锁软连接

叁 、PM2常用命令

一经你以后已经写好了多少个app.js的文书,须要运维,你能够行使pm2开始展览管制

  1. 启动

肆 、恐怕会赶上的坑

  • 在window系统下
    vscode的下令行程序,以及powershell执行计划的命令时,出现布局退步

    pm2 deploy deploy.yaml production setup

4858美高梅 9

 

消除方案:使用git命令行来进行

 

                         # 也足以把’max’ 参数字传送递给 start

贰 、设置 CentOS 开机运维项

开辟rc.local文件,添加CentOS开机运营项:

vim /etc/rc.d/rc.local

进入 vim 模式

按 i 进入编辑格局 参与以下代码到结尾面 按esc 退出 :w 保存 :q 退出

将mongodb运行命令追加到本文件中,让mongodb开机自运维:

/usr/local/mongodb/bin/mongod –dbpath=/home/mongodb/data –logpath
/home/mongodb/logs/log.log -fork

说到底是这么。

4858美高梅 10

Snip20170907_2.png

剥离 vim 后,按须求。运营以下命令

chmod +x /etc/rc.d/rc.local

由来,Ali云 CentOS 服务器配制达成。

重启服务器测试一下。

shutdown -r now

pm2 start app.js

                         # 正确的长河数目正视于Cpu的着力数据

⑤ 、一些工具

pm2 start app.js –name my-api #my-api为PM2经过名称

$ pm2 start app.js –name my-api # 命名进度

1. Cyberduck SFTP管理工科具

网址:https://cyberduck.io/
下载后,新建连接 SFTP ,输入 公网 IP 用户名: root 密码: 后,连接。
现在得以向来用那一个能够管理服务器上文件。

4858美高梅 11

Snip20170830_8.png

LINUX中常用操作命令
http://www.daniubiji.cn/archives/25

参照了以下小说
链接:http://www.jianshu.com/p/0496ef49b2a5

pm2 start app.js -i 0 #依据CPU核数运转进度个数

$ pm2 list               # 突显全体进度情状

pm2 start app.js –watch #实时监察和控制app.js的艺术运营,当app.js文件有改动时,pm2会自动reload

  1. 翻看进度

$ pm2 monit              # 监视全部进程

pm2 list

$ pm2 logs               # 呈现全体进度日志

pm2 show 0 或者 # pm2 info 0 #查阅进度详细新闻,0为PM2进度id

  1. 监控

$ pm2 stop all           # 甘休全体进程

pm2 monit

  1. 停止

$ pm2 restart all        # 重启全数进度

pm2 stop all #终止PM2列表中持有的进度

$ pm2 reload all         # 0 秒停机重载进程 (用于 NETWOWranglerKED 进度)

pm2 stop 0 #停下PM2列表中经过为0的长河

  1. 重载

$ pm2 stop 0             # 结束内定的进度

pm2 reload all #重载PM2列表中全部的历程

$ pm2 restart 0          # 重启钦赐的进程

pm2 reload 0 #重载PM2列表中经过为0的经过

  1. 重启

$ pm2 startup            # 产生 init 脚本 保持进度活着

pm2 restart all #重启PM2列表中装有的进度

$ pm2 web                # 运维健壮的 computer API endpoint
()

pm2 restart 0 #重启PM2列表中经过为0的进度

  1. 删除PM2进程

$ pm2 delete 0           # 杀死钦命的经过

pm2 delete 0 #删去PM2列表中经过为0的长河

$ pm2 delete all         # 杀死全数进程

pm2 delete all #去除PM2列表中有所的历程

  1. 日记操作

 

pm2 logs [–raw] #Display all processes logs in streaming

布局服务:

pm2 flush #Empty all log file

$ pm2 deploy <configuration_file> <environment> <command>

pm2 reloadLogs #Reload all logs

  1. 升级PM2

 

npm install pm2@lastest -g #安装新型的PM2版本

Commands:

pm2 updatePM2 #升级pm2

  1. 更多命令参数请查看补助

    setup                run remote setup commands

pm2 –help

四 、PM2目录结构

暗中同意的目录是:当前用于的家目录下的.pm2目录(此目录能够自定义,请参考:5、自定义运维文件),详细消息如下:
$HOME/.pm2 #will contain all PM2 related files
$HOME/.pm2/logs #will contain all applications logs
$HOME/.pm2/pids #will contain all applications pids
$HOME/.pm2/pm2.log #PM2 logs
$HOME/.pm2/pm2.pid #PM2 pid
$HOME/.pm2/rpc.sock #Socket file for remote commands
$HOME/.pm2/pub.sock #Socket file for publishable events
$HOME/.pm2/conf.js #PM2 Configuration

五 、自定义运营文件

创设三个test.json的示范文件,格式如下:
{
“apps”:
{
“name”: “test”,
“cwd”: “/data/wwwroot/nodejs”,
“script”: “./test.sh”,
“exec_interpreter”: “bash”,
“min_uptime”: “60s”,
“max_restarts”: 30,
“exec_mode” : “cluster_mode”,
“error_file” : “./test-err.log”,
“out_file”: “./test-out.log”,
“pid_file”: “./test.pid”
“watch”: false
}
}

说明:

apps:json结构,apps是2个数组,每贰个数组成员固然对应多少个pm第22中学运作的运用
name:应用程序的称谓
cwd:应用程序所在的目录
script:应用程序的脚本路径
exec_interpreter:应用程序的台本类型,那里运用的shell,暗许是nodejs
min_uptime:最流年行时刻,那里设置的是60s即只要应用程序在60s内部退休出,pm2会认为程序万分退出,此时触发重启max_restarts设置数量
max_restarts:设置应用程序相当退出重启的次数,默许1七遍(从0先导计数)
exec_mode:应用程序运转形式,那里安装的是cluster_mode(集群),默认是fork
error_file:自定义应用程序的一无所能日志文件
out_file:自定义应用程序日志文件
pid_file:自定义应用程序的pid文件
watch:是不是启用监察和控制情势,暗中认可是false。假若设置成true,当应用程序变动时,pm2会自动重载。那里也能够设置你要监督的公文。
详细参数列表:见附属类小部件八

六、实例

已上边的test.json为例

    update              
update deploy to the
latest release

cat > /data/wwwroot/nodejs/test.sh << EOF

    revert [n]           revert to [n]th last deployment or 1

!/bin/bash

while :
do
echo “Test” >> 1.log
sleep 5
done
EOF

    curr[ent]            output current release commit

chmod +x test.sh #丰硕推行权限

    prev[ious]           output previous release commit

pm2 start test.json #启动,如下图:

[图形上传退步…(image-291475-1511349583307)]

    exec|run
<cmd>       execute the given <cmd>

pm2 list #查看pm2进程,如下图:

[图表上传失利…(image-1f3f2c-1511349583307)]

七、备注
其他可参数见官网:http://pm2.keymetrics.io

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

安装:npm install -g pm2

启航程序:pm2 start <app_name|id|all>

历数进度:pm2 list

退出程序:pm2 stop <app_name|id|all>

重起应用:pm2 restart

先后消息:pm2 describe id|all

监控:pm2 monit

实时集中log处理: pm2 logs

API:pm2 web (端口:9615 )

<pre>

    list                
list previous deploy commits

使用PM2来部署nodejs项目。

比方直白通过node
app来运转,借使报错了大概直接停在全体运营,supervisor感觉只是拿来作为开发条件的。再网上找到pm2.当下犹如最普遍的线上配置nodejs项指标有forever,pm2那二种。
应用场地:

  • supervisor是付出条件用。

  • forever管理四个站点,每一种站点访问量相当小,不须求监察和控制。

  • pm2 网站访问量相比大,供给总体的督察界面。

    [ref]                deploy to [ref],
the“ref” setting,
or latest tag

PM2的根本特征:

  • 内建负载均衡(使用Node cluster 集群模块)

  • 后台运转

  • 0秒停机重载,小编驾驭大致意思是有限支撑升级的时候不必要停机.

  • 具备Ubuntu和CentOS 的开行脚本

  • 停下不安静的进度(制止无限循环)

  • 控制台检查和测试

  • 提供 HTTP API

  • 长途控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

 

安装

npm install -g pm2

初始化:

用法

$ npm install -g pm2 命令行全局安装pm2
$ pm2 start app.js 启动app项目
$ pm2 list
列出由pm2管理的保有进程音讯,还会显得2个经过会被运营多少次,因为没处理的充足。

4858美高梅 12

image

$ pm2 monit 监视种种node进程的CPU和内部存款和储蓄器的行使景况

4858美高梅 13

image

$ pm2 logs 展现全体进度日志
$ pm2 stop all 结束全数进度
$ pm2 restart all 重启全体进程
$ pm2 reload all 0秒停机重载进度 (用于 NETWO奇骏KED 进度)
$ 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 运维 并
生成1个布局文件

#pm2  deploy  ecosystem.json  production 
setup

配置pm2开发银行文件

在档次根目录添加三个processes.json:
情节如下:

{
  "apps": [
    {
      "name": "mywork",
      "cwd": "/srv/node-app/current",
      "script": "bin/www",
      "log_date_format": "YYYY-MM-DD HH:mm Z",
      "error_file": "/var/log/node-app/node-app.stderr.log",
      "out_file": "log/node-app.stdout.log",
      "pid_file": "pids/node-geo-api.pid",
      "instances": 6,
      "min_uptime": "200s",
      "max_restarts": 10,
      "max_memory_restart": "1M",
      "cron_restart": "1 0 * * *",
      "watch": false,
      "merge_logs": true,
      "exec_interpreter": "node",
      "exec_mode": "fork",
      "autorestart": false,
      "vizion": false
    }
  ]
}

说明:

  • apps:json结构,apps是1个数组,每三个数组成员即使对应三个pm第22中学运作的运用

  • name:应用程序名称

  • cwd:应用程序所在的目录

  • script:应用程序的本子路径

  • log_date_format:

  • error_file:自定义应用程序的不当日志文件

  • out_file:自定义应用程序日志文件

  • pid_file:自定义应用程序的pid文件

  • instances:

  • min_uptime:最小运行时刻,那里设置的是60s即只要应用程序在60s内退出,pm2会认为程序卓殊退出,此时触发重启max_restarts设置数量

  • max_restarts:设置应用程序卓殊退出重启的次数,默许1八回(从0初始计数)

  • cron_restart:定时运行,消除重启能缓解的标题

  • watch:是还是不是启用监察和控制情势,暗中认可是false。假使设置成true,当应用程序变动时,pm2会自动重载。那里也能够安装你要监督的文书。

  • merge_logs:

  • exec_interpreter:应用程序的本子类型,那里运用的shell,暗中同意是nodejs

  • exec_mode:应用程序运行情势,那里设置的是cluster_mode(集群),默认是fork

  • autorestart:启用/禁止使用应用程序崩溃或剥离时自动重启

  • vizion:启用/禁止使用vizion天性(版本控制)

能够经过pm2 start processes.json来启动。
也能够把命令写在package.json里。如下:

4858美高梅 14

image

pm2 是一个富含负载均衡效率的Node应用的历程管理器.

当您要把您的独立代码应用一切的服务器上的拥有CPU,并保险进度永远都活着,0秒的重载,
PM2是应有尽有的。它丰硕适合IaaS结构,但决不把它用来PaaS方案(随后将付出Paas的消除方案).

备注:SaaS、PaaS和IaaS是云服务格局。
SaaS 软件即服务,例如谷歌(Google)的 Gmail 邮箱服务.面向应用型用户.
PaaS 平台即服务.例如谷歌(Google)的GAE,面向开发型用户
IaaS
基础架构即服务,例如亚马逊(Amazon)的AWS,IaaS对于不理解新推出的应用程序/网站会有多成功的创业集团来说越发有效

请参考
云服务情势:SaaS、PaaS和IaaS,哪个种类适合你?

重在特征:

内建负载均衡(使用Node cluster 集群模块)

后台运维

0秒停机重载,笔者理解大约意思是维护升级的时候不须求停机.

享有Ubuntu和CentOS 的起步脚本

悬停不平稳的长河(防止无限循环)

控制台检查和测试

提供 HTTP API

长途控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

测试过Nodejs v0.11 v0.10 v0.8版本,兼容CoffeeScript,基于Linux 和MacOS.

安装

npm install -g pm2

用法

$ npm install pm2 -g # 命令行安装 pm2

$ pm2 start app.js -i 4 #后台运营pm2,运维四个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秒停机重载进度 (用于 NETWO奇骏KED 进度)

$ 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 # 运维1个进程并把它取名为
serverone

$ pm2 stop serverone # 停止 serverone 进程

$ pm2 start app.json # 运转进度, 在 app.json里设置选项

$ pm2 start app.js -i max — -a 23 #在–之后给 app.js 传递参数

4858美高梅,$ 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

0秒停机重载:

那项成效允许你再度载入代码而不用失去请求连接。

注意:

仅能用来web应用

运行于Node 0.11.x版本

运作于 cluster 方式(默许方式)

$ pm2 reload all

CoffeeScript:

$ pm2 start my_app.coffee #那正是全部

PM2准备好为产品级服务了啊?

只需在您的服务器上测试

$ git clone

https://github.com/Unitech/pm2.git

$ cd pm2

$ npm install # 或许 npm install –dev ,假使devDependencies 没有设置

$ npm test

pm2 list

列出由pm2管理的全部进程音讯,还会议及展览示一个历程会被运营多少次,因为没处理的分外。

|

4858美高梅 15

image

|
| |

pm2 monit

蹲点各种node进度的CPU和内部存款和储蓄器的使用状态。

|

4858美高梅 16

image

|

#pm2  deploy  ecosystem.json  production 
–force

运维进度的两样措施

$ 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

 

Pm2升级:

$ git clone https://github.com/Unitech/pm2.git

$ cd pm2

$ npm install  # 或者 npm install --dev ,如果devDependencies 没有安装

$ npm test

Pm2 回滚

① 、查看当前的deploy的deploy id及commit-id:

# pm2 deploy ecosystem.josn daily curr

 

贰 、查看上3回deploy的deploy id及commit-id:

# pm2 deploy ecosystem.json daily prev

 

③ 、查看全部的deploy的deploy id及commit-id:

# pm2 deploy ecosystem.json daily list

 

四 、回滚到相应的版本:

# pm2 deploy ecosystem.json daily revert deploy-id

 

pm2运作在cluster情势下,进行在线扩张:

#pm2 scacle  <App-name>  number

如想把API,扩充为三节点

#pm2 scacle  API  3

 

 

2、        利用放式:

1)        nginx配置

    server {

    server_name your.domain.com;

    return 301 $scheme://domain.com$request_uri;

}

server {

      listen 80;

server_name domain.com;

client_max_body_size 10G;

location / {

    proxy_set_header X-Real-IP $remote_addr;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_set_header Host $http_host;

    proxy_set_header X-NginX-Proxy true;

    proxy_pass ;

    proxy_redirect off;

    proxy_buffering off;

     }

       }

     2) deploy

#app.js

     

var express = require(‘express’);

var app = express();

app.get(‘/‘, function(req, res) {

  res.send(‘Hello, World!’);

});

var server = app.listen(3000, function() {

console.log(‘Server listening at ‘, host, port);

});

#pm2

生成pm2的配备文件,pm2使用ecosystem.json为布局文件,使用以下命令生成:

# pm2  ecosystem

布局样例:

{

  “apps”: [

    {

      “name”: “lion-API”,

      “script”: “server.js”,

      “env”: {

        “newrelic”: “true”,

        “PORT_SERVER”: 10010

      },

      “instances”: 1,

      “exec_mode”: “cluster”,

      “merge_logs”: true,

      “log_date_format” : “YYYY-MM-DD HH:mm Z”,

    },

    {

      “name”: “lion-adminApiServer”,

      “script”: “admin/adminApiServer.js”,

      “env”: {

        “newrelic”: “true”,

        “NEW_RELIC_HOME”: “./admin”,

        “PORT_ADMIN”: 10011

      },

      “instances”: 1,

      “exec_mode”: “cluster”,

      “max_memory_restart”: “900M”

    }

  ],

  “deploy”: {

    “lion”: {

      “user”: “root”,

      “host”: “10.10.105.121”,

      “ref”: “origin/lion”,

      “repo”: “git@gitlab.xinpinget.com:fireball/Saturn.git”,

      “path”: “/data/lion”,

      “post-setup”: “cnpm install”,

      “post-deploy”: “NODE_ENV=daily cnpm install &&
MONGO_DB=saturn_daily NODE_ENV=daily npm run-script test && pm2
startOrReload deploy/ecosystem.lion.json –env lion”,

      “env”: {

        “NODE_ENV”: “daily”,

        “MORGAN”: true

 

      }

    }

  }

}

 

 

 

 

 

配置表达:

{ “apps”: [ { “name”: “mywork”,

“cwd”: “/srv/node-app/current”,

“script”: “bin/www”,

“log_date_format”: “YYYY-MM-DD HH:mm Z”,

“error_file”: “/var/log/node-app/node-app.stderr.log”,

“out_file”: “log/node-app.stdout.log”,

“pid_file”: “pids/node-geo-api.pid”,

“instances”: 6,

“min_uptime”: “200s”,

“max_restarts”: 10,

“max_memory_restart”: “500M”,

“cron_restart”: “1 0 * * *”,

“watch”: false,

“merge_logs”: true,

“exec_interpreter”: “node”,

“exec_mode”: “cluster”,

“autorestart”: false,

“vizion”: false } ]

}

 

  • apps:json结构,apps是一个数组,每二个数组成员就是对应3个pm第22中学运维的行使
  • name:应用程序名称
  • cwd:应用程序所在的目录
  • script:应用程序的本子路径
  • log_date_format: 定义日期格式
  • error_file:自定义应用程序的失实日志文件
  • out_file:自定义应用程序日志文件
  • pid_file:自定义应用程序的pid文件
  • instances: 运转的实例数,在cluster格局下行使多实例。
  • min_uptime:最小运行时刻,那里安装的是60s即假若应用程序在60s内部退休出,pm2会认为程序12分退出,此时触发重启max_restarts设置数量
  • max_restarts:设置应用程序分外退出重启的次数,默许1七回(从0早先计数)
  • cron_restart:定时运行,化解重启能缓解的难点
  • watch:是还是不是启用监察和控制情势,默许是false。假使设置成true,当应用程序变动时,pm2会自动重载。那里也得以设置你要监督的文书。
  • merge_logs:
  • exec_interpreter:应用程序的剧本类型,那里运用的shell,暗中同意是nodejs
  • exec_mode:应用程序运维格局,那里设置的是cluster_mode(集群),默认是fork
  • autorestart:启用/禁止使用应用程序崩溃或剥离时自动重启
  • vizion:启用/禁止使用vizion个性(版本控制)

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有