在生产环境中部署发布的最佳实践
Best practice to deploy release on production
我们有一个包含 350 多个 运行 实例的生产站点,因此即使是短时间的站点停机也很重要。
我的问题:
在将我们的代码推送到生产环境后,如果 composer 有任何更新我们必须更新它,在此期间站点将关闭。那么,在不关闭站点的情况下,在生产环境中更新 composer 的最佳实践是什么?
我正在使用 azure 托管我的网站,我注意到它们的作用如下:
- 将代码从 git 拉到暂存文件夹
- 在此文件夹中安装作曲家依赖项
- 将此文件夹的所有内容复制到活动文件夹
通过 运行 composer 安装在另一个文件夹中,实时包始终可用。唯一可能发生停机的时间是将文件复制到活动目录时,但这将非常短暂。
我强烈建议您使用部署系统,例如 Capistrano (https://github.com/capistrano/capistrano)。
Capistrano 会根据示例将您的 branch/commit 克隆到一个专用文件夹中,运行 脚本如 Composer,如果一切正常,那么它 create/move 到该文件夹的符号链接。
它对您的用户是透明的。
如果出现任何问题,您可以要求 Capistrano "rollback",它将使符号链接指向最后一个工作版本(文件夹)。
我建议使用这种方法来实现几乎零停机时间:
Web 服务器的根目录必须只是一个符号 link.
- 为每个版本创建一个新目录并将文件上传到其中。
- 安装依赖项。
- 运行 你的测试。
- 创建一个符号 link 作为指向新发布目录的 Web 服务器的根目录。
因此您无需关闭网站即可直接复制和上传文件到根目录。只需使用符号 links。同样以这种方式回滚到任何旧版本要容易得多。
在 production/stage 个服务器中,您不需要作曲家或 git。
这是我遵循的步骤:
发布:使用ci工具(如circleci、travis等)运行你的测试,也创建发布版本。
部署:使用部署工具(如 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 释放抛出 api。您可以使用 https://github.com/tcnksm/ghr 之类的工具或在那里制作您自己的代码
第 2 步:部署
2.1 将您的代码下载到 /some/path/{release-version}
2.2 完成后,删除实际的符号链接(如果有的话)并创建一个新的符号链接到 /some/path/{release-version}
2.3 删除任何以前的版本以避免内存问题
我们有一个包含 350 多个 运行 实例的生产站点,因此即使是短时间的站点停机也很重要。
我的问题:
在将我们的代码推送到生产环境后,如果 composer 有任何更新我们必须更新它,在此期间站点将关闭。那么,在不关闭站点的情况下,在生产环境中更新 composer 的最佳实践是什么?
我正在使用 azure 托管我的网站,我注意到它们的作用如下:
- 将代码从 git 拉到暂存文件夹
- 在此文件夹中安装作曲家依赖项
- 将此文件夹的所有内容复制到活动文件夹
通过 运行 composer 安装在另一个文件夹中,实时包始终可用。唯一可能发生停机的时间是将文件复制到活动目录时,但这将非常短暂。
我强烈建议您使用部署系统,例如 Capistrano (https://github.com/capistrano/capistrano)。
Capistrano 会根据示例将您的 branch/commit 克隆到一个专用文件夹中,运行 脚本如 Composer,如果一切正常,那么它 create/move 到该文件夹的符号链接。
它对您的用户是透明的。
如果出现任何问题,您可以要求 Capistrano "rollback",它将使符号链接指向最后一个工作版本(文件夹)。
我建议使用这种方法来实现几乎零停机时间: Web 服务器的根目录必须只是一个符号 link.
- 为每个版本创建一个新目录并将文件上传到其中。
- 安装依赖项。
- 运行 你的测试。
- 创建一个符号 link 作为指向新发布目录的 Web 服务器的根目录。
因此您无需关闭网站即可直接复制和上传文件到根目录。只需使用符号 links。同样以这种方式回滚到任何旧版本要容易得多。
在 production/stage 个服务器中,您不需要作曲家或 git。
这是我遵循的步骤:
发布:使用ci工具(如circleci、travis等)运行你的测试,也创建发布版本。
部署:使用部署工具(如 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 释放抛出 api。您可以使用 https://github.com/tcnksm/ghr 之类的工具或在那里制作您自己的代码
第 2 步:部署
2.1 将您的代码下载到 /some/path/{release-version}
2.2 完成后,删除实际的符号链接(如果有的话)并创建一个新的符号链接到 /some/path/{release-version}
2.3 删除任何以前的版本以避免内存问题