2

你们是怎么部署 nodejs 的?

 8 months ago
source link: https://www.v2ex.com/t/1005371
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  Node.js

你们是怎么部署 nodejs 的?

  crazyTanuki · 20 小时 16 分钟前 · 5861 次点击

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

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

3.pm2 直接跑

4.docker 跑 nodejs 镜像

5.k8s 集群部署 nodejs 镜像

6.服务器上直接 npm run dev

第 1 条附言  ·  18 小时 9 分钟前

综合评论,基本上 4 最优解,3 和 5 次之
102 条回复    2024-01-04 00:16:34 +08:00
coderxy

coderxy      20 小时 12 分钟前

passon

passon      20 小时 11 分钟前

shimada666

shimada666      20 小时 10 分钟前

4,5 都有,看具体情况
NNNNzs

NNNNzs      20 小时 10 分钟前

IamUNICODE

IamUNICODE      20 小时 9 分钟前

4
3
5
目前是 4 5
wyhooo

wyhooo      20 小时 6 分钟前

6 也太秀了
jojo0830

jojo0830      20 小时 4 分钟前

1 为啥没人用?
musi

musi      20 小时 0 分钟前

@jojo0830 因为版本不好控制
express

express      19 小时 59 分钟前

纯好奇,6 不会崩么,日志怎么打,出现错误怎么查呢
duanxianze

duanxianze      19 小时 57 分钟前

@jojo0830 直接 node 多进程不容易控制
inas

inas      19 小时 56 分钟前

GitHub Actions
wu67

wu67      19 小时 54 分钟前

3 4 我都在用.
现在几乎都是 4 了, 之前的人留的配置, 日志不自动删, 也没有文档关于手动清理的, 服务器硬盘占用暴涨, 后来我给改成 docker 跑镜像了
pkoukk

pkoukk      19 小时 53 分钟前

3 4 5 按顺序用过来的,现在基本上都是 5 了
crazyTanuki

crazyTanuki      19 小时 51 分钟前

@wu67 感觉 4 已经取代 3 了,不过现在身边很多大佬都用 5 取代 4 了
461229187

461229187      19 小时 50 分钟前

6 是真的 6
v2tex

v2tex      19 小时 50 分钟前

在 4 或 5 里用 3 跑🐶
crazyTanuki

crazyTanuki      19 小时 48 分钟前

@jojo0830 应该是没那么方便的原因
crazyTanuki

crazyTanuki      19 小时 48 分钟前

@v2tex 45 不是已经解决了 3 所解决的问题了吗
wu67

wu67      19 小时 47 分钟前

@crazyTanuki k8s 需要运维, 很多中小公司没有这个实力, 尤其是那些业务驱动型的小公司
owen800q

owen800q      19 小时 47 分钟前 via iPhone

wonderfulcxm

wonderfulcxm      19 小时 46 分钟前 via iPhone

@wu67 docker 更占空间吧,日志文件我也映射出来。
crazyTanuki

crazyTanuki      19 小时 45 分钟前

@wu67 主要用的还是部署服务,特性功能用的比较少
princesswar721

princesswar721      19 小时 39 分钟前

3 是 最快的
v2tex

v2tex      19 小时 37 分钟前   ❤️ 1

@crazyTanuki 一方面是为了用 pm2 的日志和启动多个服务方便,还有就是随时可以从容器切换到非容器环境
ada87

ada87      19 小时 34 分钟前

serverless deploy
crazyTanuki

crazyTanuki      19 小时 33 分钟前

@ada87 这是什么神仙部署?类似云开发吗?
wu67

wu67      19 小时 32 分钟前

@wonderfulcxm docker 只是镜像大, 但是每次更新会删掉旧的. pm2 以前的人留下来的配置, 谁敢碰呀, 日志每天爆炸性增长, 我接手的时候, 8 个 G....
isbase

isbase      19 小时 26 分钟前

@wu67 pm2 的日志确实比较坑,默认没有启用日志轮转。会占满硬盘
unclemcz

unclemcz      19 小时 26 分钟前 via Android

类似 3 ,我用 forever ,然后外面加 nginx 。
dif

dif      19 小时 21 分钟前

bianhui

bianhui      19 小时 17 分钟前

能容器尽量容器
jsq2627

jsq2627      19 小时 11 分钟前

4/5 优先。但是要吃满多核 cpu 需要前面有 gateway lb
所以有时候还用 pm2 cluster mode ,简单
dudubaba

dudubaba      19 小时 2 分钟前

流水线+集群,生产环境 pm2 作用不大。
june4

june4      19 小时 1 分钟前

本地 build 打包通过脚本传上服务器。
服务器用 systemd 管理各个进程,有多进程需求的用的是第三方 npm 包(就是简单包装了下 node 内置的 cluster 功能)。
dd0754

dd0754      18 小时 59 分钟前

ysc3839

ysc3839      18 小时 35 分钟前 via Android

pkg 打包可执行文件,然后 systemd 运行
XJPlus

XJPlus      18 小时 35 分钟前

以前 Windows 服务器的时候用过 6 ,哈哈哈哈哈哈
ysc3839

ysc3839      18 小时 35 分钟前 via Android

@ysc3839 上述是公司项目的做法,自己的没什么正经项目,都是 tmux 直接运行。
yuuk520

yuuk520      18 小时 26 分钟前

4+3 ,通过 docker 脚本起 pm2 ,pm2 再起服务脚本
yuuk520

yuuk520      18 小时 24 分钟前

@dudubaba 为啥这么说?可以看日志和性能啊,还有进程保护、集群模式,总的来说还是挺方便。难道还有其他代替方案吗?
wusheng0

wusheng0      18 小时 22 分钟前 via Android

guguji5

guguji5      18 小时 16 分钟前

之前 3 ,现在 4 (什么日志不日志的,我从来不看日志)
DingJZ

DingJZ      17 小时 57 分钟前

3 ,想用 docker 跑一直没空搞
顺便问问大家怎么和 CI 工具配合的,我现在是把服务器作为 jenkins 的从节点,直接在节点上编译然后 pm2 启动
如果构建再 copy 过去太大了,包括用 docker 镜像,node_modules 打不打在里面
lbunderway

lbunderway      17 小时 52 分钟前

没人用 swarm 吗
NNNNzs

NNNNzs      17 小时 40 分钟前

@crazyTanuki egg 或者 nestjs 是可以直接 npm start 的不是说真 npm run dev
MeteorVIP

MeteorVIP      17 小时 39 分钟前

新手,第一个 nodejs 项目.3.
Roojay

Roojay      17 小时 38 分钟前

一般静态服务直接用[serve]( https://www.npmjs.com/package/serve) 然后 `nohup serve -s -n -l 8080 ./web > web.log 2>&1 &`
BeautifulSoap

BeautifulSoap      17 小时 36 分钟前

Lambda
整个项目 zip 打包后传上去就行,太大的话 webpack 之类的 bundle 一下
jiangzm

jiangzm      17 小时 18 分钟前   ❤️ 7

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

m319      17 小时 13 分钟前

这个 6 可太 6 了
hikarikun0203

hikarikun0203      17 小时 12 分钟前

没有 serverless?
learninining

learninining      17 小时 4 分钟前

adoal

adoal      17 小时 3 分钟前

非容器化的传统部署,至少要写好 systemd unit ,配好日志定时切分轮替。初始部署以及做过基础设施配置变更后至少要 reboot 一次服务器看能否自动启动完毕且运行正常。
xiaojun996

xiaojun996      16 小时 54 分钟前

defunct9

defunct9      16 小时 54 分钟前

7. systemctl 做成服务跑
unt

unt      16 小时 54 分钟前

我比较担心 docker 的性能损耗和稳定性,我亲身经历过我直接用 nginx 启动的服务没出过问题,docker (所有容器)崩过好几次
dc2002007

dc2002007      16 小时 52 分钟前

@express 我曾经通过 pm2 守护 npm run dev ,完全不会挂的
CAze

CAze      16 小时 52 分钟前

3 & 4
3 、功能不多我一般直接挂 PM2 ;
4 、一般是做 web 的中间件,或者是拿去写接口
sumarker

sumarker      16 小时 1 分钟前

3
毫无疑问...
kuxuan

kuxuan      15 小时 50 分钟前

3 多个项目都用
rupert

rupert      15 小时 47 分钟前

6 有其合理性,现在很多前端用 Vite 开发,众所周知用 Vite 开发但是打包用的是其他的工具,可能打包有问题,所以
lstz

lstz      15 小时 45 分钟前 via iPhone

用 docker ,版本号更新能 rollback ,心安
PrtScScrLk

PrtScScrLk      15 小时 40 分钟前

var1122

var1122      15 小时 37 分钟前   ❤️ 1

以前用 pm2 跑,后来更新的时候老是翻车(多数是包更新问题);后来就改成 docker 镜像了。
vultr

vultr      15 小时 32 分钟前

我只有开发的时候用 nodejs ,部署的时候根本用不上它,直接导出纯静态文件了。
ljh0585

ljh0585      15 小时 31 分钟前

上家公司 pm2 ,自己的项目 nohup ,现在 k8s
AllenCai

AllenCai      15 小时 26 分钟前

nvm 用来控制版本,直接跑
AllenCai

AllenCai      15 小时 21 分钟前

@AllenCai 还有就是加个 3
AllenCai

AllenCai      15 小时 19 分钟前

@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

txzh007      15 小时 19 分钟前

6 这个 开发环境暴露出来的东西有点多啊
hevi

hevi      15 小时 19 分钟前

主要是 3

公司租的小机器,没必要强上 docker 。。
ClearMoki

ClearMoki      15 小时 17 分钟前

怕啥,直接 git clone 然后 install ,yarn start:dev 我司根本不怕的
danhua

danhua      15 小时 15 分钟前

abear

abear      15 小时 15 分钟前

@var1122 #68 docker 镜像,每次的项目更新,package 是重新下载 node_module 吗,打包的 node 的 app ,是放镜像里面还是放外面
zackzergzeng

zackzergzeng      15 小时 7 分钟前

7 包里自带 node 二进制文件
wherewhale

wherewhale      14 小时 18 分钟前

AWS + Serverless
crazyTanuki

crazyTanuki      14 小时 11 分钟前

@wherewhale 这个怎么玩?直接写云函数?那些类似 koa 的框架 api 怎么搞
GeorgeGalway

GeorgeGalway      14 小时 9 分钟前

666666
wherewhale

wherewhale      13 小时 57 分钟前

@crazyTanuki 对 用函数 lambda 满足要求 koa 可用可不用 我们选择 graphql
var1122

var1122      13 小时 57 分钟前

@abear 就是因为 npm 包的问题,所以每次 release 都是放到镜像里面;如果是拉单个 images 完整包肯定很大吗,但是通过 docker push 往镜像管理上传的时候,node 与 os 本体部分是公共抽离的,只有 node_modules 和程序的大小;
crazyTanuki

crazyTanuki      13 小时 45 分钟前

@wherewhale 感觉有点超前,周边没有用这个的...
wherewhale

wherewhale      13 小时 30 分钟前

@crazyTanuki 响应不会特别快 国内我估计接受不了
testliyu

testliyu      13 小时 20 分钟前

dist 放在 nginx 里的是哪种
zorui

zorui      13 小时 19 分钟前

原来是 2+5 k8s 里面跑 pm2 镜像
zorui

zorui      13 小时 18 分钟前

原来是 3+5 k8s 里面跑 pm2 镜像
ada87

ada87      11 小时 27 分钟前

@crazyTanuki #28 serverless ,方便个人感觉第二,目前能排第一的只能是 Vercel
julyclyde

julyclyde      10 小时 58 分钟前

使用 pm2 ,就像使用 supervisorD 那么错
正确的做法应该是 systemd/docker 直接运行你的应用程序入口
Jackeriss

Jackeriss      10 小时 13 分钟前

pm2 我不光跑 node ,python 什么的也用,实在是太好用了
cutchop

cutchop      9 小时 50 分钟前

Azure99

Azure99      9 小时 47 分钟前

自己的项目 4
huangsijun17

huangsijun17      9 小时 45 分钟前

使用 systemd 呢?
Imindzzz

Imindzzz      9 小时 44 分钟前

用的 docker ,但是一直觉得 docker 镜像太大了,起步几百兆,同样的 java 项目就才几十兆
Jianzs

Jianzs      8 小时 40 分钟前

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

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

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

https://github.com/pluto-lang/pluto
Jianzs

Jianzs      8 小时 34 分钟前

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

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

https://github.com/pluto-lang/pluto
Jianzs

Jianzs      8 小时 32 分钟前

@wherewhale #80
@hikarikun0203

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

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

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

https://github.com/pluto-lang/pluto
tntin

tntin      8 小时 26 分钟前

目前我用的是 systemd 运行,但感觉不是很舒服。
用的 nest.js 然后 build 后上传服务器 需要在服务端 npm install ,这里感觉装依赖有点麻烦,不知道有没有办法打包的时候将用到的依赖一起打包

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK