一. 使用koa-generator生成koa2项目
1.首先安装koa-generator
npm install -g koa-generator
建立软连接
ln -s /opt/nodejs/node-v10.9.0-linux-x64/bin/koa2 /usr/local/bin/koa2
- 在你想创建工程的目录里执行
koa2 myKoa2
- 成功创建项目后,进入项目目录,并执行npm install命令
$ cd myKoa2
$ npm install
- 启动项目
这个命令使用nodemon实现里即时更新
npm run dev
如果是生产环境可以用 (不带即时更新)
npm start
默认端口: http://localhost:3000
调试信息看上去很舒服
二. 目录结构
.
+-- bin
| +-- www // 项目启动必备文件,配置端口等服务信息
+-- node_modules // 项目依赖,安装的所有模块都会在这个文件夹下
+-- public // 存放静态文件,如样式、图片等
| +-- images // 图片
| +-- javascript // js文件
| +-- stylesheets // 样式文件
+-- routers // 存放路由文件,如果前后端分离的话只用来书写api接口使用
| +-- index.js
| +-- user.js
+-- views // 存放存放模板文件,就是前端页面,如果后台只是提供api的话,这个就是备用
| +-- error.pug
| +-- index.pug
| +-- layout.pug
+-- app.js // 主入口文件
+-- package.json // 存储项目名、描述、作者、依赖等等信息
+-- package-lock.json // 存储项目依赖的版本信息,确保项目内的每个人安装的版本一致
三. 配置文件 /bin/www
#!/usr/bin/env node
/**
* Module dependencies.
*/
//引入app.js
var app = require('../app');
//引入debug模块
var debug = require('debug')('demo:server');
//引入http模块
var http = require('http');
/**
* Get port from environment and store in Express.
*/
//初始化端口 3000端口
var port = normalizePort(process.env.PORT || '3000');
// app.set('port', port);
/**
* Create HTTP server.
*/
//创建服务
var server = http.createServer(app.callback());
/**
* Listen on provided port, on all network interfaces.
*/
//服务绑定port端口
server.listen(port);
//服务绑定onerror事件
server.on('error', onError);
//服务绑定onListening监听事件
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
四. 强杀node
有时候, 我们无意间断开了远程服务器链接, 当我们再重新链接时, koa2项目其实还在运行, 如果我们想更新项目(比如使用git), 当我们使用npm start
时,会出现端口被占用错误, 这是因为之前的koa2 nodejs进程还在运行, 此时使用以下方式杀死进程
killall node
五. 使用PM2启动koa2项目
首先确保自己全局安装好了 PM2, 然后:
在koa2中需要这样启动:
pm2 start ./bin/www --name="www"
六. 在宝塔面板中启动PM2来启动KOA2项目
在商店中下载安装PM2工具包(nodejs, npm , nvm , pm2会一并安装)
安装完成后,进入设置页面
这里要说声抱歉, 我尝试了很多方法没解决 端口OFF 的问题
索性还是通过上一节的语句启动一次, 当使用代码第一次启动完成后, 宝塔会监测到这个进程, 之后就可以使用宝塔pm2插件接管了
七. PM2主要命令
对koa2来说,还是要把app.js 换成 ./bin/www
$ pm2 start app.js # 启动app.js应用程序
$ pm2 start app.js -i 4 # cluster mode 模式启动4个app.js的应用实例. 4个应用程序会自动进行负载均衡
$ pm2 start app.js --name="api" # 启动应用程序并命名为 "api"
$ pm2 start app.js --watch # 当文件变化时自动重启应用
$ pm2 start script.sh # 启动 bash 脚本
$ pm2 list # 列表 PM2 启动的所有的应用程序
$ pm2 monit # 显示每个应用程序的CPU和内存占用情况
$ pm2 show [app-name] # 显示应用程序的所有信息
$ pm2 logs # 显示所有应用程序的日志
$ pm2 logs [app-name] # 显示指定应用程序的日志
$ pm2 flush # 清空所有日志文件
$ pm2 stop all # 停止所有的应用程序
$ pm2 stop 0 # 停止 id为 0的指定应用程序
$ pm2 restart all # 重启所有应用
$ pm2 reload all # 重启 cluster mode下的所有应用
$ pm2 gracefulReload all # Graceful reload all apps in cluster mode
$ pm2 delete all # 关闭并删除所有应用
$ pm2 delete 0 # 删除指定应用 id 0
$ pm2 scale api 10 # 把名字叫api的应用扩展到10个实例
$ pm2 reset [app-name] # 重置重启数量
$ pm2 startup # 创建开机自启动命令
$ pm2 save # 保存当前应用列表
$ pm2 resurrect # 重新加载保存的应用列表
$ pm2 update # Save processes, kill PM2 and restore processes
$ pm2 generate # Generate a sample json configuration file
pm2文档地址:http://pm2.keymetrics.io/docs/usage/quick-start/