zqguo
V2EX  ›  Node.js

关于 node 项目部署问题。

  •  
  •   zqguo · May 22, 2023 · 4745 views
    This topic created in 1112 days ago, the information mentioned may be changed or developed.

    请教下大家,node 项目部署,使用 pm2 管理还是 docker 管理好?

    29 replies    2023-05-26 09:03:18 +08:00
    smallWang
        1
    smallWang  
       May 22, 2023   ❤️ 1
    都行 反正守护进程是为了保活 ,docker 要保活的话不得搭配 k8 的探针吗? 或者自己写脚本
    zqguo
        2
    zqguo  
    OP
       May 22, 2023
    @smallWang 保活是指开机自启吗?
    dream4ever
        3
    dream4ever  
       May 22, 2023
    @zqguo 保活是指挂掉之后自动启动,和开机启动是两回事,Google 一下就能知道区别了。
    jabinsun
        4
    jabinsun  
       May 22, 2023
    @smallWang
    @zqguo
    docker 可以搭配 HEALTHCHECK
    smallWang
        5
    smallWang  
       May 22, 2023
    @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 不就行了
    zubincheung
        6
    zubincheung  
       May 22, 2023
    就是保持容器的活动状态,出现故障时自动重启,也可以用 docker compose, 设置 restart 为 always
    smallWang
        7
    smallWang  
       May 22, 2023
    @jabinsun 我喜欢写 while 1==1 然后 里面不停的起来 并且 sleep(20)
    Usaki
        8
    Usaki  
       May 22, 2023
    pm2 的日志能看的东西比较多,也比较齐全,还有高亮
    lovedebug
        9
    lovedebug  
       May 22, 2023
    k8s + docker 化部署的
    zenxds
        10
    zenxds  
       May 22, 2023
    不应该是 docker 里面跑 pm2-runtime 吗[狗头]
    Trim21
        11
    Trim21  
       May 22, 2023 via Android
    docker ,还能顺便避免依赖问题
    coderxy
        12
    coderxy  
       May 22, 2023
    docker 比较好,因为 docker 还能保证实现线上版本控制, 而且后期如果上 K8s 也方便
    zjsxwc
        13
    zjsxwc  
       May 22, 2023
    要保活,不就 linux 自带的 systemd 加 1 行
    Restart=always
    就行了嘛。

    花式根据 exit code 来保活 得看文档里这个 Restart 参数: http://www.freedesktop.org/software/systemd/man/systemd.service.html#Restart=
    vueli
        14
    vueli  
       May 22, 2023
    pm2 再加自带的多线程
    zqguo
        15
    zqguo  
    OP
       May 22, 2023
    @smallWang #5 我的需求是无论是机器重启,还是因为什么原因进程挂了,都要常识启动,之前用了 docker compose 有个选项是 restart: always ,这个应该就是无论什么情况都会尝试重启。
    wu67
        16
    wu67  
       May 22, 2023
    你可以容器 restart always, 也可以在容器里面用 pm2, 不太确定是不是所有的 node 进程挂掉的时候容器也是挂掉的, 所以我建议容器里面跑 pm2.

    如果是测试环境, 其实直接在容器里面跑 node ***.js 就好了, 反正问题不大.
    zqguo
        17
    zqguo  
    OP
       May 22, 2023
    @wu67 正解
    zbinlin
        18
    zbinlin  
       May 22, 2023
    @wu67 什么情况下 node 进程挂掉了而容器没挂的?
    wu67
        19
    wu67  
       May 22, 2023
    @zbinlin nuxt 部分情况下出错导致整个服务 500 了, 但是容器还在 running...前端日常花式整活.
    freak118
        20
    freak118  
       May 22, 2023
    @wu67 如果把 nuxt 作为 express 的中间件来使用 还会出现这种情况吗
    zbinlin
        21
    zbinlin  
       May 22, 2023
    @wu67 这时候 node 没挂掉吧?
    wu67
        22
    wu67  
       May 22, 2023
    @freak118 不知道, 我都懒得折腾这些...这应该是框架开发这关心的情况, 我们开发这哪有那个时间去整这些, 光是搞业务就忙得要命了, 遇到这种极端情况最好的方法就是直接重启


    @zbinlin 你跟我杠这个也没什么意思呀, 反正作为框架用户, 我用起来整个 node 本身还有响应 500, 但是服务本身进入了非预期的响应状态, 刷新页面 /重调 API 也无法跳过, 那我说它挂了也不过分吧
    julyclyde
        23
    julyclyde  
       May 22, 2023
    pm2 没啥用
    你用 pm2 去管应用程序的死活,那 pm2 自己的死活谁来管呢?
    star7th
        24
    star7th  
       May 22, 2023
    要看你把项目部署到什么平台上。如果是直接部署到服务器,是推荐 pm2 .但是我一般都是封装成 docker 到 k8s 来运行,所以不需要 pm2
    makelove
        25
    makelove  
       May 22, 2023
    如果是自己的小项目,都不用,直接用 systemd 一切从简不好吗
    flyPig9527
        26
    flyPig9527  
       May 22, 2023
    @zenxds 正解,我现在就是这样做的
    libook
        27
    libook  
       May 23, 2023
    直接部署在系统上就用 pm2 ,或者使用 systemd ;已经有 docker 环境就用 docker 。没啥好不好的,看你具体情况。
    121819756
        28
    121819756  
       May 25, 2023
    @wu67 我用 nuxt PM2 nginx 部署的话,重启会有 502 的情况,请问大佬您知道为啥吗
    wu67
        29
    wu67  
       May 26, 2023
    @121819756 我萌新来的. 我们网站的用户量不大, 所以也没见过你说的这种问题.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1038 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 92ms · UTC 18:08 · PVG 02:08 · LAX 11:08 · JFK 14:08
    ♥ Do have faith in what you're doing.