在生产上部署发布的最佳实践



我们有一个生产站点,有350多个正在运行的实例,因此即使在短时间内关闭该站点也是一件大事
我的问题:在将我们的代码推向生产后,如果composer有任何更新,我们必须更新它,在此期间,网站将关闭。那么,在更新时不关闭网站的情况下,在制作中更新作曲家的最佳实践是什么?

我建议使用这种方法来实现几乎为零的停机时间:web服务器的根目录必须只是一个符号链接。

  • 为每个版本创建一个新目录,并将文件上传到其中
  • 安装您的依赖项
  • 运行测试
  • 创建一个符号链接作为指向新发布目录的web服务器的根目录

因此,你不必关闭你的网站来应对并将文件直接上传到根目录。只需使用符号链接。同样,通过这种方式,回滚到任何旧版本都要容易得多。

我强烈建议您使用部署系统,如Capistrano(https://github.com/capistrano/capistrano)。

例如,Capistrano会将您的分支/提交克隆到一个专用文件夹中,运行Composer之类的脚本,如果一切正常,则会创建/移动到该文件夹的符号链接。

它对用户是透明的。

如果出现任何问题,您可以要求Capistrano"回滚",这将使符号链接指向上一个工作版本(文件夹)。

在生产/阶段服务器中不需要composer或git。

这是我遵循的步骤:

  1. 发布:使用ci工具(如circleci、travis等)运行测试,但也可以创建发布构建。

  2. 部署:使用部署工具(如chef、puppet、ansible),它将自动发布,理想情况下与一些编排工具(如kubernetes、terraform…)一起工作

步骤1:CI发布

(仅在您的发布分支中,例如:主)

1.1 composer archive

1.2解压缩到分发目录mkdir -p dist/ && tar -C dist/ -xf *.tar && cd dist

1.3 composer install --no-ansi --no-dev --no-interaction --no-progress --no-scripts --optimize-autoloader

1.4使用供应商存储库再次压缩

1.5让git发布抛出api。你可以使用这样的工具https://github.com/tcnksm/ghr或者在那里制作你自己的代码

步骤2:部署

2.1将您的代码下载到/some/path/{发布版本}

2.2完成后,删除实际的符号链接(如果有的话),并创建一个新的符号链接到/some/path/{release-version}

2.3删除任何以前的版本以避免内存问题

我正在使用azure来托管我的网站,我注意到它们的作用如下:

  1. 将代码从git拉到暂存文件夹
  2. 在此文件夹中安装composer依赖项
  3. 将此文件夹的所有内容复制到活动文件夹

通过在另一个文件夹上运行composer安装,实时软件包始终可用。唯一可能出现停机的时间是将文件复制到活动目录时,但这将非常短暂。

相关内容

  • 没有找到相关文章

最新更新