前言
目前行业的发展,对前端有node方向技能点的要求越来越普遍,特别在中后台的场景(ps:这里的中后台主要特点就是,不涉及高并发,大流量的c端场景)下,node全栈的价值可以体现的淋漓尽致,高效迭代-支持快速试错和探索性场景(大白话,不用等待跨团队的资源就位,前端就能hold住)。既然要去搞服务端,必然逃不开部署和运维的相关内容了(没办法,学不动也得学)。
背景知识
pm2
可能对于刚接触的同学(包括我)来说,启动一个node服务,直接run下面
node xxx.js
复制代码
不就完了,为啥还要牵扯到pm2这个进程守护工具。
详细的介绍可以直接去pm2 官网查看。
1、内建负载均衡(使用Node cluster 集群模块)
2、线程守护,keep alive
3、0秒停机重载,维护升级的时候不需要停机.
4、Linux (stable) & MacOSx (stable) & Windows (stable).多平台支持
5、停止不稳定的进程(避免无限循环)
6、控制台检测
7、提供 HTTP API
8、远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )
我这里简单一句话总结下: 避免单线程的node因异常导致的服务挂掉,并且提升cpu利用率。
dcoker
摘抄百科的简介docker:
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口.
docker 的优点
- 更高效的利用系统资源
- 更快速的启动时间
- 一致的运行环境
- 持续交付和部署
- 更轻松的迁移
- 更轻松的维护和扩展
具体到我们 更多的是出于 1和3的原因(毕竟机器有限和环境隔离很必要)。
问题描述
下面就是轻松的使用 dcoker 来部署 我们的node服务了。
两者相遇
"start": "pm2 start ./dispatch.js ",
复制代码
问题描述
docker 始终不能启动。
查看日志
docker logs -f 55b9ddb92541
复制代码
pm2启动好好的
原因:
因为pm2 是默认后台启动的, docker 感知不到。。。CMD命令执行完成,docker 容器就结束了。
所以 直接node xx 的时候一直运行着。 pm2以后台形式运行,docker 就认为 可以退出了。
The problem is that pm2 start runs pm2 as a daemon ("in the background"), which Docker isn't aware of.
You need to use pm2-runtime to make it run in the foreground:
CMD [ "pm2-runtime", "start", "npm", "--", "start" ]
See pm2 "Container integration" docs.
复制代码
所以需要使用 pm2-runtime 来进行 处理。
- pm2-runtime是为Docker容器设计的,它将应用程序置于前台,从而使容器保持运行状态。
结束语
参考文章
服务端+部署+运维,对于前端er来说又是一片新的蓝海。不过还是那句话,我们不该给自己设限,只有这样才能及时跟上这个快速的时代。