咱们在谈什么 当咱们谈部署时
计算机网络把各地的计算机衔接了起来,只需有一台可以上网的终端,比如手机、电脑,就可以访问互联网上马何一台主机的资源(包含静态资源和灵活的服务)。
作为开发者的咱们,就是这些资源、服务的提供者,把资源上行到主机,并把服务跑起来的环节就叫做部署。
代码局部的部署,须要先经过构建,也就是编译打包的环节,把产物传到主机。
最原始的部署模式就是在本地启动 build,而后把产物经过 FTP 或许 scp(基于 SSH 的远程拷贝文件拷贝)传到主机上,假设是后端代码还须要重启下服务。
每团体独自构建上行,这样不好治理,也容易抵触,所以如今都会用专门的平台来做这件事构建和部署,比如 jenkins。
咱们代码会提交到 gitlab 等代码库,而后 jenkins 从这些代码库里把代码下载上去启动 build,再把产物上行到主机上。
流程和间接在本地构建上行差不多,只不过这样繁难治理抵触、历史等,还可以跨名目复用一些物品。
构建、部署的环节最开局是经过 shell来写,但写那个的要求还是很高的,很少人会写(我就不咋会)。起初就允许了可视化的编排,可以被编排的这个构建、部署的流程叫做流水线 pipeline。
比如这是 jenkins 的 pipeline 的界面:
除了构建、部署外,也可以添加一些智能化测试、静态代码审核等义务。
这种智能化了的构建、部署流程就叫做 CI(继续集成)、CD(继续部署)。
咱们如今还是经过 scp / FTP 来上行代码做的部署,但是不同代码的运转环境是不同的,比如 Node.js 服务须要装置 node,Java服务须要装置 JRE 等,只把代码传上去并不必定能跑起来。
那怎样办呢?怎样保障部署的代码运转在正确的环境?
把环境也给治理起来,作为部署消息的一局部不就行了?
如今盛行的容器技术就是做这个的,比如 docker,可以把环境消息和服务启动模式放到 dockerfile 里,build 发生一个镜像image,之后间接部署这个 docker image 就行。
比如咱们用 nginx 作为静态主机的时刻,dockerfile 或许是这样的:
这样就把运转环境给治理了起来。
所以,如今的构建产物不再是间接上行主机,而是生成一个 docker image,上行到 docker registry,而后把这个 dockerimage 部署到主机。
还有一个疑问,如今前端代码、后端代码都部署在了咱们的主机上,共享主机的网络带宽,其中前端代码是不会变化的、流量却很大,这样使得后端服务的可用带宽变小、允许的并发量降低。
能不能把这局部静态资源的恳求分别进来呢?最好能部署到离用户近一点的主机,这样访问更快。
确实可以,这就是 CDN 做的事件。
网上有专门的 CDN服务提供商,它们有很多扩散在各地的主机,可以提供静态资源的托管。这些静态资源最终还是从咱们的静态资源主机来拿资源的,所以咱们的静态资源主机叫做源站。但是恳求一次性之后就会缓存上去,下次就不用再恳求源站了,这样就减轻了咱们主机的压力,还能减速用户恳求静态资源的速度。
这样就处置了静态资源分去了太多网络带宽的疑问,而且还减速了资源的访问速度。
此外,静态资源的部署还要思索顺序疑问,要先部署页面用到的资源,再部署页面,还有,须要在文件名加 hash 来触发缓存降级等,这些都是更细节的疑问。
这里说的都是网页的部署模式,关于APP/小程序它们是有自己的主机和散发渠道的,咱们构建完之后不是部署,而是在它们的平台提交审核,审核经过之后由它们担任部署和散发。
总结
互联网让咱们能够用手机、PC等终端访问任何一台主机的资源、服务。而提供这些资源、服务就是咱们开发者做的事件。把资源上行到主机上,并把服务跑起来,就叫做部署。
关于代码,咱们可以本地构建,而后把构建产物经过 FTP/scp 等模式上行到主机。
但是这样的模式不好治理,所以咱们会有专门的 CI/CD 平台来做这个,比如 jenkins。
jenkins 允许 pipeline 的可视化编排,比写 shell 脚本的模式易用很多,可以在构建环节中添加智能化测试、静态代码审核等步骤。
不同代码运转环境不同,为了把环境也治理起来,咱们会经常使用容器技术,比如 docker。把环境消息写入 dockerfile,而后构建生成 dockerimage,上行到 registry,之后部署这个 docker image 就行。
静态资源和灵活资源共享主机的网络带宽,为了减轻主机压力、也为了减速静态资源的访问,咱们会经常使用 CDN来对静态资源做减速,把咱们的静态主机作为源站。第一个静态资源的恳求会恳求源站并缓存上去,之后的恳求就不再须要恳求源站,这样就减轻了源站的压力。此外,静态资源的部署还要思索顺序、缓存降级等疑问。
关于网页来说是这样,APP/小程序等不须要咱们担任部署,只需在它们的平台提交审核,而后由它们担任部署和散发。
当咱们在谈部署的时刻,重要就是在谈这些。