你们是怎么部署 nodejs 的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
crazyTanuki
V2EX    Node.js

你们是怎么部署 nodejs 的?

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

    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
    UXha45veSNpWCwZR
        49
    UXha45veSNpWCwZR  
       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  
    PRO
       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     Solana     2707 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 08:29 PVG 16:29 LAX 01:29 JFK 04:29
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86