最佳的代码跨服务器分发方法是什么?

4 投票
3 回答
617 浏览
提问于 2025-04-16 00:09

我有一个存放Python程序、类和包的文件夹,现在我把这些内容分发到5台服务器上。看起来我将来还会增加更多的服务器,而现在我只是简单地用rsync命令从我的本地电脑复制到这些服务器上。

那么,有什么更好的方法来在多台服务器之间分发代码呢?

谢谢!

3 个回答

0

虽然我也使用版本控制来管理这些,但你可以考虑另一种方法,就是把源代码打包成你所用系统的包格式(比如RPM或dpkg),然后设置系统使用一个自定义的仓库。这样,当你执行“apt-get upgrade”或“yum update”时,系统上的软件就会更新。接着,你可以用类似“mussh”的工具在所有工具上运行停止/更新/启动的命令。

理想情况下,你应该先把它推送到一个“测试”仓库,让你的测试系统先安装它。一旦测试通过了,你再把它移动到生产仓库。

这和使用fabric或版本控制的建议很相似,只是另一种可能更适合某些人的选择。

使用包的一个缺点是,你可能已经在使用版本控制了,而且你还得管理这些包的版本号。我通常在我的版本控制中使用修订标签,所以我也可以在目标系统上执行“svn update”或类似的命令。

无论哪种情况,你可能都需要考虑从一个版本迁移到下一个版本。如果用户打开一个页面,里面有其他元素的引用,而你更新后这些元素消失了,那该怎么办呢?你可能希望在你的部署脚本或代码中先推出一个新页面的版本,同时保留旧的引用元素,先部署这个,然后再去掉那些引用元素,之后再进行部署。

这样用户就不会在页面中看到损坏的元素了。

1

首先,确保你把所有的代码都放在版本控制系统里(如果你还没这样做的话),这样你就可以从一个代码库中获取新版本的代码,而不需要每次都从你的工作电脑手动复制到服务器上。

有了版本控制后,你可以使用像Capistrano这样的工具,自动在每台服务器上获取代码,而不需要登录到每台机器上去手动操作。

有了这样的设置,向所有服务器部署新版本的操作可以简单到只需要在你的本地电脑上运行

$ cap deploy

就可以了。

4

我使用Mercurialfabric来部署所有的源代码。Fabric是用Python写的,所以你上手会很简单。更新生产服务只需要输入 fab production deploy 这条命令。这个命令会自动做以下几件事:

  1. 先关闭所有服务,并显示一个“正在升级”的页面。
  2. 更新源代码目录。
  3. 运行所有的迁移操作。
  4. 重新启动所有服务。

看到这一切自动进行,真是太棒了。

撰写回答