请教下大家,node 项目部署,使用 pm2 管理还是 docker 管理好?
1
smallWang 2023-05-22 14:51:54 +08:00 1
都行 反正守护进程是为了保活 ,docker 要保活的话不得搭配 k8 的探针吗? 或者自己写脚本
|
3
dream4ever 2023-05-22 15:02:10 +08:00
@zqguo 保活是指挂掉之后自动启动,和开机启动是两回事,Google 一下就能知道区别了。
|
5
smallWang 2023-05-22 15:05:47 +08:00
@zqguo ?你都不知道吗,不知道那就不建议用它
pm2 是一个带有负载均衡功能的 Node 应用的多进程管理器,虽然是为 node 开发的,但也能管理其他程序进程 当你要把你的独立代码利用全部的服务器上的所有 CPU ,并保证进程永远都活着,0 秒的重载,PM2 是完美的。 主要特性: 1 、多进程启动项目,内建负载均衡(使用 Node cluster 集群模块) 2 、可启动静态文件服务(类似 nginx 静态服务) 3 、可使用插件分割日志 4 、可通过重启策略配置条件重载(可以运行一些脚本,定时任务等) 5 、可以配置部署命令,轻量化一键部署项目(小项目可用,跟 devops 差得远) 6 、有 pm2 服务接口,可远程获取 pm2 集群数据 7 、具有 Ubuntu 和 CentOS 的启动脚本 保活是为了让你 node 因为各种意外死掉之后可以自动重启 pm2 很屌,我没用= = 你的目的是啥?单纯的想把 node 部署到服务器上吗?那直接 node xxx.js 不就行了 |
6
zubincheung 2023-05-22 15:06:05 +08:00
就是保持容器的活动状态,出现故障时自动重启,也可以用 docker compose, 设置 restart 为 always
|
8
Usaki 2023-05-22 15:10:03 +08:00
pm2 的日志能看的东西比较多,也比较齐全,还有高亮
|
9
lovedebug 2023-05-22 15:11:53 +08:00
k8s + docker 化部署的
|
10
zenxds 2023-05-22 15:13:43 +08:00
不应该是 docker 里面跑 pm2-runtime 吗[狗头]
|
11
Trim21 2023-05-22 15:15:14 +08:00 via Android
docker ,还能顺便避免依赖问题
|
12
coderxy 2023-05-22 15:20:29 +08:00
docker 比较好,因为 docker 还能保证实现线上版本控制, 而且后期如果上 K8s 也方便
|
13
zjsxwc 2023-05-22 15:26:18 +08:00
要保活,不就 linux 自带的 systemd 加 1 行
Restart=always 就行了嘛。 花式根据 exit code 来保活 得看文档里这个 Restart 参数: http://www.freedesktop.org/software/systemd/man/systemd.service.html#Restart= |
14
vueli 2023-05-22 15:26:38 +08:00
pm2 再加自带的多线程
|
15
zqguo OP @smallWang #5 我的需求是无论是机器重启,还是因为什么原因进程挂了,都要常识启动,之前用了 docker compose 有个选项是 restart: always ,这个应该就是无论什么情况都会尝试重启。
|
16
wu67 2023-05-22 15:37:41 +08:00
你可以容器 restart always, 也可以在容器里面用 pm2, 不太确定是不是所有的 node 进程挂掉的时候容器也是挂掉的, 所以我建议容器里面跑 pm2.
如果是测试环境, 其实直接在容器里面跑 node ***.js 就好了, 反正问题不大. |
22
wu67 2023-05-22 16:56:13 +08:00
|
23
julyclyde 2023-05-22 17:27:04 +08:00
pm2 没啥用
你用 pm2 去管应用程序的死活,那 pm2 自己的死活谁来管呢? |
24
star7th 2023-05-22 17:31:19 +08:00
要看你把项目部署到什么平台上。如果是直接部署到服务器,是推荐 pm2 .但是我一般都是封装成 docker 到 k8s 来运行,所以不需要 pm2
|
25
makelove 2023-05-22 17:47:38 +08:00
如果是自己的小项目,都不用,直接用 systemd 一切从简不好吗
|
26
flyPig9527 2023-05-22 22:14:54 +08:00
@zenxds 正解,我现在就是这样做的
|
27
libook 2023-05-23 10:01:05 +08:00
直接部署在系统上就用 pm2 ,或者使用 systemd ;已经有 docker 环境就用 docker 。没啥好不好的,看你具体情况。
|