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

时间:2015-11-10 10:20:12

标签: php deployment composer-php web-deployment production

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

4 个答案:

答案 0 :(得分:3)

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

Capistrano将按照示例将您的分支/提交克隆到专用文件夹,运行像Composer这样的脚本,如果一切正常,则创建/移动符号链接到此文件夹。

这对您的用户来说是透明的。

如果出现任何问题,您可以要求Capistrano“回滚”,它会使符号链接指向最后一个工作版本(文件夹)。

答案 1 :(得分:2)

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

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

因此,您无需关闭网站即可将文件直接复制并上传到根目录。只需使用符号链接。同样以这种方式回滚到任何旧版本都会容易得多。

答案 2 :(得分:0)

我使用azure来托管我的网站,我注意到他们做的是以下内容:

  1. 将代码从git拉到暂存文件夹
  2. 在此文件夹中安装composer依赖项
  3. 将此文件夹的所有内容复制到实时文件夹
  4. 通过在另一个文件夹上运行composer install,live的包始终可用。只有当您将文件复制到实时目录时才会出现停机时间,但这将非常简短。

答案 3 :(得分: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删除所有以前的版本,以避免出现内存问题