在部署之前或之后构建Web应用程序?

时间:2014-12-29 11:37:01

标签: node.js azure heroku deployment kudu

上下文

  • Web应用程序项目有一个/build(或/dist)文件夹,其中包含在构建期间生成的前端文件(Gulp)。此文件夹不在源代码管理下(例如,请参阅:React.js Starter Kit
  • 服务器端代码不需要捆绑或编译步骤,因此可以按原样部署项目中的/src文件夹(这些源文件用于运行Node.js或ASP.NET vNext服务器)
  • 通过Git部署Web应用程序(请参阅HerokuWindows Azure中基于Git的部署选项)

问题

  1. 在部署之前或之后构建(捆绑和缩小)前端文件是否更好?
    • 如果之前,您可能最终拥有一个单独的存储库(或分支),源代码控制下的/build文件夹以及其他项目文件。此repo仅用于部署目的。
    • 如果之后,部署时间可能会增加 - 下载构建过程中使用的其他npm模块所需的时间,服务器的CPU在构建过程中可能会高达100%,这可能会损害您的Web应用程序的响应能力。
  2. 在运行KuduSync命令之前或之后,在远程服务器上构建前端文件会更好吗?
  3. 如果使用Kudu将Web应用程序部署到Windows Azure,部署脚本是否应仅复制/build文件夹的内容(包含公共前端文件,如.js,.html, .css)到/wwwroot?与复制所有项目文件(服务器端源代码和前端软件包)相反,默认情况下这样做。
  4. 默认情况下,Azure的部署脚本会复制所有项目文件,从D:\home\site\repository文件夹复制到D:\home\site\wwwroot文件夹,然后从那里启动Node.js应用程序。这是必要的一步吗?为什么不从D:\home\site\repository文件夹启动Node.js(或ASP.NET vNext)应用程序?如果它确实应该复制到一个单独的文件夹,为什么源文件放在wwwroot中,也许最好将它们复制到wwwroot之外的另一个文件夹?

1 个答案:

答案 0 :(得分:-1)

我不熟悉Azure和Heroku,所以我无法对这些特定的部署选项提出任何想法。

我正在使用(4个专用服务器,其中2个仅用于提供静态文件),构建捆绑和缩小的javascript文件(用于前端)并将所有这些文件添加到主存储库的选项有几个优点< / p>

  • 您只需要运行一次(无论是在您的开发机器上还是在登台服务器上,无论您想要什么样的方式)。当您必须运行多个静态服务器时,这尤其有用,因为您不必在每个服务器上运行build命令。有人可能会说他们可以使用类似Glusterfs的东西来将文件从一个静态服务器同步到所有其他服务器,并且构建过程只需要运行一次。然而,当涉及到这种设置时,这是一个完全不同的故事
  • 它使您的部署过程变得简单,只需提取新代码并在必要时重新启动服务器(假设您有一些机制来增加静态文件版本,以便所有客户端都将收到最新版本)
  • 避免对生产服务器造成不必要的依赖。对于某些人来说这可能听起来很奇怪,但我只是不想在我的生产服务器上安装任何额外的库,除非它们是绝对必要的。构建过程在我的开发机器上本地运行,我的生产服务器只有他们运行生产代码所需的东西而没有别的东西

然而,这种方法也有一些缺点:

  • 当您团队中的多个开发人员(意外地)运行构建过程并提交代码时,您将会有一个疯狂的冲突列表。但是,只需在合并其他人的所有更改后再次运行构建过程即可解决此问题。这更多是关于工作流程
  • 您的存储库会更大。考虑到我的捆绑和缩小文件的额外MB,我个人认为这不是一个大问题。如果你的前端javascript足够大,这可能是一个问题,那么这是另一个故事