首页 > 其他 > 详细

对部署_nginx_pm2_docker的研究 1

时间:2020-07-02 15:01:49      阅读:80      评论:0      收藏:0      [点我收藏+]

 

   如何构建?个?可?的node环境
   
   主要解决问题
   故障恢复
   多核利?
   http://www.sohu.com/a/247732550_796914
   多进程共享端?
 
 
// app.js
const Koa = require(‘koa‘);
// 创建?个Koa对象表示web app本身:
const app = new Koa();
// 对于任何请求,app将调?该异步函数处理请求:
app.use(async (ctx, next) => {
// 随机产?错误
Math.random() > 0.9 ? aaa() : ‘2‘
await next();
ctx.response.type = ‘text/html‘;
ctx.response.body = ‘<h1>Hello, koa2!</h1>‘;
});
if (!module.parent) {
app.listen(3000);
console.log(‘app started at port 3000...‘);
} else {
module.exports = app
}
 
// test.js
var http = require(‘http‘);
setInterval(async () => {
try {
await http.get(‘http://localhost:3000‘);
} catch (error) {
}
}, 1000)
// cluster.js
var cluster = require(‘cluster‘);
var os = require(‘os‘); // 获取CPU 的数量
var numCPUs = os.cpus().length;
var process = require(‘process‘)
console.log(‘numCPUs:‘, numCPUs)
 
var workers = {};
if (cluster.isMaster) {
// 主进程分?
cluster.on(‘death‘, function (worker) {
// 当?个?作进程结束时,重启?作进程 delete workers[worker.pid];
worker = cluster.fork();
workers[worker.pid] = worker;
});
// 初始开启与CPU 数量相同的?作进程
for (var i = 0; i < numCPUs; i++) {
var worker = cluster.fork();
workers[worker.pid] = worker;
}
} else {
// ?作进程分?,启动服务器
var app = require(‘./app‘);
app.use(async (ctx, next) => {
console.log(‘worker‘ + cluster.worker.id + ‘,PID:‘ + process.pid)
next()
})
app.listen(3000);
}
// 当主进程被终?时,关闭所有?作进程
process.on(‘SIGTERM‘, function () {
for (var pid in workers) {
process.kill(pid);
}
process.exit(0);
});
require(‘./test‘)
 
?件上传服务器
scp (最原始)
scp docker-compose.yml root@47.98.252.43:/root/source/ #?件
scp -r mini-01 root@47.98.252.43:/root/source/ #?件夹
git (实际?作中)
deploy插件 (debug)
 
PM2的应?
内建负载均衡(使?Node cluster 集群模块、?进程,可以参考朴灵的《深?浅出node.js》?书
第九章)
线程守护,keep alive
0秒停机重载,维护升级的时候不需要停机.
现在 Linux (stable) & MacOSx (stable) & Windows (stable).多平台?持
停?不稳定的进程(避免?限循环)
控制台检测 https://id.keymetrics.io/api/oauth/login#/register
提供 HTTP API
 
配置
npm install -g pm2
pm2 start app.js --watch -i 2
// watch 监听?件变化
// -i 启动多少个实例
pm2 stop all
pm2 list
pm2 start app.js -i max # 根据机器CPU核数,开启对应数?的进程
配置process.yml
 
apps:
- script : app.js
instances: 2
watch : true
env :
NODE_ENV: production
Keymetrics在线监控
https://id.keymetrics.io
pm2 link 8hxvp4bfrftvwxn uis7ndy58fvuf7l TARO-SAMPLE
 
pm2设置为开机启动
pm2 startup
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

       

 

对部署_nginx_pm2_docker的研究 1

原文:https://www.cnblogs.com/zhouyideboke/p/13224323.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!