我们有一个拥有超过350个运行实例的生产站点,因此即使在短时间内关闭网站也是一件大事。我的问题是: 在将我们的代码推送到生产之后,如果作曲家有任何更新我们必须更新它,在此期间该网站将被关闭。那么在更新时不更新网站的情况下更新作曲家的最佳做法是什么?
答案 0 :(得分:3)
我强烈建议您使用部署系统,例如Capistrano(https://github.com/capistrano/capistrano)。
Capistrano将按照示例将您的分支/提交克隆到专用文件夹,运行像Composer这样的脚本,如果一切正常,则创建/移动符号链接到此文件夹。
这对您的用户来说是透明的。
如果出现任何问题,您可以要求Capistrano“回滚”,它会使符号链接指向最后一个工作版本(文件夹)。
答案 1 :(得分:2)
我建议使用这种方法来实现几乎为零的停机时间: Web服务器的根目录必须只是一个符号链接。
因此,您无需关闭网站即可将文件直接复制并上传到根目录。只需使用符号链接。同样以这种方式回滚到任何旧版本都会容易得多。
答案 2 :(得分:0)
我使用azure来托管我的网站,我注意到他们做的是以下内容:
通过在另一个文件夹上运行composer install,live的包始终可用。只有当您将文件复制到实时目录时才会出现停机时间,但这将非常简短。
答案 3 :(得分:0)
生产/阶段服务器中不需要作曲家或git。
这是我要执行的步骤:
发布:使用ci工具(例如circleci,travis等)运行测试,还可以创建发布版本。
部署:使用部署工具(例如chef,puppet,ansible),该工具将自动执行发布,理想情况下是与某些编排工具(例如kubernetes,terraform等)一起工作
(仅在您的发行分支中,例如: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.1将代码下载到/ some / path / {release-version}
2.2完成后,删除实际的符号链接(如果有),并创建一个新的符号链接到/ some / path / {release-version}
2.3删除所有以前的版本,以避免出现内存问题