管理Magento /作曲家/部署


18

因此,我很享受使用hackathon Magento Composer安装程序,但是我很难理解其他人如何将其与部署服务结合使用。当前,我正在使用DeployHQ,是的,我可以将其设置为在存储库有更新时部署并运行composer,但是现在这对我来说已经没有意义了。

我的主要作曲者存储库仅包含我要包含在构建中的所有软件包的json文件,仅当我向列表中添加新软件包时才进行更新。

当我更新主题或自定义扩展名(在json文件中引用)时,没有“钩子”来更新我的部署服务。因此,我必须登录到服务器并手动运行composer(这将使站点关闭,直到完成)。

那么其他人如何处理呢?我应该只在本地运行composer并将供应商文件夹包括在我的仓库中吗?

任何答案将不胜感激。


4
我投票关闭这个问题作为离题,因为它与Composer有关。
mbalparda

1
嗨,特别是,它与在作曲家中使用Magento有关,更具体地说,与Magento hackathon功能有关。因此,我认为您对此感到有些为时过早!
JamesAllwood

解释起来确实很复杂,但是我会尝试:由于我认为这个问题与Magento无关,而且您确实认为与之有关,因此我将其标记为“非主题”。如果主持人或其他4位成员决定需要关闭,则它将关闭。如果没有,它将保持打开状态。将问题标记为非主题时,该消息是自动的。这当然是不合时宜的,因为主要主题是与Magento关联的作曲家,但是它可以应用于任何其他软件安装,并且我认为它可能属于关于服务器/部署的站点,而不是Magento SE。
mbalparda

1
伙计们,这个问题获得了2票赞成和最爱。当然允许某人回答这个问题不会有任何危害吗?它会帮助MAGENTO社区中的其他人
JamesAllwood 2015年

@JamesAllwood你是怎么做到的?
jharrison.au 2015年

Answers:


13

我在我们的代理商处建立了一个结构,该结构使我们能够使用Composer部署我们的所有Magento网站。对于您提出的问题,这可能有点过头了,但是无论如何,这是该结构的基本概述:

仓库结构

以下是“父”存储库的文件夹结构。它包含作曲家JSON和锁定文件以及部署所需的其他配置。

- code
   - magento
- deployment
- environmental
   - local
       - local.xml
       - robots.txt
   - staging
       - local.xml
       - robots.txt
   - production
       - local.xml
       - robots.txt
- provisioning
- public
   - index.php
- vendor
- composer.json
- composer.lock
  • 所有特定于客户端的定制都存储在单独的“定制”模块中,该模块使用Composer安装
  • Magento核心作为Git子模块(code/magento)包含在内
  • 自定义index.php文件夹和其他文件夹(如媒体和错误)位于Magento根外部的公用文件夹中
  • 在部署过程中,特定于环境的文件(local.xml,robots.txt等)被符号链接到Magento根目录中
  • Git排除了vendor文件夹,但包含了composer.lock文件。

部署方式

  • 我们使用Capsitrano进行部署,该Capsitrano允许多个应用服务器和环境(分段/生产)
  • Capistrano在服务器上的新文件夹中构建整个代码库,然后在最后交换webroot符号链接,这意味着您的网站没有停机时间。
  • Capistrano composer install在构建过程中运行,并将所有模块部署到Magento子模块中。

这仍然不是一个持续的集成设置,但是我发现它对于Magento网站非常有效。如果您想进一步了解您的设置建议,请随时向我发送消息。


1
这是旧的答案,但希望您能回答。1存储生产local.xml是否不是安全问题?2在什么阶段以及如何导入数据库?
MployBy由

5

另一种方法是使用magento hackathons复制部署策略,在composer.json文件中看起来像这样:

"extra": {
    "magento-root-dir": "./",
    "magento-deploystrategy": "copy",
    "magento-force": true
}

使用上述方法将已安装的文件从供应商复制到实际安装,从而可以按常规在Git中进行提交和部署,而无需进行任何作曲者安装。

当您要进行实时部署时,我不太喜欢从第三方存储库中撤出,并且依赖第三方存储库有点冒险,除非您为网络使用了某种代理缓存。

阅读本文,它将为您带来不同的见解:http : //www.letscodejavascript.com/v3/blog/2014/03/the_npm_debacle

基本上,NPM宕机了(之类),并且每个人的构建系统都停止工作(对于关键部署!),因为它们直接依赖于NPM。(NPM有点像Java的Packagist,只是NPM实际上托管文件,而Packagist只是指向模块的Github存储库-如果我错了,请纠正我)

编辑:只是红色fschmengler的回应..这是对他的第一种方法的阐述


4

重要的是要了解Composer不是部署工具,而是开发工具。

有多种方法来准备具有所有依赖性的部署:

  • 将供应商目录(或在任何由Composer安装源代码的地方)提交到项目存储库
  • 使用运行composer install并使用结果创建存档的构建服务器,您可以将其重复部署到不同的目标系统
    • composer install在服务器上运行,然后按照@ jharrison.au的建议切换符号链接是此版本的变体

这且不说,我不建议使用作曲家为每一个模块并只保留 composer.jsoncomposer.lock 在项目档案库。这太过分了,并使开发不必要地变得复杂。对于可以在多个项目中重复使用的代码来说,这是很有意义的,但是为什么要将项目特定的代码放在单独的存储库中呢?

我当前的项目结构如下(使用AOE的替代作曲家安装程序):

  • src包含所有项目特定的模块。Composer还在此处安装任何其他Magento模块
  • .modman链接,src以便modman可以轻松处理符号链接
  • www是webroot。Composer在此处安装Magento内核

这样,我将外部模块包含在存储库中。如果您不想这样做,请像这样调整它:

  • src包含所有项目特定的模块。要将它们包括在内,.modman以便modman创建符号链接,请使用modman link
  • .modman在中.gitignore。Composer在此处安装Magento模块
  • www是webroot。Composer在此处安装Magento内核
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.