9

两周来,我一直在尝试在我们的办公室实施 Git。与其缺乏文档,不如说是丰富的示例、教程和 git 的各种用途让我对什么是推荐的 Web 开发设置感到困惑。

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

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

如下图所示: 在此处输入图像描述

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

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

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

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

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

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

4

3 回答 3

3

您不想在生产 Web 服务器上运行 git 服务器。而且你真的不希望你的生产服务器上的 git 存储库文件。就我个人而言,我喜欢让事情保持简单,而不是将我的部署过程与我的 SCM 过程混为一谈。

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

我通常只将 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 密钥添加到服务器计算机上的适当帐户中。

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

于 2011-08-16T00:14:23.513 回答
3

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

git push prod
git push uat
于 2011-08-16T00:14:27.457 回答
3
  • 我应该为(B)使用什么样的“钩子”?

您应该使用post-receive 或 post-update 挂钩来执行此操作

  • 我还应该在生产服务器上运行 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 挂钩中使用该文件的内容。

于 2011-08-16T00:22:11.733 回答