多服务器部署策略 – 生产服务器上的Git?

主要问题:在生产服务器上部署使用Git是一个好策略吗?

我看到的很多很多的部署策略围绕在服务器上进行Git(开发,分段和生产)。

对于部署到舞台/制作来说,这样的优点显而易见:

  • 能够迅速引入变化
  • 更简单的自动化
  • 可以根据需要切换分支(也许每个testing服务器分支)
  • 可以查看文件在生产服务器中是否发生了某种变化

但是,我看到一些缺点:

  • 安全性 – Git似乎是一个潜在的攻击媒介,即使生产具有只读访问权限
  • 生产服务器上的git pull可能会失败,如果在生产中有某种不确定的变化(也可以用-f超越)

部署为服务公司(例如Beanstalkapp.com,deployhq.com)使用FTP,SFTP或SSH。 Beanstalkapp特别擅长只修改基于git历史的文件(vs重新部署每个文件)。 这些服务不要求你在你的舞台/制作服务器上使用git(如果你通过SSH进行部署,则可以使用该策略)。

我发现我喜欢使用sftp:

  • 可以运行脚本前/后部署仍然
  • 覆盖,移动,删除文件,不pipe生产服务器上的什么(这对我来说是一个加号)
  • 生产中没有.git目录或任何基于git的攻击漏洞

在最佳实践和安全性方面,在生产服务器上使用git是否容易? 如果没有,那么在跳过持续集成工具的同时部署一个好的方法是什么?

(由于时间/预算/客户端的限制,我只会询问有关跳过CI工具的问题,因此无法在我的日常使用中使用)。

回答你的问题:是的,使用git(或任何其他版本控制软件)部署是一个很好的select,特别是当你的基础设施开始变得复杂/庞大时。

回答你的面子

  • 安全必须分层次完成,即使git是一个真正的攻击媒介,有人仍然需要访问服务器来做到这一点。 有良好的服务器安全性,基于SSH密钥的身份validation和访问控制/日志logging,你将有非常低的风险。

  • 如果你想写一个部署工具,当然你必须考虑一个回滚过程,以防代码更新失败。 好事是像capistrano(我更熟悉)的工具已经有了所有这些内置的步骤,你可以改变行为等等。

我认为最好的方式是使用像Capistrano这样的部署工具,或者使用部署者Vlad,甚至如果你已经有Chef(或者其他的configurationpipe理工具),Chef也会部署它。

例如,Capistrano默认情况下是针对导轨,但是您可以调整它来部署任何东西。 它会连接到你的服务器,更新代码(保留一些旧版本以防需要回滚到以前的版本),执行数据库迁移或清理等任务,然后根据需要重新启动服务。 你可以为你的环境量身定做,甚至可以有不同的环境(我曾经和生产合作过,还有另外3个人)。

所有其他的工具都可以让你做这样的事情,而且我认为花时间编写一个部署脚本只有在你的系统与'平常'系统完全不同时才有效。