Django和多级服务器

Django和多级服务器,django,deployment,Django,Deployment,我正在使用一个需要多阶段服务器设置的客户机:开发服务器、阶段服务器和生产/实时服务器 阶段应该尽可能地稳定,以测试我们在开发服务器上开发的所有新特性,并最终将其应用到实时服务器上 我们使用git和github进行版本控制。我使用Ubuntu服务器版作为操作系统 问题是,我从未在这样的多阶段服务器计划中工作过。您建议哪些软件/项目以适当的方式处理此类设置,尤其是部署和将开发的新功能移动到后台,然后移动到live server 我们使用两种不同的方法将代码从一个环境移动到另一个环境。第一种是在我们的

我正在使用一个需要多阶段服务器设置的客户机:开发服务器、阶段服务器和生产/实时服务器

阶段应该尽可能地稳定,以测试我们在开发服务器上开发的所有新特性,并最终将其应用到实时服务器上

我们使用git和github进行版本控制。我使用Ubuntu服务器版作为操作系统


问题是,我从未在这样的多阶段服务器计划中工作过。您建议哪些软件/项目以适当的方式处理此类设置,尤其是部署和将开发的新功能移动到后台,然后移动到live server

我们使用两种不同的方法将代码从一个环境移动到另一个环境。第一种是在我们的源代码控制系统中使用分支和触发器(在我们的例子中是mercurial,不过在git中也可以这样做)。另一种方法是使用fabric,这是一个python库,用于跨多个服务器执行shell代码

使用源代码管理,您可以有几个主要分支,如
生产
开发
登台
。假设您想将新功能移动到暂存中。我将用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
这不是最好的部署方法,而且会使回滚变得非常困难。但它设置起来又快又容易,而且比手动将每个更改部署到每个服务器要好得多


我将不讨论织物,因为它可能会涉及到很多问题。你应该阅读,这样你才能理解它能做什么。关于fabric和django有很多教程。我强烈推荐fabric路由,因为它提供了更多的控制,并且只涉及编写一些python。

尝试Gondor.io或Ep.io,它们都可以让您很容易(Gondor在这方面尤其擅长)从VCS获得两个代码非常相似的+实例,并来回移动数据。(如果您需要邀请,请在IRC中询问,但如果我记得,它们现在都是开放的)

有一个(例如github本身也使用它)。您可以使用轻松地应用此分支模型,这是一个git扩展,使您能够应用一些适合此模型的高级存储库操作。关于这一点,也有很多不同的看法

我不知道您希望在部署工作流中自动实现什么,但是如果您应用上面提到的模型,大多数正确的版本处理都是由git完成的

添加一些进一步的自动处理,这是一个简单但很棒的工具,您将发现(与git结合使用)

对于处理python依赖项,使用是一个非常好的方法


如果您需要更复杂的东西,例如,在一台机器上处理多个django实例,以及处理系统范围的依赖关系等,请签出或。

对于投票决定关闭的人,与部署相关的工具和流程如何与软件开发无关?我也很好奇,部署和相关工具是软件生命周期的一个重要组成部分。乔希:不幸的是,这个问题没有一个好的答案(是开放的)。这就是人们投票决定关闭它的原因。这种问题对于某种论坛来说会更好,但对stackoverflow来说不是所有的问题都需要一个好的答案。我提供了两个有正反两方面的答案。这个问题完全可以回答。提供一套工具,说明每种工具的优缺点,让OP(和未来的访客)进一步调查并自行决定。faq中提到的“开放性”问题是“哪种编程语言最好?”即引发讨论的问题。这里没有讨论。请确保您的web主机正在使用虚拟化,并且您可以轻松克隆服务器。这使得克隆生产服务器(创建临时服务器)非常容易。我使用Linode,它很棒。