Git:推荐的Web开发设置

时间:2011-08-15 23:59:29

标签: git gitolite

两周以来,我一直在努力在我们的办公室实施Git。不是缺乏文档,而是丰富的示例,教程和git的各种用途让我对Web开发的推荐设置感到困惑。

我认为我有一个不错的设置,但在进入另一个结构之前,我想咨询更有经验的人。我有以下几点:

  • 工作站推送到本地登台服务器(A)
  • 本地登台服务器与gitolite合作以正确划分角色
  • 挂钩会自动将对登台服务器的任何更改推送到生产服务器(B)

这可视化如下: enter image description here

这有意义吗?我们有各种较小的PHP网站,没有什么比这更复杂的了。我的疑虑是:

  • 我应该使用什么样的'钩子'(B)?
  • 我还应该在生产服务器上运行gitolite吗?我觉得我不应该,因为毕竟只是一个用户将内容上传到服务器(登台服务器上的挂钩),但我不确定。
  • 我的出发点是:我们在生产服务器上有所有网站,还没有登台服务器和工作站。在初始设置时,将它们“拉”到舞台和工作站的方便方法是什么?

现在,以下问题是一些额外的想法,目前不是最重要的,但如果你碰巧知道更多,请分享你的想法:

  • 为简单起见,我希望能够从工作站运行git push并更新登台服务器和生产服务器。但有时,在上线之前,只更新登台服务器并首先查看那里的内容可能会有用。有一个简单的解决方案吗?

  • 实际上,我们不仅有一个而且有几个不同的生产服务器。但只有一个登台服务器。有没有办法配置不同的生产服务器,以便git自动将它们推送到正确的服务器?

提前感谢您分享您的想法!

3 个答案:

答案 0 :(得分:3)

您不希望在生产Web服务器上运行git服务器。而且你真的不希望你的生产服务器上有你的git存储库文件。就个人而言,我喜欢保持简单,不要将我的部署过程与我的SCM流程混淆。

所以我想我不会回答你关于git的问题,但我确实对我的所有web项目使用git,这是我使用的部署设置的类型:

我通常只将git用于SCM,并使用内部服务器来托管存储库(这可能与登台服务器完全相同)。

对于部署,我通常使用rake脚本,因为我喜欢ruby。但是bash脚本也可以。 bash版本将是这样的:

# deploy_staging.sh
rsync -va --delete --exclude-from excludes.txt ./ stagingserver:/htdocs/www.mysite.com/

# deploy_prod.sh
rsync -va --delete --exclude-from excludes.txt ./ realserver:/htdocs/www.mysite.com/

# deploy_all.sh
bash deploy_staging.sh || exit $?
bash deploy_prod.sh

# excludes.txt
.git
deploy_*.sh
excludes.txt

有权发布到服务器的开发人员将其SSH密钥添加到服务器计算机上的相应帐户。

简单易用,易于复制,无需设置挂钩,一切都很好地包含在存储库中,您可以清楚地控制部署的内容,并且可以检查它并从任何位置运行部署正确的网络访问。

答案 1 :(得分:3)

我有类似的设置,我更喜欢使用多个遥控器。因此,我不是使用钩子,而是将“prod”添加为遥控器,并将“uat”添加为遥控器。这样,如果我想推动生产,我可以这样做:

git push prod
git push uat

答案 2 :(得分:3)

  
      
  • 我应该使用什么样的'钩子'(B)?
  •   

您应该使用post-receive or post-update hooks来执行此操作

  
      
  • 我还应该在生产服务器上运行gitolite吗?我觉得我不应该,因为毕竟只是一个用户将内容上传到服务器(登台服务器上的挂钩),但我不确定。
  •   

由于您提到的原因不是强制性的,但由于gitolite设置起来非常简单,因此不会受到伤害

  
      
  • 我的出发点是:我们在生产服务器上有所有网站,还没有登台服务器和工作站。在初始设置时,将它们“拉”到舞台和工作站的方便方法是什么?
  •   

对于他们每个人,您只需执行这些命令

cd /path/of/project
git init
# optionally create and edit your .gitignore file before the next step
git add .
git commit

然后从您的登台服务器运行git clone命令。

  
      
  • 为简单起见,我更喜欢能够从工作站运行git push并更新登台服务器和生产服务器。但有时,在上线之前,只更新登台服务器并首先查看那里的内容可能会有用。有一个简单的解决方案吗?
  •   

我看不到这个任务的简单解决方案,但是我不喜欢你的自动化生产部署解决方案,有些东西可能会变坏,你会破坏你的生产网站,所以我更喜欢citizen conn多个远程解决方案您可以使用gitolite和权限处理更好地管理事物。每个人都可以推送登台服务器,但受限制的一群人可以推送到生产服务器。

  
      
  • 实际上,我们不仅有一个而且有几个不同的生产服务器。但只有一个登台服务器。有没有办法配置不同的生产服务器,以便git自动将它们推送到正确的服务器?
  •   

您可以将生产服务器地址存储在项目的某个文本文件中,然后在git hook中使用该文件的内容。