Warum ich meine Cloud Server zu gridscale umgezogen habe

Seit fast einem Jahrzehnt entwickele ich im Kundenauftrag Software. Meistens handelt es sich um Web-Anwendungen, heute hauptsächlich Online Shops mit Magento.

Lagen meine Online-Entwicklungsumgebungen früher auf dedizierten Rootservern, habe ich vor einigen Jahren zu AWS gewechselt. Wenig verwunderlich war die Flexibilität höher, als die der dedizierten Server von Anbietern wie z.B. hetzner oder server4you.

Continue reading “Warum ich meine Cloud Server zu gridscale umgezogen habe”

Magento-Entwicklung mit Vagrant – Teil 4: Puppet – Provisioning für Fortgeschrittene

Wie in den vorigen Teilen der Serie angedeutet, ist der nächste Schritt, ein Provisionierungs-Tool zu nutzen, also ein Tool zur Automatisierung von Infrastruktur, mit dem z.B. Entwicklungs-, Test- und Produktiv-Umgebungen synchron konfiguriert werden können. Dieses ersetzt weitestgehend die Shell-Skripte zur Einrichtung der VM durch eine deklarative Sprache zur Definition des gewünschten Zustands der Systeme. Dieser Unterschied ist entscheidend: wir definieren nicht länger eine Abfolge von Befehlen (also, WIE der Zustand erreicht werden soll), sondern den Zustand selbst, und Puppet kümmert sich um die jeweils notwendige Ausführung.

Populäre Alternativen zu Puppet sind Chef und Ansible (beide in Python geschrieben). Ich habe mich für Puppet entschieden, aus folgenden Gründen:

  1. es läuft auf Ruby, genau wie Vagrant, also eine zusätzliche Technologie weniger
  2. es ist für alle gängigen Plattformen verfügbar, läuft also auch unter Windows
  3. das GUI Tool PuPHPet ermöglicht das Konfigurieren von Vagrant Boxen für PHP Anwendungen (und mittlerweile auch Ruby, Python, NodeJS) in kürzester Zeit und ohne die Syntax der Puppet DSL kennen zu müssen.

Use PuPHPet for Magento

Weiterlesen auf integer-net.de

Warum ich aktiv PHP 5.3 Kompatibilität aufgeben werde

PHP Supported Versions

Das geht ganz einfach und elegant, da in PHP 5.4 die short array syntax eingeführt wurde:

$everySingleArrayInitializationFromNowOn = [];

Warum dieser Schritt? Eine alarmierend große Zahl an Websites läuft noch auf PHP 5.3, das seit dem 14.8.2014 nach einem Jahr “security only” Support nicht mehr aktualisiert wird. Das heißt im Klartext, die nächste kritische Sicherheitslücke wird nur noch für Versionen ab 5.4 gefixt. Die aktive Weiterentwicklung am PHP 5.4 Branch ist übrigens auch am 14.9.2014 eingestellt worden, auch hier sind wir bereits in der “security only” Phase. Am 28.8.2014 ist PHP 5.6 released worden, am 20.6.2013 also vor fast 1,5 Jahren PHP 5.5

Im Jahre 2014 sollten wir also alle längst auf PHP 5.5 arbeiten. Soweit die Theorie. In der Praxis sieht es leider so aus:
PHP versions statistics - October 2014 - Pascal MARTIN
Quelle: http://blog.pascal-martin.fr/post/php-versions-stats-2014-10-en

Fast die Hälfte der Alexa Top 1M Sites, die auf PHP laufen, geben noch die Version 5.3 an, knapp ein viertel sogar noch 5.2, das seit Januar 2011 nicht mehr supported wird. PHP 5.2.17 ist sogar die am meisten in der Statistik auftauchende Patch-Version.

Gründe gibt es vermutlich viele:

  • “never touch a running system” Mentalität
  • Gar nicht oder nicht ausreichend gewartete Server
  • Inkompatible Frameworks und Legacy Anwendungen

Auf einige Hintergründe will ich kurz eingehen.

Continue reading “Warum ich aktiv PHP 5.3 Kompatibilität aufgeben werde”

Magento-Entwicklung mit Vagrant – Teil 3: Projektstrukturen für Magento

Im ersten Teil der Artikelserie zu Magento mit Vagrant habe ich Vagrant und die automatische Synchronisation mit Rsync vorgestellt, im zweiten Teil ein einfaches Basis-Setup der Vagrantbox für Magento. In diesem Teil soll es nun um die Projektstrukturierung gehen.

Mögliche Strukturen, aufbauend auf dem Basis-Vagrant-Setup:

Eigener Code separiert von Core und Extensions in src/

Das meiner Meinung nach ideale Setup habe ich im letzten Beitrag bereits beschrieben:

Die hier vorgestellte Struktur empfehle ich für neu entwickelte Shops. Mögliche Alternativen werden in einem separaten Beitrag erläutert. Der Quellcode verteilt sich auf folgende Verzeichnisse:

Verzeichnis Inhalt
/.modman Magento-Extensions
/src Projektspezifischer Code (inkl. gekaufter Extensions)
/vendor Nicht-Magento-spezifische Bibliotheken
/www Magento-Core

Durch Modman werden auf der Vagrantbox zusätzlich Symlinks in .modman (nach src) und www (nach .modman) erstellt.

In /www/ gibt es also keinerlei custom code, alles kommt mit Composer und Modman entweder aus /vendor bzw. /.modman (für fremden Code und eigene, projektübergreifende Module) oder aus /src (für eigenen, shop-spezifischen Code).

Weiterlesen auf integer-net.de

Magento-Entwicklung mit Vagrant – Teil 2: Beispiel-Setup mit Shell-Skripten

Vagrant + Magento

Im ersten Teil der Artikelserie zu Magento mit Vagrant habe ich Vagrant und die automatische Synchronisation mit Rsync vorgestellt. Nun kommen wir zu einem konkreten Setup der Vagrantbox für Magento.

Für das Provisionieren (also automatisches aufsetzen) der Box nutzen wir Shell-Skripte. Für Fortgeschrittene komme ich im letzten Teil der Serie zu einem anspruchsvolleres Setup mit Puppet und werde auch eine einsatzfertige Magento-Box veröffentlichen.

Zum Einstieg in Vagrant empfehle ich allerdings die hier vorgestellte Variante zu übernehmen und ein wenig mit der Konfiguration zu experimentieren. Sie steht vollständig auf Github zur Verfügung. Auch wenn das GUI Tool PuPHPet die Puppet-Konfiguration kinderleicht macht und man die Puppet DSL (Domain specific language) so nicht kennen muss, holt man sich zusätzliche Komplexität ins Haus, was im Fehlerfall einige Stunden und Frustration kosten kann.

Weiterlesen auf integer-net.de

Magento-Entwicklung mit Vagrant – Teil 1: Vagrant-Einführung

Vagrant + Magento

Vagrant ist ein Tool, das portable virtuelle Entwicklungsumgebungen ermöglicht. Wenn an verschiedenen Rechnern und/oder von verschiedenen Team-Mitgliedern an einem Projekt gearbeitet wird, ist somit eine einheitliche Umgebung sichergestellt. Die Einrichtung muss nur ein einziges Mal erfolgen und kann beliebig oft reproduziert werden.

Aber es ist auch für einzelne Entwickler interessant, die an unterschiedlichen Projekten arbeiten. Häufig sind z.B. auf den Produktivsystemen unterschiedliche PHP-Versionen installiert, es werden bestimmte Extensions benötigt oder unterschiedliche Systemkonfigurationen. Gerade bei der Entwicklung mit PHP, dessen Verhalten an vielen Stellen von globaler Konfiguration abhängt, gibt es so oft Fehler aufgrund unterschiedlicher Systeme.

Mit Vagrant lässt sich die gesamte Umgebung für jedes Projekt einzeln definieren und auch versionieren (Konfigurationsdateien im Git-Repository). Auch wird das eigene System weniger „vollgemüllt“, mit Software die man für irgendein Projekt mal benötigt hat. Im Idealfall spiegelt die Umgebung das Produktivsystem 1:1 wieder.

Say goodbye to “works on my machine” bugs. – http://docs.vagrantup.com/v2/why-vagrant/

Diese Artikelserie soll insbesondere Magento-Entwickler Schritt für Schritt an Vagrant heranführen, am Ende steht ein Basis-Setup für Magento-Projekte.

Weiterlesen auf integer-net.de

Problem: Doppelte Accents (“^^”) in Windows 7

Gut zu wissen: Wenn Du Windows 7 nutzt und beim Schreiben doppelte Accents bekommst, könntest du ein ernsthaftes Problem haben, da dies ein Nebeneffekt von aktivierten Keyloggern ist. Es ist zwar nett, dass die nicht vollkommen unentdeckt bleiben können, aber auch ärgerlich wenn ein installiertes Programm tatsächlich gewollt die Tastaturaktionen loggt.

In meinem Fall hat der Text Expander FastFox als gewollter Keylogger fungiert, um Shortcuts beim Tippen anzubieten.

http://repos.zend.com/deb/zend.key 404 Not Found

Wenn Du Zend Server CE auf Debian Linux (z.B. Ubuntu Server) mit apt-get installieren willst, und einer der vielen Installationsanleitungen im Netz folgst, könntest Du wie ich auf diesen Fehler stoßen:

http://repos.zend.com/deb/zend.key 404 Not Found

Die Lösung ist einfach: Die URL des Keys hat sich kürzlich geändert! Verwende http://repos.zend.com/zend.key und es läuft.

Natürlich hat es die offizielle Dokumentation richtig drin.