我正在与需要多阶段服务器设置的客户端合作:开发服务器,舞台服务器和生产/实时服务器。
舞台应该尽可能稳定,以测试我们在开发服务器上开发的所有新功能,并最终将其带到实时服务器。
我们使用git和github进行版本控制。我使用Ubuntu服务器版作为操作系统。
问题是,我从未在这样的多阶段服务器计划中工作过。您会建议哪些软件/项目以正确的方式处理此类设置,尤其是部署并将开发的新功能移动到舞台然后再转移到实时服务器?
答案 0 :(得分:7)
我们使用两种不同的方法将代码从环境转移到环境。第一种是在我们的源代码控制系统中使用分支和触发器(在我们的例子中是mercurial,尽管你可以用git做同样的事情)。另一种方法是使用fabric,一个python库,用于跨多个服务器执行shell代码。
使用源代码管理,您可以拥有多个主要分支,例如production
development
staging
。假设您要将新功能移动到暂存中。我将用mercurial来解释,但你可以将命令移植到git,它应该没问题。
hg update staging
hg merge my-new-feature
hg commit -m 'my-new-feature > staging'
hg push
然后使用触发器将远程源控制服务器推送到所有Web服务器。然后,每个Web服务器上的触发器将执行更新并重新加载Web服务器。
要从升级转到生产,它就一样容易。
hg update production
hg merge staging
hg commit -m 'staging > production'
hg push
这不是最好的部署方法,它使得回滚非常困难。但它的设置快速简便,并且比将每个更改手动部署到每个服务器要好得多。
我不会通过面料,因为它可以参与其中。您应该阅读their documentation,以便了解它的功能。面料和django有很多教程。我强烈推荐Fabric架构,因为它可以让你获得更多的控制权,而且只需要编写一些python。
答案 1 :(得分:4)
有一个nice branching model for git(因为它也被github本身使用)。您可以使用git-flow轻松应用此分支模型,这是一个git扩展,使您可以应用适合此模型的一些高级存储库操作。关于此,还有一个nice blogpost。
我不知道你想在部署工作流程中自动完成什么,但是如果你应用上面提到的模型,大多数正确的版本处理都是由git完成的。
要为此添加一些进一步的自动处理,fabric是一个简单但很棒的工具,您会发现many tutorials about its usage(也与git结合使用)。
使用virtualenv and pip处理python依赖关系肯定是一个非常好的方法。
如果您需要更复杂的东西,例如。在一台机器上处理多个django实例,并处理系统范围的依赖关系等,checkout puppet或chef。
答案 2 :(得分:2)
尝试使用Gondor.io或Ep.io,它们都非常容易(gondor特别擅长这个领域)有两个+代码,代码非常相似,来自你的VCS - 以及来回移动数据。 (如果你需要邀请,请在IRC中询问,但如果我记得,他们现在都是开放的)