Magento 2部署过程


8

当前,我们提交composer.lock到存储库,然后composer install --no-dev在生产服务器上运行。我认为这不是最好的方法,因为作曲家需要几分钟来生成所有文件,并且这样做是有风险的。

我想知道将在生产模式下运行所需的所有文件提交回购是否更好。

其他人如何使用magento 2管理部署过程?


为什么有风险?每次安装/设置仅需完成一次,并且一旦作曲家下载了程序包就将其缓存。
user3668514 '02

也许我缺少了一些东西,但是如果您在存储库中没有vendor文件夹,那么如何在不运行composer install生产环境的情况下安装新模块?letscodejavascript.com/v3/blog/2014/03/the_npm_debacle
Claudiu Creanga

关键是要跑 composer install。您是否研究过git钩子来自动执行该过程?
user3668514 '02

@ user3668514如果在生产环境中运行composer install时,某些远程软件包出现故障(如npm发生的情况)怎么办?
Claudiu Creanga '16

这种情况多久发生一次?Magento2现在带有.gitignore,它明确地忽略/ vendor等。因为这是新的“ Magento方式”,所以我正在遵循以确保其他开发人员可以在项目上正常工作
user3668514

Answers:


5

与claudiu-creanga达成100%的协议,同意不提交供应商,并且避免在生产环境中运行composer。

我们处理此问题的方法是拥有一个实时文件夹和一个候选发布文件夹。它是在release-candidate文件夹中运行git pull命令和composer install --no-dev的。我们的过程可以总结如下:

  1. 在发布候选文件夹中:

    • 检查意外更改
    • 更新仓库
    • 作曲家安装
  2. 将文件同步到实时站点文件夹

  3. 在实时站点文件夹中:
    • 部署静态文件
    • 启用维护模式
    • 启用模块
    • 运行安装脚本
    • 编译DI
    • 清除缓存
    • 禁用维护模式
    • 更新权限

我写了一篇较长的博客文章,提供了背后的实际命令和推理:https : //www.c3media.co.uk/blog/c3-news/deploying-magento-2-production-environment/

更新:现在,我们将实时数据库复制到临时数据库,并使用它来运行安装脚本,部署静态文件和全部脱机编译DI。然后可以将其部署为实时发布,包括发布/静态文件和var。如果正在运行安装脚本,我们仍然会暂时关闭该站点,但否则将其保留。有关更多详细信息,参见https://www.c3media.co.uk/blog/c3-news/magento-2-deployment-without-downtime/

更新:我改变了提交供应商文件夹的主意-通过提交文件夹,您可以跟踪这些文件的更改历史记录,查看是否意外更改了任何内容,最重要的是,您不必运行composer在部署时。由于我们依赖于存储库的外部供应商,因此后者至关重要。如果其中之一不可用怎么办?突然您无法部署。弊端是更大的存储库,存在遭受核心黑客攻击的风险,以及像我这样的开发人员一时被拒之门外:)


我们也已经开始提交app / etc / config.php。默认情况下,Magento 2的.gitignore会忽略它,但是通过在开发期间提交此启用和禁用操作,然后提交该决定,并可以通过CI进行传播和测试。
罗伯特·艾金顿

您是否严重使网站离线?这不是我们的选择。我们公司实际上是在赚钱
TheBlackBenzKid

目前,是的,我们暂时使网站处于离线状态,因为我们不能100%地确定用户不会看到部分运作的网站。凭借我们对M1的丰富经验,我们非常确定地知道可以进行哪些更改而无需关闭站点。M2还不是。
罗伯特·艾金顿

投票赞成。但是,像@TheBlackBenzKid一样,我希望看到不会使您的网站脱机的东西,特别是因为DI编译需要一些时间。我认为了解DI编译的实际作用是关键-如果可以在release-candidate文件夹中完成该步骤,那就太好了。自您发布此@Robert以来的任何进展?
Erfan

1
有趣的编辑@RobertEgginton-我正在对此进行探索,并关注了您的帖子和讨论。我同意在部署时使用composer以及第三方回购协议可能存在的不妥之处,尽管我认为这与packagist回购协议无关。提交./vendor似乎也不理想,但是至少它为您提供了可以独立于第三方存储库部署的完整发行版。您是否尝试过Capistrano Magento2扩展程序?这使用composer安装,但我喜欢盖帽工作流程github.com/davidalger/capistrano-magento2
BlueC

3

到目前为止,我们还提交了vendor文件夹,这当然会将很多文件添加到您的仓库中。(请确保删除供应商编辑器文件中的所有.git文件夹,否则文件夹内容将不会提交-例如firegento)。但是符号链接vendor文件夹不起作用,在vendor_path.php文件中编辑路径也不起作用,到目前为止,我们还没有时间寻找更好的解决方案。

我们没有构建服务器,也没有在服务器上运行composer,而是在本地运行和测试所有更新并将其提交。这又触发了我们的部署脚本。

我们的部署脚本替换env.php文件,做了一些定制的东西,然后也触发setup:upgradesetup:static-content:deploy切换活链接到新文件夹之前。

我们符号链接的唯一文件夹是pub / media。


感谢您的输入。除了更改env.php之外,您还要进行哪些其他更改?
Claudiu Creanga '16

我猜这一切都取决于您自己的服务器和项目设置。对于dev&staging分支,我们还删除.htaccess并将自己的.htaccess和htpassword文件复制到目录中,我们确保bin / magento是可执行的,以作为在运行cli命令之前的预防措施。我们以magento文件所有者的身份运行(部署用户为root),并将媒体文件夹符号链接到pub文件夹。当然,您还可以添加其他任何在部署时而不是在部署时希望执行的操作。
tecjam

通常建议不要在/ vendor中提交文件,因为它违反了组件管理器的目标。请参阅作曲家文档。
user3668514 '02

那很清楚。那么,您如何管理您的部署呢?
tecjam

1
小心@ user3668514-我认为您的意思是作曲家安装。意外运行更新并实际修改组件而不是安装它们很容易。
罗伯特·埃金顿

2

最后,我们选择了类似deploybothttp://deploybot.com/)的服务。您可以capistrano免费使用。Deploybot在composer安装运行时创建一个docker容器,如果命令成功,则它将部署代码,否则它将不部署任何内容,因此您的生产环境将是安全的。

我认为这是最好的方法,因为:

1)作曲家不建议在git仓库中使用vendor文件夹,这是有充分理由的:

The general recommendation is no. The vendor directory (or wherever your dependencies are installed) should be added to .gitignore/svn:ignore/etc.

更多信息:https : //getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md

2)composer install in production在没有安全网的情况下进行冒险有风险的,程序包可能会关闭(请参阅npm),您可能会遇到内存问题,或者在composer生成文件时可能发生任何错误,并且您将不得不处理损坏的生产环境。


1

我也在对此进行研究,到目前为止,我采用的方法是:

引导服务器:

  1. 将项目设置composer --create-project ... --no-dev到一个src文件夹中(尽管我仍然看到很多开发人员遇到的麻烦)
  2. 设置应用,编译静态文件,升级数据库等。
  3. 设置所有正确的权限

从我的src目录中可以得到一个正在运行的库存(但是我的webroot没有指向那里)

然后是我的部署过程:

  1. 制作一个新的发行文件夹
  2. 将src文件同步到我的发行版中(不包含入库文件)
  3. 在顶部部署和解压缩我的自定义项(少数主题文件和模块)
  4. 通过magento connect安装任何第三方magento模块
  5. 将主机的webroot指向我的新版本(带有符号链接)
  6. 优雅地重新加载我的网络服务器

这使我可以将Magento核心代码与自己的代码分开维护,使用作曲家将其保持最新。.并且我不需要发货39,102 !!!每个部署文件,或在部署时运行composer命令。

...热衷于了解其他方法或最佳实践,并且id也很想知道生产中实际需要哪些文件以及哪些是开发人员。因此我可以保持我的webroot干净。

一旦完成,我将有一个烦人的剧本和一些Fabric命令来编排配置和部署,我很高兴与大家分享。

希望能有所帮助


我很想看看剧本和剧本。
JM Becker
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.