搭建Node.js生产环境

前面的章节中,我们聊到过nvm的使用 ,在服务器上将使用它来管理不同版本的node以适应不同项目的需要(如果你没这个需要直接安装特定版本的Node也是没问题的)

使用curl 或者 wget 安装

  1. curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
  1. wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

执行完这个脚本后,输入 nvm 并不能使用。需要在新的终端打开才能开始使用(重新连接服务器),现在输入nvm就可以看到nvm的提示信息。我们使用最新的长期支持版现在为Carbon 8.11.3

  1. $ nvm install lts/carbon

安装完毕后,输入node -v 就可以查看node版本。当然你还可以下载其他版本的node,比如下载最新稳定版的 node

  1. $ nvm install node

然后使用nvm use xx 来指定版本,使用nvm alias default xx来指定默认版本。

在安装搭建本地环境的时候就说过由于GFW的原因,国内访问npm会很慢,如何解决前面聊过,这儿就不再讲了,如果你用的国外的主机就不用管npm的网络问题了。

使用pm2

当项目要跑在服务器上时,不能单单依靠node index.js 来启动,我们需要强大一点的进程管理工具来部署应用,pm2无疑是最主流的选择

安装pm2

  1. $ npm i -g pm2

现在再在服务器上来个hello,在用户根目录下新建一个app.js

  1. const http = require('http')
  2. const port = 8080
  3. const server = http.createServer((req, res) => {
  4. res.statusCode = 200
  5. res.setHeader('Content-Type', 'text/plain')
  6. res.end('你好,JavaScript之禅的朋友\n')
  7. })
  8. server.listen(port, () => {
  9. console.log(`服务器运行在 http://127.0.0.1:${port}/`)
  10. })

node app.js将它跑起来,这下在浏览器输入ip:端口 就可以访问到这个应用了。

server_hi

如果你用的阿里云,它有安全组设置,需要配置一下,将端口开放。

img

现在出现一个问题,退出或是关闭连接时,这个应用也会停掉。机智的你应该已经想到了使用nohup命令了吧

  1. $ nohup node app.js

如何关闭

  1. # 先通过端口查看对应的pid
  2. $ lsof -i:8080
  3. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  4. node 1839 manager 10u IPv4 19519 0t0 TCP *:http-alt (LISTEN)
  5. # kill对应的pid
  6. $ kill 1839

如果直接用这个能满足我们,那还上面的pm2不就白介绍了。

使用pm2 来做这些工作很方便,同时很强大,方便查看node进程的状态,也支持性能监控,进程守护,负载均衡等功能

启动应用

  1. $ pm2 start app.js

重启

  1. pm2 restart app.js

结束应用

可以先通过pm2 list获取应用的名字(—name指定的)或者进程id。

  1. $ pm2 stop app_name|app_id

列出所有pm2启动的进程

  1. $ pm2 list