如何部署更改而不中断服务?

我即将开始一个与Node ,Express和Mongo的项目,但有一个重要的问题,我必须先解决。

说我有一个运行的应用程序 。 迟早,我会再次编码,并希望部署更改 。 到目前为止,我只在开发模式下工作,因此,执行^ C并重新启动服务器不是问题。

如何在生产? 显然,我不能只是一次垃圾的服务器和所有的用户。 有没有办法在不中断服务的情况下部署更改?

我研究过像新贵和类似的系统,但是它不能解决问题(或者我错过了什么?)。 我正在考虑build立一种故障转移,但是有人必须在我之前做到这一点…

那么,我可能会使用像nginx这样的反向代理:低内存占用,能够处理大量的同时连接,并支持故障切换,当我终于有多个服务器。

有了这个nginx反向代理,我可以用更新的资源启动一个新的Node进程,让nginx切换到新的Node并且垃圾旧版本。

这也将允许我保持在服务器上的应用程序的以前的版本,以防万一新版本崩溃得太早…

链接: http : //nginx.org/en/docs/control.html

永远由NodeJitsu签出。 它守护进程并在失败时自动重启服务器。 它也有一个选项来观察你的CWD,所以如果你在你的repo中做了一个“git pull”,你的服务器将被重新启动。

我已经在生产中使用了这个服务器模型一年多了,几乎没有任何问题。

如果您关心可用性,那么您必须在多个服务器上运行您的服务,最好在不同的物理位置。 除部署外,大量的事件都可以使单个服务器脱机。 所以没有任何问题,您可以将每台服务器脱机,部署到该服务器并重新联机。

如果你不在乎可用性,那还是没问题的。