V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
crazyTanuki
V2EX  ›  Node.js

你们是怎么部署 nodejs 的?

  •  
  •   crazyTanuki · 320 天前 · 14723 次点击
    这是一个创建于 320 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1.装 nodejs 环境然后 build 完直接服务器 node

    2.宝塔面板直接用 node 模块功能

    3.pm2 直接跑

    4.docker 跑 nodejs 镜像

    5.k8s 集群部署 nodejs 镜像

    6.服务器上直接 npm run dev

    第 1 条附言  ·  320 天前
    综合评论,基本上 4 最优解,3 和 5 次之
    125 条回复    2024-03-18 17:32:08 +08:00
    1  2  
    coderxy
        1
    coderxy  
       320 天前
    5
    passon
        2
    passon  
       320 天前
    4 3
    shimada666
        3
    shimada666  
       320 天前
    4,5 都有,看具体情况
    NNNNzs
        4
    NNNNzs  
       320 天前
    3 6
    IamUNICODE
        5
    IamUNICODE  
       320 天前
    4
    3
    5
    目前是 4 5
    crazyTanuki
        6
    crazyTanuki  
    OP
       320 天前
    @NNNNzs 牛啊老哥
    wyhooo
        7
    wyhooo  
       320 天前
    6 也太秀了
    jojo0830
        8
    jojo0830  
       320 天前
    1 为啥没人用?
    musi
        9
    musi  
       320 天前
    @jojo0830 因为版本不好控制
    express
        10
    express  
       320 天前
    纯好奇,6 不会崩么,日志怎么打,出现错误怎么查呢
    duanxianze
        11
    duanxianze  
       320 天前
    @jojo0830 直接 node 多进程不容易控制
    inas
        12
    inas  
       320 天前
    GitHub Actions
    wu67
        13
    wu67  
       320 天前
    3 4 我都在用.
    现在几乎都是 4 了, 之前的人留的配置, 日志不自动删, 也没有文档关于手动清理的, 服务器硬盘占用暴涨, 后来我给改成 docker 跑镜像了
    pkoukk
        14
    pkoukk  
       320 天前
    3 4 5 按顺序用过来的,现在基本上都是 5 了
    crazyTanuki
        15
    crazyTanuki  
    OP
       320 天前
    @wu67 感觉 4 已经取代 3 了,不过现在身边很多大佬都用 5 取代 4 了
    461229187
        16
    461229187  
       320 天前
    6 是真的 6
    v2tex
        17
    v2tex  
       320 天前
    在 4 或 5 里用 3 跑🐶
    crazyTanuki
        18
    crazyTanuki  
    OP
       320 天前
    @express 只能重启
    crazyTanuki
        19
    crazyTanuki  
    OP
       320 天前
    @jojo0830 应该是没那么方便的原因
    crazyTanuki
        20
    crazyTanuki  
    OP
       320 天前
    @v2tex 45 不是已经解决了 3 所解决的问题了吗
    wu67
        21
    wu67  
       320 天前
    @crazyTanuki k8s 需要运维, 很多中小公司没有这个实力, 尤其是那些业务驱动型的小公司
    owen800q
        22
    owen800q  
       320 天前 via iPhone
    6
    wonderfulcxm
        23
    wonderfulcxm  
       320 天前 via iPhone
    @wu67 docker 更占空间吧,日志文件我也映射出来。
    crazyTanuki
        24
    crazyTanuki  
    OP
       320 天前
    @wu67 主要用的还是部署服务,特性功能用的比较少
    loveDiu4ever
        25
    loveDiu4ever  
       320 天前
    3 是 最快的
    v2tex
        26
    v2tex  
       320 天前   ❤️ 1
    @crazyTanuki 一方面是为了用 pm2 的日志和启动多个服务方便,还有就是随时可以从容器切换到非容器环境
    ada87
        27
    ada87  
       320 天前
    serverless deploy
    crazyTanuki
        28
    crazyTanuki  
    OP
       320 天前
    @ada87 这是什么神仙部署?类似云开发吗?
    wu67
        29
    wu67  
       320 天前
    @wonderfulcxm docker 只是镜像大, 但是每次更新会删掉旧的. pm2 以前的人留下来的配置, 谁敢碰呀, 日志每天爆炸性增长, 我接手的时候, 8 个 G....
    d119
        30
    d119  
       320 天前
    isbase
        31
    isbase  
       320 天前
    @wu67 pm2 的日志确实比较坑,默认没有启用日志轮转。会占满硬盘
    unclemcz
        32
    unclemcz  
       320 天前 via Android
    类似 3 ,我用 forever ,然后外面加 nginx 。
    dif
        33
    dif  
       320 天前
    PM2
    bianhui
        34
    bianhui  
       320 天前
    能容器尽量容器
    jsq2627
        35
    jsq2627  
       320 天前
    4/5 优先。但是要吃满多核 cpu 需要前面有 gateway lb
    所以有时候还用 pm2 cluster mode ,简单
    dudubaba
        36
    dudubaba  
       320 天前
    流水线+集群,生产环境 pm2 作用不大。
    june4
        37
    june4  
       320 天前
    本地 build 打包通过脚本传上服务器。
    服务器用 systemd 管理各个进程,有多进程需求的用的是第三方 npm 包(就是简单包装了下 node 内置的 cluster 功能)。
    dd0754
        38
    dd0754  
       320 天前
    6
    ysc3839
        39
    ysc3839  
       320 天前 via Android
    pkg 打包可执行文件,然后 systemd 运行
    XJPlus
        40
    XJPlus  
       320 天前
    以前 Windows 服务器的时候用过 6 ,哈哈哈哈哈哈
    ysc3839
        41
    ysc3839  
       320 天前 via Android
    @ysc3839 上述是公司项目的做法,自己的没什么正经项目,都是 tmux 直接运行。
    yuuk520
        42
    yuuk520  
       320 天前
    4+3 ,通过 docker 脚本起 pm2 ,pm2 再起服务脚本
    yuuk520
        43
    yuuk520  
       320 天前
    @dudubaba 为啥这么说?可以看日志和性能啊,还有进程保护、集群模式,总的来说还是挺方便。难道还有其他代替方案吗?
    wusheng0
        44
    wusheng0  
       320 天前 via Android
    3 ,4
    guguji5
        45
    guguji5  
       320 天前
    之前 3 ,现在 4 (什么日志不日志的,我从来不看日志)
    DingJZ
        46
    DingJZ  
       320 天前
    3 ,想用 docker 跑一直没空搞
    顺便问问大家怎么和 CI 工具配合的,我现在是把服务器作为 jenkins 的从节点,直接在节点上编译然后 pm2 启动
    如果构建再 copy 过去太大了,包括用 docker 镜像,node_modules 打不打在里面
    lbunderway
        47
    lbunderway  
       320 天前
    没人用 swarm 吗
    NNNNzs
        48
    NNNNzs  
       320 天前
    @crazyTanuki egg 或者 nestjs 是可以直接 npm start 的不是说真 npm run dev
    MeteorVIP
        49
    MeteorVIP  
       320 天前
    新手,第一个 nodejs 项目.3.
    Roojay
        50
    Roojay  
       320 天前
    一般静态服务直接用[serve]( https://www.npmjs.com/package/serve) 然后 `nohup serve -s -n -l 8080 ./web > web.log 2>&1 &`
    BeautifulSoap
        51
    BeautifulSoap  
       320 天前
    Lambda
    整个项目 zip 打包后传上去就行,太大的话 webpack 之类的 bundle 一下
    jiangzm
        52
    jiangzm  
       320 天前   ❤️ 10
    OP 分的有点乱,宝塔是什么鬼,1 、6 应该属于同一类
    按部署方式来说
    1 、CI/CD ( Jeknins/GitLab CI/TeamCity/...)
    2 、DevOps/Pipeline ( AWS Pipeline/阿里云 Devops/腾讯 Coding )
    3 、手撸

    按运行环境来说
    1 、VM/PM
    2 、Docker
    3 、Kubernetes

    按运行方式来说
    1 、PM2
    2 、Supervisor
    3 、直接运行
    m319
        53
    m319  
       320 天前
    这个 6 可太 6 了
    hikarikun0203
        54
    hikarikun0203  
       320 天前
    没有 serverless?
    learninining
        55
    learninining  
       320 天前
    6 有点 6
    adoal
        56
    adoal  
       320 天前
    非容器化的传统部署,至少要写好 systemd unit ,配好日志定时切分轮替。初始部署以及做过基础设施配置变更后至少要 reboot 一次服务器看能否自动启动完毕且运行正常。
    xiaojun996
        57
    xiaojun996  
       320 天前
    3 & 4
    defunct9
        58
    defunct9  
       320 天前
    7. systemctl 做成服务跑
    unt
        59
    unt  
       320 天前
    我比较担心 docker 的性能损耗和稳定性,我亲身经历过我直接用 nginx 启动的服务没出过问题,docker (所有容器)崩过好几次
    dc2002007
        60
    dc2002007  
       320 天前
    @express 我曾经通过 pm2 守护 npm run dev ,完全不会挂的
    CAze
        61
    CAze  
       320 天前
    3 & 4
    3 、功能不多我一般直接挂 PM2 ;
    4 、一般是做 web 的中间件,或者是拿去写接口
    photon006
        62
    photon006  
       320 天前
    4 ,用 docker-compose 的 scale 语法实现 zero downtime 平滑重启

    https://www.tines.com/blog/simple-zero-downtime-deploys-with-nginx-and-docker-compose
    sumarker
        63
    sumarker  
       320 天前
    3
    毫无疑问...
    kuxuan
        64
    kuxuan  
       320 天前
    3 多个项目都用
    rupert
        65
    rupert  
       320 天前
    6 有其合理性,现在很多前端用 Vite 开发,众所周知用 Vite 开发但是打包用的是其他的工具,可能打包有问题,所以
    lstz
        66
    lstz  
       320 天前 via iPhone
    用 docker ,版本号更新能 rollback ,心安
    PrtScScrLk
        67
    PrtScScrLk  
       320 天前
    1 & 3
    var1122
        68
    var1122  
       320 天前   ❤️ 1
    以前用 pm2 跑,后来更新的时候老是翻车(多数是包更新问题);后来就改成 docker 镜像了。
    vultr
        69
    vultr  
       320 天前
    我只有开发的时候用 nodejs ,部署的时候根本用不上它,直接导出纯静态文件了。
    ljh0585
        70
    ljh0585  
       320 天前
    上家公司 pm2 ,自己的项目 nohup ,现在 k8s
    AllenCai
        71
    AllenCai  
       320 天前
    nvm 用来控制版本,直接跑
    AllenCai
        72
    AllenCai  
       320 天前
    @AllenCai 还有就是加个 3
    AllenCai
        73
    AllenCai  
       320 天前
    @AllenCai
    类似这样,感觉很轻很方便
    ···js
    module.exports = {
    apps: [{
    name: 'app-node-12',
    script: 'app.js',
    exec_interpreter: '/home/.nvm/versions/node/v12.18.3/bin/node'
    },{
    name: 'app-node-14',
    script: 'app.js',
    exec_interpreter: '/home/.nvm/versions/node/v14.15.0/bin/node'
    }]
    };

    ···
    txzh007
        74
    txzh007  
       320 天前
    6 这个 开发环境暴露出来的东西有点多啊
    hevi
        75
    hevi  
       320 天前
    主要是 3

    公司租的小机器,没必要强上 docker 。。
    ClearMoki
        76
    ClearMoki  
       320 天前
    怕啥,直接 git clone 然后 install ,yarn start:dev 我司根本不怕的
    danhua
        77
    danhua  
       320 天前
    3
    abear
        78
    abear  
       320 天前
    @var1122 #68 docker 镜像,每次的项目更新,package 是重新下载 node_module 吗,打包的 node 的 app ,是放镜像里面还是放外面
    zackzergzeng
        79
    zackzergzeng  
       320 天前
    7 包里自带 node 二进制文件
    wherewhale
        80
    wherewhale  
       320 天前
    AWS + Serverless
    crazyTanuki
        81
    crazyTanuki  
    OP
       320 天前
    @wherewhale 这个怎么玩?直接写云函数?那些类似 koa 的框架 api 怎么搞
    GeorgeGalway
        82
    GeorgeGalway  
       320 天前
    666666
    wherewhale
        83
    wherewhale  
       320 天前
    @crazyTanuki 对 用函数 lambda 满足要求 koa 可用可不用 我们选择 graphql
    var1122
        84
    var1122  
       320 天前
    @abear 就是因为 npm 包的问题,所以每次 release 都是放到镜像里面;如果是拉单个 images 完整包肯定很大吗,但是通过 docker push 往镜像管理上传的时候,node 与 os 本体部分是公共抽离的,只有 node_modules 和程序的大小;
    crazyTanuki
        85
    crazyTanuki  
    OP
       320 天前
    @wherewhale 感觉有点超前,周边没有用这个的...
    wherewhale
        86
    wherewhale  
       320 天前
    @crazyTanuki 响应不会特别快 国内我估计接受不了
    testliyu
        87
    testliyu  
       320 天前
    dist 放在 nginx 里的是哪种
    zorui
        88
    zorui  
       320 天前
    原来是 2+5 k8s 里面跑 pm2 镜像
    zorui
        89
    zorui  
       320 天前
    原来是 3+5 k8s 里面跑 pm2 镜像
    ada87
        90
    ada87  
       320 天前
    @crazyTanuki #28 serverless ,方便个人感觉第二,目前能排第一的只能是 Vercel
    julyclyde
        91
    julyclyde  
       320 天前
    使用 pm2 ,就像使用 supervisorD 那么错
    正确的做法应该是 systemd/docker 直接运行你的应用程序入口
    Jackeriss
        92
    Jackeriss  
       320 天前
    pm2 我不光跑 node ,python 什么的也用,实在是太好用了
    cutchop
        93
    cutchop  
       320 天前
    pm2
    Azure99
        94
    Azure99  
       320 天前
    自己的项目 4
    huangsijun17
        95
    huangsijun17  
       320 天前
    使用 systemd 呢?
    Imindzzz
        96
    Imindzzz  
       320 天前
    用的 docker ,但是一直觉得 docker 镜像太大了,起步几百兆,同样的 java 项目就才几十兆
    Jianzs
        97
    Jianzs  
       320 天前
    @ada87 #27 方便交流下平常是怎么使用 serverless 的么?会用到它的哪些能力?

    我最近也在做一个 Serverless 领域的项目,希望能给开发者带来更好的开发体验:开发者只需要写 TS ,就能够部署到自己的 AWS 、阿里云 等云账户,云间迁移不需要修改代码。

    所以,想了解下现有 serverless 工具的用户是怎么用的,以及会不会遇到什么问题~

    https://github.com/pluto-lang/pluto
    Jianzs
        98
    Jianzs  
       320 天前
    @BeautifulSoap 终于发现国内使用 Lambda 的人了,我想问一下,你会用到 AWS 的 BaaS 组件么,例如 DynamoDB 之类的,然后在 Lambda 调用? 你在开发这类应用的时候,有没有感觉开发过程很繁琐,需要在各个地方点来点去,有没有感觉权限配置之类的很复杂?想了解一下你的使用感受。

    我最近在做一个 Serverless 领域的项目,开发者只需要写 TS ,自动推导代码依赖的 BaaS 组件,自动创建 BaaS 组件,和 FaaS 函数,并且自动配置好权限。所以,我想了解下开发者需不需要这类工具。

    https://github.com/pluto-lang/pluto
    Jianzs
        99
    Jianzs  
       320 天前
    @wherewhale #80
    @hikarikun0203

    方便交流下平常是怎么使用 serverless 的么?会用到它的哪些能力?

    我最近也在做一个 Serverless 领域的项目,希望能给开发者带来更好的开发体验:开发者只需要写 TS ,就能够部署到自己的 AWS 、阿里云 等云账户,云间迁移不需要修改代码。

    所以,想了解下现有 serverless 工具的用户是怎么用的,以及会不会遇到什么问题~

    https://github.com/pluto-lang/pluto
    tntin
        100
    tntin  
       320 天前
    目前我用的是 systemd 运行,但感觉不是很舒服。
    用的 nest.js 然后 build 后上传服务器 需要在服务端 npm install ,这里感觉装依赖有点麻烦,不知道有没有办法打包的时候将用到的依赖一起打包
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1719 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:49 · PVG 00:49 · LAX 08:49 · JFK 11:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.