①使用pm2+koa2搭建简单的服务

4,501 阅读5分钟

作为新时代的前端开发猿,我们不应该满足于当前的前端业务上,我们应该多思考一下后端给我们的api那些数据是怎么来的,我们提交的事件后后端是如何接收到传输的这些数据进行处理并保存起来的。

今天我们就一起来使用pm2+koa2搭建一个简单的后台程序,为我们后续实现一些花里胡哨的小功能做铺垫。(天气有点冷~)

技术栈选择

  • 后端技术:koa2

  • 服务支持:pm2

实现功能

  1. 使用pm2 + koa2 来开启一个后端服务的编程之路

安装pm2

PM2(Process Manager 2 )是具有内置负载均衡器的Node.js应用程序的生产运行时和进程管理器。它允许您永久保持应用程序活跃,无需停机即可重新加载它们。

也就是说,你平时在电脑上启动node程序后,只要编辑器一关闭,程序就会被kill,而使用pm2之后他就可以一直保持在后台进程中,直到你使用pm2 kill,这个时候他才会消失。

pm2官网地址:https://pm2.keymetrics.io/


接下来我们就来安装PM2,推荐使用全局安装,因为这样子你可以在随处使用它来管理进程。安装非常的简单--

npm install -g pm2


安装完成之后我们可以使用 pm2 -v 来检查是否安装成功,如果出现版本号证明你的pm2 已经安装成功啦~


安装koa2


Koa框架,嘿嘿,上面截图已经告诉你他是一个什么东西了,就一个框架,一个基于Node.js的web开发框架,如果你想了更多关于koa2的介绍,可以到他们官网进行了解

官网地址:https://koa.bootcss.com/


接下来我们就来安装koa2啦~,Koa 是需要基于node V7.6.0或者更高的版本来运行的,所以请确保你的运行环境中node版本是可以支持koa2的哦~

//首先初始化一个package.json文件
npm init -y
//生成package.json后,安装koa包,我们这里使用npm来进行安装, 
//如果你安装的时候有报错的情况,你可以改成cnpm来安装
npm install koa --save

如果出现以下的这种结果,证明你的koa已经安装成功了



这个时候我们打开我们项目所在的文件夹,可以发现其实只有一个node_module package.json的文件,那我们怎么运行这个koa2呢?

这就是工作的开始啦,我们在根目录创建一个app.js的文件(这个命名没有限制,你开心就好,也可以是index.js),接着我们就在这个.js中编写我们的启动代码

const Koa = require('koa')   //引入koa2
const app = new Koa()   //实例化koa2
app.use( async ( ctx ) => {    //调用koa2的use方法来创建一个上下文  
  ctx.body = '<h2>hello,这是一个在冬天夜里启动的koa2</h2>'
})
app.listen(3000)   //koa运行的端口
console.log('嘿~,小火鸡,koa2已经在3000端口运行起来啦,快去浏览器输入localhost:3000 访问哦~')


这个时候,保存app.js 文件,然后在控制台输入node app.js


接着就可以去浏览器输入 http:localhost:3000,就会出现下面这个图的内容啦~


!!!但是,这个时候我如果把命令行工具给关掉了,然后再去刷新一个浏览器,你就会OMG,我的天!!你会发现,你的网站已经不能访问了。为什么呢?


因为,你关闭命令行工具之后,你的node进程也被你给kill了,死了,他不见了,所以访问不到啦~~

那么这个时候pm2 他就派上了用场了,我们来看看pm2 是怎么帮你守护你的小(node)可(jin)爱(cheng)


配置PM2

在根目录创建pm2.config.js的文件,并编写

module.exports = {  
"apps": {   
 "name": "test_project",                     // 项目名              
"script": "app.js",                         // 执行文件    
"cwd": "./",                                // 根目录    
"args": "",                                 // 传递给脚本的参数    
"interpreter": "",                          // 指定的脚本解释器   
 "interpreter_args": "",                     // 传递给解释器的参数    
"watch": false,                             // 是否监听文件变动然后重启    
"ignore_watch": [                           // 不用监听的文件      
"node_modules",      
"logs"    
],    
"exec_mode": "cluster_mode",                // 应用启动模式,支持fork和cluster模式    
"instances": 4,                             // 应用启动实例个数,仅在cluster模式有效 默认为fork;或者 max    "max_memory_restart": '1G',                    // 最大内存限制数,超出自动重启    
"error_file": "./logs/app-err.log",         // 错误日志文件    
"out_file": "./logs/app-out.log",           // 正常日志文件    
"merge_logs": true,                         // 设置追加日志而不是新建日志    
"log_date_format": "YYYY-MM-DD HH:mm:ss",   // 指定日志文件的时间格式    
"min_uptime": "60s",                        // 应用运行少于时间被认为是异常启动    
"max_restarts": 30,                         // 最大异常重启次数,即小于min_uptime运行时间重启次数;    
"autorestart": true,                        // 默认为true, 发生异常的情况下自动重启    
"cron_restart": "",                         // crontab时间格式重启应用,目前只支持cluster模式;    
"restart_delay": "60s",                     // 异常重启情况下,延时重启时间   
 "env": {      
"NODE_ENV": "production"              // process.env.REMOTE_ADDR    
},    
"env_dev": {        
NODE_ENV: "development"    
},    
"test": {                                  
// 环境参数,当前指定为测试环境 pm2 start app.js --test      
"NODE_ENV": "test"    
}  
}};

通过配置之后我们就可以使用 pm2 start app.js --env test 来启动我们的koa2项目了,此时,我们同样使用http:localhost:3000,就可以访问到和之前使用 node app.js 一模一样的效果啦。而且这一次你把命令行工具关闭,它还是依然可以访问到。(嘿嘿~~)

这个时候你也可以

使用pm2 restart app.js 来重启服务,

使用pm2 kill 把服务停止掉,

使用pm2 list 里查看pm2 现在启动了多少个服务。


到此我们就知道如何使用pm2 + koa2 来搭建一个简单的后台服务,下一篇文章,我们将从实际开发中入手,在这个基础上使用 mysql 进行业务api的开发。