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

你们是怎么部署 nodejs 的?

  •  
  •   crazyTanuki · 2024-01-03 10:04:21 +08:00 · 15548 次点击
    这是一个创建于 368 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    3.pm2 直接跑

    4.docker 跑 nodejs 镜像

    5.k8s 集群部署 nodejs 镜像

    6.服务器上直接 npm run dev

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

    https://www.tines.com/blog/simple-zero-downtime-deploys-with-nginx-and-docker-compose
    sumarker
        63
    sumarker  
       2024-01-03 14:18:50 +08:00
    3
    毫无疑问...
    kuxuan
        64
    kuxuan  
       2024-01-03 14:29:58 +08:00
    3 多个项目都用
    rupert
        65
    rupert  
       2024-01-03 14:33:17 +08:00
    6 有其合理性,现在很多前端用 Vite 开发,众所周知用 Vite 开发但是打包用的是其他的工具,可能打包有问题,所以
    lstz
        66
    lstz  
       2024-01-03 14:35:20 +08:00 via iPhone
    用 docker ,版本号更新能 rollback ,心安
    PrtScScrLk
        67
    PrtScScrLk  
       2024-01-03 14:40:03 +08:00
    1 & 3
    var1122
        68
    var1122  
       2024-01-03 14:43:19 +08:00   ❤️ 1
    以前用 pm2 跑,后来更新的时候老是翻车(多数是包更新问题);后来就改成 docker 镜像了。
    vultr
        69
    vultr  
       2024-01-03 14:48:43 +08:00
    我只有开发的时候用 nodejs ,部署的时候根本用不上它,直接导出纯静态文件了。
    ljh0585
        70
    ljh0585  
       2024-01-03 14:48:58 +08:00
    上家公司 pm2 ,自己的项目 nohup ,现在 k8s
    AllenCai
        71
    AllenCai  
       2024-01-03 14:54:15 +08:00
    nvm 用来控制版本,直接跑
    AllenCai
        72
    AllenCai  
       2024-01-03 14:59:04 +08:00
    @AllenCai 还有就是加个 3
    AllenCai
        73
    AllenCai  
       2024-01-03 15:00:51 +08:00
    @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  
       2024-01-03 15:01:10 +08:00
    6 这个 开发环境暴露出来的东西有点多啊
    hevi
        75
    hevi  
       2024-01-03 15:01:33 +08:00
    主要是 3

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

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

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

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

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

    https://github.com/pluto-lang/pluto
    Jianzs
        99
    Jianzs  
       2024-01-03 21:48:20 +08:00
    @wherewhale #80
    @hikarikun0203

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

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

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

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