node js 应用部署,一定要停机,才能 npm install 么?

2023-03-30 13:16:29 +08:00
 aaronhua
我是 Python 开发,不是很懂前端的生态。同事部署 nodejs 应用,他需要停机半个小时更新依赖。说是不停机,会影响全局的 npm 搜索依赖。在我看来这个同事技术很不错的,很多技术问题跟他沟通都很流畅。但是,结果就是服务中断,等依赖更新完。小项目就部门内几十个人用,没有用 docker ,Jenkins ,基本上怎么简单怎么来。求证下是这样的么?还是说忽悠我谢谢。
4238 次点击
所在节点    Node.js
39 条回复
IvanLi127
2023-03-30 14:11:27 +08:00
一般不需要停就能装依赖。不过 node js 的应用,可以做热更新,也可以没做热更新,一般项目是没做热更新支持的,会停机更新是很正常的。。。没必要纠结这个,即使人家敢冒风险停服更新,出事了谁负责。。。
markgor
2023-03-30 14:14:47 +08:00
自己停机维护时间 = 预估需要时间 * 1.5 取整小时为单位。
一切顺利的话发多个公告 经过.....提前....完成任务。

别人停机时间 = 10 分钟???不就重启下就好了吗
aaronhua
2023-03-30 14:15:07 +08:00
@makelove 内网镜像慢,这个就没法解决
themostlazyman
2023-03-30 14:21:27 +08:00
前面加个 nginx ,新版本换个目录换个端口。部署完还能先测试下,前提是两个版本兼容,表没变化,或表变化不影响当前版本使用。
opengg
2023-03-30 14:31:24 +08:00
你们不上集群、容器、load balancer 的吗?
单机裸跑?
learningman
2023-03-30 14:40:01 +08:00
写个 dockerfile 才几行啊
aaronhua
2023-03-30 14:40:59 +08:00
@IvanLi127 说真的,还真的有点纠结。知道其实可以做到也不纠结了。
@weijancc 就那么几个开发没有运维。
makelove
2023-03-30 14:43:44 +08:00
@aaronhua 网络慢就本地预缓存一下,复制下 package.json 到临时目录先安装一下,再安装生产目录的
xuanbg
2023-03-30 14:44:36 +08:00
为啥更新依赖要停机?新版本的依赖包就不能正常发布么?实在是摸不着头脑
aaronhua
2023-03-30 14:47:22 +08:00
@opengg 是的,用户是部门的人,才几十个人。单机没有压力。系统蹦一阵子没人察觉的那种。😂要是,停机比较长,领导就会来找我。
zhangxh1023
2023-03-30 14:52:04 +08:00
既然是几十个人用,怎么简单怎么来,估计也是为了防止出问题吧,停会儿也没啥问题,懒得折腾
aaronhua
2023-03-30 14:57:33 +08:00
@zhangxh1023 是的,躺平
isbase
2023-03-30 15:21:14 +08:00
上容器吧
chronos
2023-03-30 15:54:39 +08:00
node 项目如果不用 docker 的话,用下面的步骤应该能快很多。

1. 将新版本程序放置到服务器同磁盘其它目录中,比如原来的 server 在 /opt/server ,那么你可以先将新版本的程序放到 /opt/server_new
2. 在 /opt/server_new 中使用 npm 安装依赖,并等待依赖安装完毕
3. 停机,并将 /opt/server/node_modules 重命名为 /opt/server/node_modules_old
4. 将 /opt/server_new/node_modules 移动到 /opt/server/node_modules
5. 将 /opt/server 的其它文件,一般也就是程序文件更新到新版本。如果用上了 git 这一步就直接 git pull 。
6. 启动 server ,检测是否正常运行。
7. 删除 /opt/server/node_modules_old

因为这个过程中 npm 安装依赖时不需要先停机,所以基本也就是个重启应用的时间。
Pythoner666666
2023-03-30 16:10:29 +08:00
没你们说的那么麻烦 ,git pull, npm i , pm2 reload 结束
DICK23
2023-03-30 17:01:26 +08:00
你同事顺序搞反了吧。直接整负载均衡,单机切个端口的事
libook
2023-03-31 17:10:35 +08:00
用了快 10 年 Node.js ,从 9 年前就手动实现绝大多数情况下不停机上线了,大公司也有自动化灰度 CI/CD 能力,现在云原生完全自动化更简单了。

npm install 跟 pip install 基本上是一样的;区别在于 npm 会安装到项目目录下,pip 会安装到全局目录下; npm 允许同一个包在不同项目下甚至相同项目的不同依赖层级下使用不同版本,pip 默认不提供这种能力。
两者同样 import 过的包都需要重启重新 import 才能载入新的包,除非 hack 一些热更新方案。

题主这个同事要么是有其他原因需要停机,要么就是技术水平还不行。
morning
2023-04-21 13:13:14 +08:00
大概说下之前公司的自动化 CD 流程,首先需要一台打包机,环境配置跟生产机器一致,在打包机部署打包后分发到生产机器比如 /release/20230421 软链 到 /current ,然后切 IP ,关闭旧服务,启动新部署的服务,检查服务状态,成功后切回 IP

或者上 docker
jason118822
2023-04-22 22:55:36 +08:00
如果 nodejs 更新的业务代码刚好是新加的依赖,不用 docker 话,确实会出现报错,但半小时太离谱了。不用 docker 通常做法,git pull && npm i && pm2 reload xxx ,就能完成更新,通常一分钟不到

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/928456

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX