1
amery2010 2023-03-30 13:27:55 +08:00
|
3
CHTuring 2023-03-30 13:36:58 +08:00
如果是后端 node.js 的话,确实是要安装依赖。
但是常规操作就是更新依赖,打包,运行。 半个小时应该不用吧 |
4
hanai 2023-03-30 13:38:11 +08:00 via iPhone
应该用 docker 的,并不会复杂很多。
|
5
cosmtrek 2023-03-30 13:40:52 +08:00
用 docker 封装一下省心
|
6
aaronhua OP 每次都是先新建目录,上传打包的代码,然后 pm2 stop 应用,再 npm install ,最后再新建 pm2 进程。就不能先 npm install ,然后再新建 pm2 进程,这样就不会中断服务这么久。用 package.json 锁定了依赖的大版本,小版本,让 npm 自动更新。说是不停机,小版本更新不了,或者会报错。
|
7
amery2010 2023-03-30 13:43:09 +08:00
pm2 可以可以配置自动部署的,配置一下 deploy 参数,可以做到不停机更新
|
8
aaronhua OP @CHTuring 其实我不明白的一点是,一定要停了服务才能更新依赖么?不能先更新依赖,打包,停服务,再运行么?
|
10
old9 2023-03-30 13:47:33 +08:00
一般没有动态加载的模块,不需要停服务
|
11
aaronhua OP 我也用 pm2 ,看来我跟他还没有完全搞懂 pm2😂
|
13
estk 2023-03-30 13:51:55 +08:00
可以检测 github 新版本,服务器自动部署呀。。
|
14
weijancc 2023-03-30 13:55:32 +08:00
这个感觉是运维有点问题吧, node 程序安装依赖是可以停机的
|
15
raighne 2023-03-30 14:00:13 +08:00
```shell
npm I pm2 kill xx && pm2 start xxx ``` 不行么 |
16
makelove 2023-03-30 14:03:15 +08:00
从来都是直接 npm install 再 restart node 进程,还没碰到过坑
另外半小时也是离谱,这 npm install 更新下不就一分钟的事? |
17
yhxx 2023-03-30 14:03:24 +08:00
可以停的
或者再简单一点,docker 打个新镜像,打完之后服务指到这个新镜像上,再把旧的销毁 |
18
wu67 2023-03-30 14:06:54 +08:00
半小时有点离谱. 我的都是 3 到 6 分钟.
|
19
kongkxyang 2023-03-30 14:07:03 +08:00 via iPhone
soft link + 版本目录 不能解决问题?
|
20
mozhizhu 2023-03-30 14:11:21 +08:00
还是建议 docker ;当前版本崩了,大 BUG 了,还能后退;直接运行的服务,除非是长期不变的项目;
|
21
IvanLi127 2023-03-30 14:11:27 +08:00 via Android
一般不需要停就能装依赖。不过 node js 的应用,可以做热更新,也可以没做热更新,一般项目是没做热更新支持的,会停机更新是很正常的。。。没必要纠结这个,即使人家敢冒风险停服更新,出事了谁负责。。。
|
22
markgor 2023-03-30 14:14:47 +08:00
自己停机维护时间 = 预估需要时间 * 1.5 取整小时为单位。
一切顺利的话发多个公告 经过.....提前....完成任务。 别人停机时间 = 10 分钟???不就重启下就好了吗 |
24
themostlazyman 2023-03-30 14:21:27 +08:00
前面加个 nginx ,新版本换个目录换个端口。部署完还能先测试下,前提是两个版本兼容,表没变化,或表变化不影响当前版本使用。
|
25
opengg 2023-03-30 14:31:24 +08:00
你们不上集群、容器、load balancer 的吗?
单机裸跑? |
26
learningman 2023-03-30 14:40:01 +08:00
写个 dockerfile 才几行啊
|
27
aaronhua OP |
29
xuanbg 2023-03-30 14:44:36 +08:00
为啥更新依赖要停机?新版本的依赖包就不能正常发布么?实在是摸不着头脑
|
30
aaronhua OP @opengg 是的,用户是部门的人,才几十个人。单机没有压力。系统蹦一阵子没人察觉的那种。😂要是,停机比较长,领导就会来找我。
|
31
zhangxh1023 2023-03-30 14:52:04 +08:00
既然是几十个人用,怎么简单怎么来,估计也是为了防止出问题吧,停会儿也没啥问题,懒得折腾
|
32
aaronhua OP @zhangxh1023 是的,躺平
|
33
isbase 2023-03-30 15:21:14 +08:00
上容器吧
|
34
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 安装依赖时不需要先停机,所以基本也就是个重启应用的时间。 |
35
Pythoner666666 2023-03-30 16:10:29 +08:00 2
没你们说的那么麻烦 ,git pull, npm i , pm2 reload 结束
|
36
DICK23 2023-03-30 17:01:26 +08:00
你同事顺序搞反了吧。直接整负载均衡,单机切个端口的事
|
37
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 一些热更新方案。 题主这个同事要么是有其他原因需要停机,要么就是技术水平还不行。 |
38
morning 2023-04-21 13:13:14 +08:00
大概说下之前公司的自动化 CD 流程,首先需要一台打包机,环境配置跟生产机器一致,在打包机部署打包后分发到生产机器比如 /release/20230421 软链 到 /current ,然后切 IP ,关闭旧服务,启动新部署的服务,检查服务状态,成功后切回 IP
或者上 docker |
39
jason118822 2023-04-22 22:55:36 +08:00
如果 nodejs 更新的业务代码刚好是新加的依赖,不用 docker 话,确实会出现报错,但半小时太离谱了。不用 docker 通常做法,git pull && npm i && pm2 reload xxx ,就能完成更新,通常一分钟不到
|