我很困惑 . 我已经阅读了许多关于使用git进行“开发和部署”的消息来源并且一无所知 .
我现在有:
-
带项目的本地(开发)存储库(
git init
) -
Gitlab / Github服务器,我存储/提交/推送我的项目 .
-
生产环境 服务器
使用本地存储库和gitlab / github服务器都很清楚 . 我做了更改并推送到服务器 . 接下来,我需要将它部署到服务器,这是“如何正确地做”的问题?
许多消息来源写道,我需要在 生产环境 服务器上安装两个存储库:
-
Bare
git --bare init
-
/var/www
文件夹中的非裸存储库
然后我需要将我的 local/development 存储库中的更改推送到 Bare ,然后从 Bare 存储库中拉出 /var/www
中的项目 .
但是,如果我有Github / Gitlab服务器,那么我在这个 Bare 存储库中看不到逻辑,因为我在服务器上有这个代码 . 我是正确的?
我正在使用Laravel进行我的项目,并且在一些提交后需要 composer install
. 如果我在 生产环境 服务器上提取此提交,那么它可能会破坏网站并且它会停止一段时间,直到我将完成所有必需的步骤 . 当然所有步骤都可以使用自动脚本完成,但我认为它也会在短时间内破坏网站 .
我想了解将应用程序部署到 生产环境 服务器的正确方案 .
2 回答
我认为最好的方法(这就是我们正在关注的一个大型项目),就是在一个单独的环境中设置一个单独的git项目(让我们说“测试”或“舞台”环境),你将从克隆gitlab上托管的git项目 .
克隆阶段并执行必要的准备步骤后,您可以将提交的更改提取到gitlab / github服务器 . 这样您就可以在每次拉取请求后在舞台上测试网站 . 如果一切正常并且没有损坏的部件,您可以从 生产环境 环境中提取git内容,这也遵循下面描述的相同逻辑 . 这个想法是舞台环境必须有相同的PHP版本和服务器设置等 .
当然,您可以使用自动化工具,如Vagrant,Docker或Jenkins(仅举几例,但还有更多),通过使用包括项目和实际系统配置在内的实际系统配置创建图像,可以解除由不同系统配置产生的麻烦 . 将项目部署到单独的虚拟机 .
以下是您可能会遵循的详细过程 .
像Capistrano这样的更广泛的工具可以为你自动化很多东西,但也有一个学习曲线 .
如果没有更多细节,很难知道最佳解决方案,但是一旦我看到原子提交的策略就是使用符号链接 . 我举个例子
在服务器上克隆您的存储库两次,并从
/var/www
设置一个符号链接指向其中一个 . 部署时,进入另一个文件夹和git pull
,运行任何所需的安装命令,然后更新符号链接以指向更新的文件夹 . 我相信这与Capistrano的工作方式类似 .只是我的两分钱!