1.0 下载安装包

1.0.1 从官网下载nodejs

地址:http://nodejs.cn/download/
image.png

1.0.2 复制下载链接

网速不快,可以本地下载再上传
image.png

  1. wget https://npm.taobao.org/mirrors/node/v14.16.1/node-v14.16.1-linux-x64.tar.gz

没有wget 先安装wget

  1. yum install -y wget

2.0 处理下载包

2.0.1 解压压缩包

  1. [root@node02 11]# tar -zxvf node-v14.16.1-linux-x64.tar.gz
  2. [root@node02 11]# ls -ll
  3. 总用量 32760
  4. drwxr-xr-x. 6 1001 1001 108 4 7 01:28 node-v14.16.1-linux-x64
  5. -rw-r--r--. 1 root root 33545521 4 7 04:53 node-v14.16.1-linux-x64.tar.gz
  6. [root@node02 11]# mv node-v14.16.1-linux-x64 nodejs-9000 && cd nodejs-9000
  7. [root@node02 nodejs-9000]# ll
  8. 总用量 168
  9. drwxr-xr-x. 2 1001 1001 40 4 7 01:28 bin
  10. -rw-r--r--. 1 1001 1001 53523 4 7 01:28 CHANGELOG.md
  11. drwxr-xr-x. 3 1001 1001 18 4 7 01:28 include
  12. drwxr-xr-x. 3 1001 1001 26 4 7 01:28 lib
  13. -rw-r--r--. 1 1001 1001 80117 4 7 01:28 LICENSE
  14. -rw-r--r--. 1 1001 1001 29006 4 7 01:28 README.md
  15. drwxr-xr-x. 5 1001 1001 45 4 7 01:28 share

3.0 常用设置

3.0.1 设置软连接

  1. [root@node02 bin]# pwd
  2. /opt/11/nodejs-9000/bin
  3. [root@node02 bin]# ll
  4. 总用量 72144
  5. -rwxr-xr-x. 1 1001 1001 73873984 4 7 01:28 node
  6. lrwxrwxrwx. 1 1001 1001 38 4 7 01:28 npm -> ../lib/node_modules/npm/bin/npm-cli.js
  7. lrwxrwxrwx. 1 1001 1001 38 4 7 01:28 npx -> ../lib/node_modules/npm/bin/npx-cli.js
  8. [root@node02 bin]# ll
  9. 总用量 72144
  10. -rwxr-xr-x. 1 1001 1001 73873984 4 7 01:28 node
  11. lrwxrwxrwx. 1 1001 1001 38 4 7 01:28 npm -> ../lib/node_modules/npm/bin/npm-cli.js
  12. lrwxrwxrwx. 1 1001 1001 38 4 7 01:28 npx -> ../lib/node_modules/npm/bin/npx-cli.js
  13. [root@node02 bin]# ln -s /opt/11/nodejs-9000/bin/node /usr/local/bin/node
  14. [root@node02 bin]# node -v
  15. v14.16.1
  16. [root@node02 bin]# ln -s /opt/11/nodejs-9000/bin/npm /usr/local/bin/npm
  17. [root@node02 bin]# npm -v
  18. 6.14.12

4.0 nodejs部署配置pm2

4.0.1 pm2使用场合

  1. supervisor是开发环境用。
  2. forever管理多个站点,每个站点访问量不大,不需要监控。
  3. pm2 网站访问量比较大,需要完整的监控界面

    4.0.2 pm2主要特性

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

  5. 后台运行
  6. 0秒停机重载,我理解大概意思是维护升级的时候不需要停机.
  7. 具有Ubuntu和CentOS 的启动脚本
  8. 停止不稳定的进程(避免无限循环)
  9. 控制台检测
  10. 提供 HTTP API
  11. 远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互)

    4.0.3 使用npm安装pm2

    ```bash [root@node02 bin]# npm install -g pm2 /opt/11/nodejs-9000/bin/pm2 -> /opt/11/nodejs-9000/lib/node_modules/pm2/bin/pm2 /opt/11/nodejs-9000/bin/pm2-docker -> /opt/11/nodejs-9000/lib/node_modules/pm2/bin/pm2-docker /opt/11/nodejs-9000/bin/pm2-dev -> /opt/11/nodejs-9000/lib/node_modules/pm2/bin/pm2-dev /opt/11/nodejs-9000/bin/pm2-runtime -> /opt/11/nodejs-9000/lib/node_modules/pm2/bin/pm2-runtime npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.3.1 (node_modules/pm2/node_modules/chokidar/node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {“os”:”darwin”,”arch”:”any”} (current: {“os”:”linux”,”arch”:”x64”})
  • pm2@4.5.6 added 175 packages from 194 contributors in 38.241s [root@node02 bin]# ll 总用量 72144 -rwxr-xr-x. 1 1001 1001 73873984 4月 7 01:28 node lrwxrwxrwx. 1 1001 1001 38 4月 7 01:28 npm -> ../lib/node_modules/npm/bin/npm-cli.js lrwxrwxrwx. 1 1001 1001 38 4月 7 01:28 npx -> ../lib/node_modules/npm/bin/npx-cli.js lrwxrwxrwx. 1 1001 1001 31 5月 10 14:59 pm2 -> ../lib/node_modules/pm2/bin/pm2 lrwxrwxrwx. 1 1001 1001 35 5月 10 14:59 pm2-dev -> ../lib/node_modules/pm2/bin/pm2-dev lrwxrwxrwx. 1 1001 1001 38 5月 10 14:59 pm2-docker -> ../lib/node_modules/pm2/bin/pm2-docker lrwxrwxrwx. 1 1001 1001 39 5月 10 14:59 pm2-runtime -> ../lib/node_modules/pm2/bin/pm2-runtime [root@node02 bin]# ln -s /opt/11/nodejs-9000/bin/pm2 /usr/local/bin/pm2 [root@node02 bin]# pm2 -v

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

/\\\\\\__/\\__/\\/\\\\_ \/\\/////////\\\/\\\__/\\\/\\///////\_ \/\__\/\_\/\\//\_/\\//\\\///__\//\_ \/\\\\\\\/\/\\///\\/\\/\/\__/\\/ \/\\/////////__\/\_\///\\/__\/\__/\\//_ \/\__\/\_\///__\/\_/\\//__ \/\__\/\___\/\_/\\/_ \/\__\/\___\/\_/\\\\\\\\ \///__\///__\///_\///////////////

                      Runtime Edition

    PM2 is a Production Process Manager for Node.js applications
                 with a built-in Load Balancer.

            Start and Daemonize any application:
            $ pm2 start app.js

            Load Balance 4 instances of api.js:
            $ pm2 start api.js -i 4

            Monitor in production:
            $ pm2 monitor

            Make pm2 auto-boot at server restart:
            $ pm2 startup

            To go further checkout:
            http://pm2.io/


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

[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2 [PM2] PM2 Successfully daemonized 4.5.6 [root@node02 bin]#

<a name="aDrOL"></a>
#### 4.0.4 pm2命令使用(项目根目录下使用)

1.  pm2 start app.js 启动app项目
1.  pm2 list 列出由pm2管理的所有进程信息,还会显示一个进程会被启动多少次,因为没处理的异常。
1.  pm2 monit 监视每个node进程的CPU和内存的使用情况
1.  pm2 logs 显示所有进程日志
1.  pm2 stop all 停止所有进程
1.  pm2 restart all 重启所有进程
1.  pm2 reload all 0秒停机重载进程 (用于 NETWORKED 进程)
1.  pm2 stop 0 停止指定的进程
1.  pm2 restart 0 重启指定的进程
1.  pm2 startup 产生 init 脚本 保持进程活着
1.  pm2 web 运行健壮的 computer API endpoint (http://localhost:9615)
1.  pm2 delete 0 杀死指定的进程
1.  pm2 delete all 杀死全部进程

<a name="mE5XB"></a>
#### 4.0.5 启动进程的方式详细:

1.  pm2 start app.js -i max 根据有效CPU数目启动最大进程数目
1.  pm2 start app.js -i 3 启动3个进程
1.  pm2 start app.js -x 用fork模式启动 app.js 而不是使用 cluster
1.  pm2 start app.js -x -- -a 23 用fork模式启动 app.js 并且传递参数 (-a 23)
1.  pm2 start app.js --name serverone 启动一个进程并把它命名为 serverone
1.  pm2 stop serverone 停止 serverone 进程
1.  pm2 start app.json 启动进程, 在 app.json里设置选项
1.  pm2 start app.js -i max -- -a 23 在--之后给 app.js 传递参数
1.  pm2 start app.js -i max -e err.log -o out.log 启动 并 生成一个配置文件
<a name="CaiWb"></a>
#### 4.0.6 配置pm2启动文件:
可以通过pm2 start processes.json来启动。<br />在项目根目录下添加文件processes.json:

{ “apps”: [ { “name”: “mywork”, “cwd”: “/srv/node-app/current”, “script”: “bin/xxx”, “log_date_format”: “YYYY-MM-DD HH:mm:ss”, “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 } ] } ``` processes.json说明:

  • apps:json结构,apps是一个数组,每一个数组成员就是对应一个pm2中运行的应用
  • name:应用程序名称
  • cwd:应用程序所在的目录
  • script:应用程序的脚本路径
  • log_date_format:
  • error_file:自定义应用程序的错误日志文件
  • out_file:自定义应用程序日志文件
  • pid_file:自定义应用程序的pid文件
  • instances:
  • min_uptime:最小运行时间,这里设置的是60s即如果应用程序在60s内退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量
  • max_restarts:设置应用程序异常退出重启的次数,默认15次(从0开始计数)
  • cron_restart:定时启动,解决重启能解决的问题
  • watch:是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。
  • merge_logs:
  • exec_interpreter:应用程序的脚本类型,这里使用的shell,默认是nodejs
  • exec_mode:应用程序启动模式,这里设置的是cluster_mode(集群),默认是fork
  • autorestart:启用/禁用应用程序崩溃或退出时自动重启
  • vizion:启用/禁用vizion特性(版本控制)

也可以把启动命令写在package.json里:
“scripts”: {
“start”: “node ./bin/xxx”,
“pm2”:”pm2 start processes.json”
},