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

问题描述 投票:2回答:4

我们的生产站点具有超过350个正在运行的实例,因此即使在很短的时间内使该站点停机也很重要。
我的问题:将代码推送到生产环境后,如果composer上有任何更新,我们必须对其进行更新,在此期间,该站点将关闭。 那么在生产上更新作曲家而不在更新时关闭网站的最佳实践是什么?

php deployment composer-php web-deployment production
4个回答
3
投票

我强烈建议您使用像Capistrano( https://github.com/capistrano/capistrano )这样的部署系统。

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

对您的用户而言是透明的。

如果有任何问题,您可以要求Capistrano“回滚”,这将使符号链接指向最后一个可用的版本(文件夹)。


2
投票

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

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

因此,您不必关闭网站即可处理和直接将文件上传到根目录。 只需使用符号链接。 同样,以这种方式回滚到任何旧版本也更加容易。


0
投票

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

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

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


0
投票

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

这是我遵循的步骤:

  1. 发布:使用ci工具(例如circleci,travis等)运行测试,还可以创建发布版本。

  2. 部署:使用部署工具(例如chef,puppet,ansible),该工具将自动执行发行,理想情况下是在一些编排工具(例如kubernetes,terraform等)旁边工作

步骤1:发布CI

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

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 release抛出api。 您可以使用https://github.com/tcnksm/ghr之类的工具,也可以在此处编写自己的代码

步骤2:部署

2.1将代码下载到/ some / path / {release-version}

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

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

© www.soinside.com 2019 - 2024. All rights reserved.