我有一个目前分发给5台服务器的python程序,类和包的目录。看来我不断添加更多服务器,现在我只是在从本地机器到服务器上进行基本的rsync。
在n个服务器之间分发代码会有什么更好的方法?
感谢
答案 0 :(得分:4)
我使用Mercurial和fabric来部署所有源代码。 Fabric是用python编写的,所以你很容易上手。更新生产服务就像fab production deploy
一样简单。最终会做这样的事情:
看到这一切都自动发生真是太棒了。
答案 1 :(得分:1)
首先,确保将所有代码保留在版本控制之下(如果您还没有这样做),这样您就可以从存储库中检出新版本的代码,而不必将其从您的服务器复制到服务器工作站。
使用版本控制,您可以使用Capistrano等工具自动检出每台服务器上的代码,而无需登录每台计算机并进行手动结帐。
通过这样的设置,将新版本部署到所有服务器就像运行
一样简单$ cap deploy
来自您当地的机器。
答案 2 :(得分:0)
虽然我也使用版本控制来执行此操作,但您可能考虑的另一种方法是使用主机系统使用的任何包管理(例如RPM或dpkgs)打包源,并设置系统以使用自定义存储库然后“apt-get upgrade”或“yum update”将更新系统上的软件。然后你可以使用像“mussh”这样的东西在所有工具上运行stop / update / start命令。
理想情况下,您首先将其推送到“测试”存储库,让您的登台系统安装它,并且一旦对其进行了测试,您就可以将其移至生产存储库。
这与一般使用结构或版本控制的建议非常相似,只是另一种可能更适合某些人的选择。
使用软件包的缺点是您无论如何都可能正在使用版本控制,而且您必须管理这些软件包的版本号。我在我的版本控制中使用修订标记来执行此操作,因此我可以轻松地在目标系统上执行“svn update”或类似操作。
在任何一种情况下,您可能需要考虑从一个版本迁移到另一个版本。如果用户加载包含对其他元素的引用的页面,则执行更新并且这些元素消失,您会怎么做?您可能希望在部署脚本中执行某些操作,或者在您首次使用新页面推出版本的代码中执行某些操作,但保留旧引用的元素,对其进行部署,然后删除引用的元素并在以后进行部署。 / p>
这样用户就不会在页面中看到破碎的元素。