-
-
Notifications
You must be signed in to change notification settings - Fork 107
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
科普文:为什么不能在服务器上 npm install ? #30
Comments
最后那张图,是在语雀上直接用 PlantUML 画的。 PlantUML 的优势是:
一般来说,你不需要太关注语法和布局,很自然的画即可。 当然,它提供了不少特性,可以让你画的更好看点。 如下就是那张图的源码:
看起来好像有点复杂,其实只是因为我有强迫症,喜欢用
|
具体操作没看懂,是说把依赖包也git提交吗,回滚的版本也是通过git控制? |
@IEfucker 跟 git 没啥关系,最后那张图不是画的很清楚了么,在 CI 上打包,推送到 oss 或 dockerlab,然后发布系统这边记录对应的地址即可。 |
其实docker是一个更好的解决方案,一旦打包完之后就可以直接push上去,服务器只需要pull就好了,还能配合k8s做动态扩容。 |
正文一开始就声明了吧,docker 是终极解决方案。本方案是分享给那些没有条件的小团队使用。 |
跑单元测试时候的依赖版本和推送到发布系统的依赖版本需要保持一致吗? |
必然啊,跑完单元测试后,直接打包推送发布系统了。 PS:这里会有一个小 GAP 需要权衡,devdep 怎么办,是 prune 了重新 install --prod,还是直接打包。 |
OK 我把打包错理解成 docker build (install + pack) 了 对于你的问题, |
那你保证发布机器和生产机器系统以及其他因素都一样吗? 问题不在于依赖应不应该在服务器上安装,而在于如何优雅地启动服务,包括健康检查、流量切换 |
镜像啊 |
背景
Node.js 很简单,容易上手。但也因此缺乏不少规范,使用者水平参差不齐。
最近经常看到的一个问题是:
很多新手,在部署的时候,是直接在服务器上 npm install
,这是非常不推荐的。存在的问题
无法确定唯一性
因为安装是有较大的网络耗时的,所以你甚至无法保证集群情况下,两台服务器上
npm install
下来的包是一模一样的。如果某个库刚好更新了,并且它有 BUG,然后你就是百思不得其解:一定概率出某个问题。排查起来简直想死。
当然,很多人为了解决这个问题,就选择「锁版本」这个方案。
上线耗时久,无法快速回滚
上线后,发现线上故障,要快速回滚止血的时候,就懵逼了:
npm cache
解决不了问题,如机器扩容的时候。推荐方案
其中,关键点是:在构建期就把依赖打包进去。
优点:
缺点:
如何实施
那有同学就要问了:我是小公司,不像你们有这些基建可以服务,怎么办?
其实成本真的很低:
广告区
The text was updated successfully, but these errors were encountered: