GIT和部署策略Magento2项目


91

在Magento 1中,我使用了一个部署工具,该工具提取了GIT存储库,运行了类似的命令modman deploy-all,并确保该var目录可写。对于.gitignore我来说,我使用的这个效果很好。

但是Magento 2呢?

哪种gitignore效果最好,如何部署项目以及在部署前和部署后应运行什么命令。期待听到社区的一些见解。

问题将持续存在一段时间


好问题@sander Mangel
Amit Bera

1
根据定义,对此没有规范的答案,因此它可能范围太广,也不太适合该站点的问答性质。应该可能是meta。但是您已经知道了。就是说,我会允许直到赏金到期。
philwinkle

@philwinkle可能范围很广,但由于给出了3个答案,因此似乎范围不太广。如此处所讨论:meta.magento.stackexchange.com/questions/745/…元将用于有关MageSE的问题,而不是随机帖子/问题。如果您要删除它,我无法阻止您,但似乎很多人们对这个问题很感兴趣,我认为这是一个有效的问题,尽管不是太具体。
桑德·曼格尔

有两件事:首先,Sander关于Meta的观点是正确的- 应用于与SE平台有关的问题,因为它与Magento SE有关(注意:我们可能对Meta的监管不够,无法加强此规则)。其次,“很多人(对某个问题感兴趣)”与一个问题是否可以被规范地回答无关(因此与该问题对StackExchange格式的适用性无关)。确实令人沮丧(我自己对此表示反对)。我倾向于查看该Q / A线程的去向。也许A可以说得足够好以至于完全是“正确的” ...
benmarks 2015年

在这种情况下,@ benmarks我选择了错误的赏金原因或主题,其背后的动机是要奖励那些花时间写下完整答案的人。如果此线程不属于此处,我将其复制并在线发布到某处,以感谢作者,因为我认为它仍然有价值。如果删除前请通知我
Sander Mangel

Answers:


55

以下步骤描述了如何为自定义模块开发而非生产环境设置环境。

项目初始化

  1. repo.magento.com凭证github访问令牌添加到composer主目录中的auth.json
  2. 使用以下命令创建项目:

    composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition .

  3. 就拿这个的.gitignore并投入你的项目的根。几乎所有的核心文件/目录已添加到根.gitignore,但最好是添加以下2以及/update/phpserver(刚加入这2行的.gitignore)

  4. 在项目根目录中初始化新的git存储库
  5. 将所有未跟踪的文件添加到git并提交
  6. 像往常一样开始开发模块(将其放在app/code/VendorName/ModuleName),现在您的git存储库中将只有自定义代码

Magento安装

  1. 确保按照官方指南中的说明设置所有文件系统权限
  2. 使用命令行安装Magento,例如:

    ${project_root}/bin/magento setup:install \ --db-host=localhost \ --db-name=magento \ --db-user=root \ --backend-frontname=admin \ --base-url=http://base.url.goes.here/ \ --language=en_US \ --timezone=America/Chicago \ --currency=USD \ --admin-lastname=Admin \ --admin-firstname=Admin \ --admin-email=admin@example.com \ --admin-user=admin \ --admin-password=123123q \ --cleanup-database \ --use-rewrites=1

  3. 启用索引器cron作业,例如在Ubuntu上:

    echo "* * * * * php ${project_root}/bin/magento cron:run &" | crontab -u www-data -

  4. Magento将以default模式运行,所有丢失的内容将在首次请求时自动生成。因此,无需运行编译器或静态内容部署
  5. [可选]如果使用PHP Storm,请在其中运行以下命令以启用XSD支持:

    bin/magento dev:urn-catalog:generate .idea/misc.xml


嗨,亚历克斯。项目初始化步骤3-您可以扩展一下吗?您是否发现必须手动将该子目录复制到根目录?(我想知道是否有某些事情无法正常工作-我没想到这一步。)
艾伦·肯特

@AlanKent当前,您将所有与Magento相关的文件下载到vendor,其中包括magento2-base,这只是新项目的框架。不确定为什么此步骤未配置为由作曲家自动完成,将尝试找出答案。关于.gitignore从另一个仓库复制,已经在讨论如何消除/简化这一步骤。
Alex Paliarush 2015年

不需要步骤3。在第2步中完成文件/文件夹的封送处理
。– Maddy

谢谢@Maddy。@AlanKent,magento2-base不再需要复制到根目录(已验证),最近似乎已修复。从答案中删除了此步骤。
Alex Paliarush 2015年

1)我把我所有的代码放到仓库中,已经安装完毕,一切,当我从仓库中取出并更改admin pangel和db凭据的设置时,一切都会正常吗?2)由于我在推送过程中忘了排除var /和pub /文件夹,我可以完全删除它们,以便它们可以在远程仓库中删除,它们会重新生成吗?谢谢。
Lachezar Raychev '16

25

对于“初始化和安装”,请遵循Alex回答的大部分步骤,只有不同之处我建议:

Git配置

仅将以下文件存储在您的Git存储库中:

  • composer.json
  • 作曲家
  • app / etc / config.php

对于项目自定义代码,还请使用通过作曲家包括的单独模块。通过锁定作曲家比较容易,因为您可以锁定要部署的特定版本/发行版。这也迫使您对内部和外部模块使用相同的方法。

部署方式

在开发期间,您可以使用以下命令在您的环境(开发/测试)上更新模块:

composer update

这将使用该安装上安装的版本更新composer.lock文件。

在暂存/预生产/生产中,您可以使用以下命令创建/安装相同的设置:

git pull
composer install

这将安装与dev / test中使用的所有模块相同的模块,以确保发布到生产之前的测试使用与开发时所用的模块版本相同的模块版本进行。

安装后运行以下命令:

bin/magento setup:upgrade
bin/magento setup:di:compile (or setup:di:compile-multi-tenant)
bin/magento setup:static-content:deploy

这将更新数据库(架构和数据升级),生成DI配置并部署所有静态视图文件。


使用样本数据而不是生成固定装置也许有意义吗?夹具仅填充最关键的模块,似乎仅对性能测试有用。
Alex Paliarush 2015年

谢谢,删除了该部分,因为在生产中使用网站时不需要。
Vladimir Kerkhoff 2015年

这与我正在使用的方法非常接近。这也适用于Magento 1(构建过程不太复杂),让composer做好工作,根据我的经验,它确实可以很好地用于部署,并且除了.gitignore策略的复杂性之外,我们还没有看到其他缺点不要遵循git中较小的足迹。
Aepod

此安装看起来像“集成商”方式。它将回购添加到vendor / magento / *中。没有代码将出现在app / code / ..和其他目录中。我将如何获得Magento 2核心Dirs,如.zip存档中所示。是否可以通过composer添加一个模块(其他git repo),而不是自动添加到app / code / ...中?
晦涩的

4
冒险,作曲家不是部署工具。如果在生产环境中运行时在composer上安装时出现故障...
Claudiu Creanga

3

重新.gitignore,2.2及以上版本的Magento官方答案将是“ config.php进入git,env.php不在”。

我们正在寻找像Mediawiki这样的作曲家插件,以使内部开发人员更接近扩展开发和客户站点。仍在探索中,尚未最终确定。

我非常喜欢将Composer“路径”存储库类型与../othergitrepo/app/code/*/*拾取模块的路径一起使用,但是它使用符号链接,这在使用Unison或类似应用程序的开发环境中效果不佳。


3

我们采用了不涉及单独的构建服务器/流程的不同方法,好像在生产中一样进行本地开发

然后,我们提交生产所需的所有文件。然后,我们只需将变更集部署到服务器并运行upgrade命令。

获得适合于开发但也可以在生产模式下运行的版本是棘手的部分,虽然仍然不完美,但是现在我们有了一个可行的方法。

原因是我们希望对要生产的代码进行100%的控制。由于magento2会生成大量代码,因此我们必须在本地运行它才能理解所有影响并能够像在生产中一样进行调试。

我知道这不是很多人建议做的,但对我们来说效果最好。

前端设置步骤

为了使这些脚本起作用,请在env.php中将商店设置为生产模式,并在中设置主题dev/tools/grunt/configs/themes.js。(以下步骤已放入Ansible剧本中)

  1. 删除 var/cache
  2. 删除 var/view_preprocessed
  3. 删除pub/static/*(不要删除.htaccess)
  4. 删除 var/composer_home
  5. php bin/magento cache:flush
  6. php bin/magento setup:static-content:deploy %your_languages%
  7. 从pub / static / frontend删除所有您实际上不使用的主题/语言
  8. 从中删除较少文件的硬拷贝 pub/static/frontend
  9. php bin/magento dev:source-theme:deploy --locale="%your_language%" --theme="%your_theme%" css/styles-m css/styles-l css/email css/email-inline
  10. 可选:我们使用bash脚本将步骤9中创建的绝对符号链接更改为相对符号链接,从而可以从vm外部运行grunt
  11. grunt less:your_theme

后端/ di-setup步骤

  1. 删除 var/cache
  2. 删除 var/generation
  3. 删除 var/composer_home
  4. 删除 var/di
  5. php bin/magento cache:flush
  6. php bin/magento setup:di:compile

感谢@ greenone83,尽管我将后端作为前端的一部分生成,但我基本上已经采用了这种方法。我从不使用setup:di:compile,因为我发现它搞砸了!我不明白的一件事是为什么setup:static-content:deploy用生成的代码生成文件(位置已从您的帖子中更改了)?我发现,如果删除所有生成的代码,我的网站处于生产模式时,这些文件将在我浏览网站时自动创建。
PedroKTFC

2

您也应该忽略这些文件
/app/etc/config.php
/app/etc/env.php
/.idea/workspace.xml // phpstorm


2
如果忽略config.php,则在推送到其他环境后将需要再次启用新扩展,因此最好将其包含在存储库中。
Vladimir Kerkhoff 2015年
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.