下面这个是netflix的部署流程:html
dev
开发环境,服务不稳定,可能须要频繁重启之类的,通常每一个开发者本地搭建开发环境。nginx
integration
通常本地开发完,部署到integration环境,供其余合做的小伙伴联调集成,可能也须要服务重启之类的。docker
test
稳定版的integration环境,提供给测试环境其余服务用的,通常比较少重启。数据库
小团队或项目,不必区分这么多,排除开发者本地dev环境外,名义上的线下环境就一个,就是测试环境(integration/test).api
pre-production
)准生产环境,通常用于新功能的预上线,进行dogfood测试,没问题就能够部署生产环境。服务器
staging环境越接近生产环境越好,除了服务器配置外,其余的最好跟生产的同样,好比链接的其余外部服务,链接的数据库等等。
另外,对于一些跟技术实现相关的,也须要注意一下,好比有状态的服务,若是staging是单实例的,可能无法测出问题来,须要弄成分布式的才能暴露问题,好比cas server回调client设置session,该session是本地的话,多实例的clint就会出现session不共享问题。session
若是全部的新功能都是向下兼容的,那么能够用feature toggle,相似灰度部署同样,那么能够弱化staging环境,甚至能够不用staging环境。不过这个是理想的状况,软件开发里头的一个小改动,可能就影响到旧有功能了,没法隔离那么完全。分布式
关于staging环境,能够做为一个nginx上的upstream的一个backup,这样能够不浪费资源。不过有了docker以后,staging环境能够按需启用,新功能上以前,才部署,发布完能够撤掉staging环境,这样就不浪费资源了。测试
生产环境,要可以作到不停机发布,或者叫作不间断升级。spa