使用 Git 从开发到部署

From development to deployment with Git

我很纳闷。我用 git 阅读了很多关于 'development & deploy' 的资料,但什么都不懂。

现在我有:

  1. 带有项目的本地(开发)存储库(git init
  2. Gitlab/Github 我 store/commit/push 我的项目所在的服务器。
  3. 生产服务器

有了本地存储库和 gitlab/github 服务器就很清楚了。我进行更改并推送到服务器。接下来,我需要将它部署到服务器,这里是问题 'How to do it correctly'?

许多消息来源写道我需要在生产服务器上有两个存储库:

  1. git --bare init
  2. 以及 /var/www 文件夹中的非裸存储库

然后我需要将更改从我的 local/development 存储库推送到 Bare 然后将项目拉入 /var/www来自这个 Bare 存储库。

但是如果我有 Github/Gitlab 服务器,那么我在这个 Bare 存储库中看不到逻辑,因为我在服务器上有这段代码。我说的对吗?

我正在为我的项目使用 Laravel,并且在一些提交之后需要 composer install。如果我在生产服务器上拉取这个提交,那么它可能会破坏站点并且它会关闭一段时间,直到我完成所有必需的步骤。当然所有步骤都可以用自动脚本完成,但我认为它也会在短时间内破坏网站。

我想了解将应用程序部署到生产服务器的正确方案。

更广泛的工具,如 Capistrano 可以为您自动化很多事情,但也有一个学习曲线。

如果没有更多细节,很难知道最佳解决方案,但我曾经看到的原子提交策略是使用符号链接。我举个例子

在您的服务器上克隆您的存储库两次,并从 /var/www 设置一个符号链接以指向其中一个。部署时,进入另一个文件夹和 git pull、运行 任何需要的安装命令,然后更新您的符号链接以指向更新后的文件夹。我相信这类似于 Capistrano 在幕后的工作方式。

只是我的两分钱!

我认为最好的方法(这就是我们正在研究的一个大型项目所遵循的方法)是在单独的环境中设置一个单独的 git 项目(假设 "Test" 或"Stage" 环境),您将从中克隆托管在 gitlab 上的 git 项目。

克隆阶段并执行必要的准备步骤后,您可以提取提交到 gitlab/github 服务器的更改。这样您就可以在每次拉取请求后在舞台上测试网站。如果一切正常并且没有损坏的部分,您也可以按照如下所述的相同逻辑从生产环境中提取 git 内容。这个想法是舞台环境必须具有相同的 php 版本和服务器设置等

当然,您可以使用 Vagrant, Docker or Jenkins 等自动化工具(仅举几例,但还有更多),它们通过使用实际系统创建映像来消除因不同系统配置而产生的麻烦配置包括项目和将项目部署到单独的虚拟机。

下面是您可能遵循的过程的详细图片。