OXID / GIT Download-Produkte

Digitale Güter online anbieten – Amazon macht es mit eBooks, auf Beatport erhalte ich aktuelle Musikangebote und im AppStore meines Smartphones bieten mir Apple, Google, oder Microsoft Musik- und Software-Downloads, zu jeder Zeit und an jedem Ort. Der Absatzmarkt auf Download-Produkte boomt, schließlich ist das Angebot überall abrufbar und oft auch preiswerter als im Laden, der oft erst mit dem Auto zu erreichen ist.

Ein Trend zeichnet sich ab und tendiert stark in Richtung „digital shopping“ und mobiles einkaufen.



Seit Oxid eShop Version 4.6.0 die Option „immaterielle Produkte“ zur Verfügung stellt, ist es ein leichtes Musik, eBooks, Videos oder Spiele, digital zum Verkauf im eigenen Shop anzubieten. Auch Software lässt sich wunderbar im Shop verkaufen. Der Upload der bezahl Download-Dateien erfolgt entweder über die Shop Administration oder bei größeren Datenmengen mit dem FTP Programm. Sofern die Dateien mittels FTP übertragen werden, müssen diese in der Shop Administration dem entsprechenden Artikel zugeordnet werden. Anschließend können Sie den Download-Artikel im Shop erwerben.


Oxid Standard Download Produktmanagement

Auf den ersten Blick scheint alles einfach und komfortabel zu administrieren. Kommen jedoch häufige Dateiwechsel oder Updates wie beispielsweise bei Websoftware Produkten ins Spiel, kann die Wartung und das Bereitstellen der Produkte mit Bordmitteln viel Zeit in Anspruch nehmen. Zeit die an anderer Stelle fehlt. Ein leichterer Weg Produkte bereit zu stellen muss gefunden werden.


Oxid Bezahl Downloads mit Git Versionierung

Wenn Software im Team entwickelt wird, kommt man früher oder später nicht um Versionierung herum. Wir bei Netensio verwenden die beliebte freie Versionsverwaltung git. Git verwaltet unsere Produkte einerseits als tags (Stabile Versionen) und die aktuellen Entwickler-Versionen. Dieses Konstrukt findet sich bei einem Großteil der Oxid Entwickler Community in ähnlicher Form wieder. Die git Gemeinde ist mittlerweile sehr groß geworden, viele Entwickler versionieren Ihre Software und selbst ganze Software-Systeme mit der freien Versionsverwaltung.



Verdeutlichen wir uns nochmal die Lage. Wir haben ein Shopsystem welches Download-Produkte aufnehmen kann und fertige Softwareprodukte liegen in unserer Versionsverwaltung. Wir suchen also einen allgemein gebräuchlichen und komfortablen Weg, Daten aus git zu holen und zu einem Oxid Download Produkt zu verwandeln.



OXID / GIT Artikeldownload Modul

Ich habe mich für die Integration als Oxid Modulerweiterung entschieden. Die bisherige Funktionalität soll durch mein Modul in keiner Weise beeinträchtigt werden und ich benötige zusätzlich zur Bereitstellung als open source Software eine Option .php Dateien mit mittels Ioncube Encoder zu verschlüsseln. Auf die Verschlüsselung der Software werde ich nur sehr oberflächlich eingehen, ich bin mit einigen Stellen des Moduls auch noch nicht zufrieden weshalb ich von einer Veröffentlichung derzeit noch absehe. Ich priorisiere in diesem Artikel den Checkout des git tags sowie das übergeben an Oxid als ZIP Archiv.



Damit man zum generieren eines Download Produkts aus git nicht jedes mal die Repository URL und den git Benutzer Login eingeben muss erstelle ich ein Deployment Plan Objekt, eine neue Datenbanktabelle für gespeicherte Deployment Profile und eine Oxid Admin View inklusive zugehörigem Template. Unter einem Deployment Profil verstehe ich ein gespeichertes Set aus Einstellungen, welche zum generieren eines Download Produkts aus git benötigt werden. Der folgende Screenshot zeigt die Eingabemaske des Admin Reiters zum erstellen eines git Deployment Profils für Oxid Artikel.


OXID / GIT Download Artikel Deployment



Ich habe die Profilerstellung bewusst pro Artikel gewählt um auch externe git Server mit unterschiedlichen Benutzern ansprechen zu können. Im Prinzip könnte jedes Repository auf Github als Downloadprodukt in den Oxidshop geladen werden. Das Deployment Profil ermöglicht auch die Aktivierung des zuvor angesprochenen Ioncube Encoders. Diese ignorieren wir jedoch vorerst. Haben wir ein Deployment Profil für den Artikel angelegt können wir mit einem Klick auf Repo Daten holen unseren Deployment Vorgang anstoßen. Was genau dieser Button bewirkt verdeutlicht die folgende Aufstellung:



  • Der im Deployment Profil angepeilte git tag/branch wird in ein Temp-Verzeichnis geklont
  • Oxid säubert das geklonte Verzeichnis von git eigenen Verzeichnissen
  • Das Temporäre Verzeichnis wird auf Wunsch mit Ioncube verschlüsselt
  • Das Temporäre Verzeichnis erhält auf Wunsch die oxarticle__oxfile
  • Das Verzeichnis wird als ZIP Archiv in den Ordner /out/downloads/uploads verschoben
  • Die Zip Datei wird als neue Download-Produkt Datei für den Artikel verarbeitet und als Download-Produkt Hash gespeichert.
  • Die Zip Datei im Ordner out/downloads/uploads wird vom Modul entfernt

OXID / GIT Deployment Artikel aktuell halten

Das Download-Produkt ist sofort nach Prozessende im Shop verfügbar und an den Artikel angehangen, genau wie wenn die Zip Datei manuell hochgeladen worden wäre. Das schöne an dieser Lösung ist, dass sobald eine neue Produkt Release in git getagt wurde, muss man nur im bereits vorliegenden Deployment Profil in Oxid den Tagname anpassen und kann sich den aktuellen git tag als Download-Produkt deployen.

Was passiert beim Klick auf: “Repo Daten abholen”

Der Deployment Prozess führt ein einfaches „git clone -b “ in ein in den globalen Modulsettings angegebenes temporäres Verzeichnis durch. Das Verzeichnis wird anschließend anhand der Deployment regeln gesäubert und mit den zusätzlichen Daten bestückt. Sind alle Daten vom Deployment Profil zusammengetragen wird geprüft, ob verschlüsselt oder open source an das Artikelobjekt übergeben werden soll. Nach der Übergabe an den Oxid Artikel werden die Temporären Verzeichnisse und Daten entfernt um Speicherplatz zu sparen. Der folgende Screenshot gibt Ihnen einen Überblick über die Moduleinstellungen in Oxid.


Oxid Moduleinstellungen GIT Download-Produkte

Sollte euch dieser Artikel gefallen haben oder Ihr Anregungen, Fragen oder Codebesipiele sehen wollt, dann meldet euch über die Kommentare und vergesst nicht zu teilen. Bis dann!

1 Antwort