Aber beginnen wir am Anfang. Magento setzt zur Modulinstallation nun auf Composer. Daher können nun alle Module, auch das Framework selbst, per composer installiert werden. Dazu muss man natürlich ein eigenes Repository welches die Magento Module enthält hinzufügen. Dieses stellt Magento unter packages.magento.com bereit.
Die dazu passende Composer.json, welche auch direkt ein ganzes Magento installiert, sieht dann wie folgt aus:
{
"name": "magento/project-community-edition",
"description": "eCommerce Platform for Growth (Community Edition)",
"type": "project",
"version": "0.74.0-beta12",
"license": [
"OSL-3.0",
"AFL-3.0"
],
"require": {
"magento/product-community-edition": "0.74.0-beta12"
}
"config": {
"use-include-path": true
},
"autoload": {
"psr-4": {
"Magento\\Framework\\": "lib/internal/Magento/Framework/",
"Magento\\Setup\\": "setup/src/Magento/Setup/"
}
},
"autoload-dev": {
"psr-4": {
"Magento\\Sniffs\\": "dev/tests/static/framework/Magento/Sniffs/",
"Magento\\Tools\\": "dev/tools/Magento/Tools/",
"Magento\\Tools\\Sanity\\": "dev/build/publication/sanity/Magento/Tools/Sanity/",
"Magento\\TestFramework\\Inspection\\": "dev/tests/static/framework/Magento/TestFramework/Inspection/",
"Magento\\TestFramework\\Utility\\": "dev/tests/static/framework/Magento/TestFramework/Utility/"
}
},
"minimum-stability": "alpha",
"prefer-stable": true,
"repositories": [
{
"type": "composer",
"url": "http://packages.magento.com/"
}
]
}
Schnell noch ein composer install aufgerufen und Zack hat man ein ganzes Magento mit allen seinen Abhängigkeiten. Natürlich lassen sich auch eigene Module zu den Abhängigkeiten etc hinzufügen. Darum soll es aber dies mal nicht gehen. Generell ist das Thema aber auch schon sehr schön unter http://magenticians.com/installing-magento-2-composer im Kapitel "2.2 Completely via Composer" beschrieben.
Problematisch ist dass, wie gesagt, diese Abhängigkeiten von extern geladen werden. Das ist gut solange alles verfügbar ist, doof wenn mal jemand Probleme hat.
Mirror packages.magento.com
Meine Lösung besteht darin ein Mirror von packages.magento.com anzufertigen. Das ist, dank Satis, relativ leicht.
Zuerst installieren wir das Composer Repository Tool Satis mittels composer:
composer.phar create-project composer/satis --stability=dev --keep-vcs
Danach legen wir eine magento2.json an:
{
"name": "packages.magento.com Mirror"
"require-all": true
"archive": {
"directory": "dist",
"skip-dev": true
},
"repositories": [
{ "type": "composer", "url": "https://packages.magento.com" }
]
}
Der Trick besteht in der Option "archive" inkl. der Option "require-all". Erste sorgt dafür das Satis nicht ein GIT-Repo zurückgibt sondern alles in einem ZIP archiviert, zweite läd alle Module welche im Repository aufgelistet wurden.
Nun muss das Mirror nur noch erstellt werden:
./satis/bin/satis build magento2.json ../htdocs/packages/magento2
Per HTTP lässt sich das Repo nun unter www.deine-domain.de/packages/magento2 aufrufen. 4 GB später hast du ein komplettes Mirror :)
Eigenes Repo?
Zusätzlich haben wir noch ein eigenes Repo unter deine-domain.de/packages. Dieses enthält nun alle unsere internen Pakete und zusätzlich ein Mirror von packages.magento.com. Dazu haben wir wie oben gezeigt erst mal ein komplett Mirror von packages.magento.com unter meine-domain.de/packages/magento angefertigt. Danach haben wir ein zweites Satis Composer Repo unter meine-domain.de/packages mit folgendes composer.json erstellt:
{
"name": "code-x - Magento Module",
"description": "informaton.",
"repositories": [
{ "type": "composer", "url": "http://meine-domain/packages/magento2" },
{ "type": "cvs", "url": "git@unser-gitlab/modul1" },
{ "type": "cvs", "url": "git@unser-gitlab/modul2" }
]
Hierbei haben wir auf eine Archivierung verzichtet da wir unser eigenes Gitlab ja selbst betreuen und wir maximal viel über einen Ausfall wissen :-)Damit haben wir nun eine zentrale Stelle für unser Composer Magento Module inkl. dem Magento2 Core als Mirror.
In der Magento composer.json des jeweiligen Projektes muss nun nur noch der Repository Teil von packages.magento.com auf meine-domain.de/packages geändert werden:
"repositories": [
{
"type": "composer",
"url": "http://meine-domain.de/packages/"
}
],
Making of
Beim Erstellen dieses Blog Posts sind folgende Issues auf Github angelegt worden:
- Magento2: Fix recursive dependencies?
- Magento2: magento-composer-installer : Cleanup code?
- Magento 2: Composer Integration and project specific moduls?
- Satis: Prioritize Repository?
Es fehlen im Mirror also, Aufgrund von Fix recursive dependencies?, noch die Abhängigkeiten welche direkt von packagist.org geladen werden. Sobald ich da weiter bin erweitere berichte ich im Blog darüber :)