Magento / Nginx / Vagrant

Vor einiger Zeit hatte ich das Vergnügen auf dem Barcamp in Mainz von Stefan Husch, der selbst seit einigen Jahren in Ruby entwickelt und meinem ehemaligen Kollegen Mattias Gutjahr eine tolle Einführung in das Thema Puppet und Vagrant bekommen zu haben. Seit dem befasse ich mich immer mal wieder mit dem gesamten Thema „DevOps“ und versuch Dinge die ich immer wieder machen muss zu automatisieren. Stefan ist mir hier ein gutes Stück vorraus. Er provisioniert seine Server schon seit Jahren mit Puppet und stellt damit z.B. Instanzen seines CMS oder z.B. Redmine per Knopfdruck bereit. Da mich das Thema damals direkt in Verbindung mit Magento interessiert hatte, stellte ich meine ersten Erfahrungen über ein Github Projekt der Öffentlichkeit zur Vergfügung. Das ganze habe ich damals auch im Rahmen einer kleinen Vorstellung bei unserer PHPUG gezeigt. Wie bereits geschrieben, enthielt das Projekt meine ersten Erfahrungen mit Puppet und Vagrant. Es wunder mich aber immer mal wieder jemand das Projekt forked obwohl die Scripte alles andere als optimal sind. Einige Forks (z.B. https://github.com/matthewsplant/magento-vagrant-puppet) haben das Projekt um einiges vorangetrieben. Das freut mich natürlich.

Neues Projekt mit Nginx

Inzwischen habe ich eine neue Version ins Netz gestellt. Im Gegensatz zur ersten Variante setze ich jetzt auf einige Standard-Module die man über das Zentral Repository unter https://forge.puppetlabs.com/ leicht findet. Die Module sind in eigenen Git-Repos organisiert die ich einfach als Git-Submodul eingebunden habe. Die Vagrant Box setzt auf die aktuelle offizielle Ubuntu Precise 64 Bit Box auf die bei Bedarf von Vagrant einmalig heruntergeladen wird.

Das Projekt lässt sich über die Konsole schnell wie folgt aufsetzen:

git clone https://github.com/cmuench/Magento-Vagrant-Puppet-Nginx.git
cd Magento-Vagrant-Puppet-Nginx
git submodule init
git submodule update
vagrant up

Nach dem Start der Vagrant Box werden über Puppet direkt alle Abängigkeiten installiert. Das sind im einzelnen die folgenden Server-Komponenten:

Anpassungen

Über das Basis-Puppet-Modul mit dem Namen „magento“ werden alle anderen Puppet Module aufgerufen. Das Modul stellt momentan einige Parameter bereit über die z.B. die Magneto Version eingstellt werden kann. Wer selbst sein Magento installieren möchte, der stellt den Paramter „install_magento“ einfach auf „false“ ein. In diesem Fall wird nur die Umgebung installiert aber nicht der Shop. Das ist z.B. zum Testen von Magento Enterprise Editions von Vorteil da diese nicht über n98-magerun ohne Anpassung der Konfiguration heruntergeladen werden können und dürfen.

Die Anpassung erfolg inder Datei puppet/manifests/base.pp.

class { "magento":
    install_magento     => true,
    magento_version     => "magento-ce-1.6.2.0",
    install_sample_data => true
}

Folgende Magento Versionen sind als Angabe zulässig:

  • magento-ce-1.6.2.0
  • magento-ce-1.7.0.2
  • mageplus-master
  • magento-mirror-1.4.2.0
  • magento-mirror-1.5.1.0
  • magento-mirror-1.6.2.0
  • magento-ce-2.0.0.0-dev

An diesem Projekt werde ich bestimmt noch ein wenig herumschrauben. Ich freue mich auf Feedback von euch.

  • Rokko11

    Das wäre doch unfassbar geil, wenn es hierzu sowas wie puphpet.com gäbe 🙂
    Ich weiß, das widerspricht etwas dem „Magento auf der Kommandozeile“-Ansatz, würde aber einigen richtig gut gefallen.

    Viele Grüße!

    • puphpet.com darf gerne geforked werden 🙂
      Für Einsteiger ist das auf jeden Fall eine gute Idee.

  • Tom

    gibt es die möglichkeit die magento installation wieder in den ausgangslage zurück zu setzen bzw. die versionen zu wechseln ohne die box zerstören und neu aufbauen zu müssen?

    • Ja, indem man die Shop Sourcen in /vagrant und die angelegte MySQL Datenbank löscht.
      Danach sollte man durch „vagrant provision“ ein erneutes Einspielen auslösen können. Ausprobiert habe ich das jetzt aber nicht da ich persönlich bisher mit dem kompletten Neuaufbau keine Probleme hatte. Die Basis-Box muss dann ja nicht mehr aus dem Netz gezogen werden.

      • Tom

        funktioniert genau so, danke!