从git repo导入生产服务器的良好实践

时间:2019-04-02 17:46:50

标签: linux laravel git ubuntu

我有一个带有ubuntu和一些laravel项目的DigitalOcean VPS,对于我的项目的初始设置,我做了一个git clone,用来自在线存储库的应用程序文件创建一个文件夹。

我在本地机器上进行所有开发工作,在这里我有两个分支(master和develop),我要做的是将开发合并到本地master,然后从master推送到本地存储库。

Nw返回我的生产服务器,当我想将添加到生产中的所有更改添加到生产环境时,我会从源头开始进行git pull,到目前为止,这已经导致git告诉我存储我的更改,为什么?

将更改引入生产服务器的最佳方法是什么?请记住,我的生产服务器本身没有工作目录,我在VPS中所做的只是克隆或将升级推送到生产中。

2 个答案:

答案 0 :(得分:4)

您可以看一下CI / CD(持续集成/持续交付)系统。例如GitLab为小型团队提供免费使用计划。

您可以使用手动部署步骤创建管道(将代码合并到master分支后必须按一个按钮),然后使用所需的任何工具来部署代码(scp,rsync,ftp,sftp等)。 )。

最大的好处是,您可以有多个中间步骤(甚至对于工作分支),您可以在其中运行单元测试,从而防止您上传失败的版本(无论何时合并非工作代码)

答案 1 :(得分:3)

对于第一个问题,请在生产中执行git status,以查看git认为已更改或添加了哪些文件,并考虑将其添加到您的.gitignore文件中(该文件本身应该是您回购的一部分) )。 Laravel通常具有良好的默认设置,但是您可能在升级Laravel的过程中添加了一些东西或偏离了它们。

对于部署,最佳实践是拥有一致,可复制,可记录和可还原的内容。为此,我建议选择一个部署实用程序。这些通常会做几乎相同的事情:

  1. 您可以在代码中定义部署参数,您可以将其作为存储库的一部分提交(当然,密码不是密码,而是服务器名称,部署路径和部署任务之类的东西)。
  2. 您直接从本地计算机启动部署。
  3. 脚本/实用工具SSH进入目标服务器,并将最新的代码从远程git repo(通过SSH密钥授权转发到服务器)中提取到“发布”文件夹中。
  4. 脚本执行您定义的所有其他任务(composer installnpm run prodsystemctl restart php-fpm,软链接共享文件(例如.env等)
  5. 该脚本将文档根目录软链接到新的“ release”文件夹,这实际上导致了停机时间为零。如果上述任何一个步骤失败,或者您发现了最新版本中的错误,则只需软链接到以前的版本文件夹,您的站点仍然可以工作。

以下是一些解决方案,您可以检查所有这些解决方案:

  • Laravel Envoyer:第一方(收费)服务,可让您通过基于Web的GUI进行部署。
  • Laravel Envoy:第1方(免费)软件包,可让您连接到产品服务器和脚本部署任务。这非常简单,因为您必须自己编写所有命令,但有些人可能更喜欢。
  • Capistrano:这是(免费)一种经过反复测试的流行的基于ruby的部署实用程序。
  • Deployer:相当于Capistrano的(免费)PHP。易于使用,具有许多内置任务(包括Laravel任务),并且不需要红宝石。

如果您要使用这些实用程序,不一定非要使用CI / CD。您可以使用这些工具来定义管道中的CD步骤,同时仍然可以预先执行其他步骤。