Deployment mit TYPO3 Surf

Den ganzen Tag entwickelt man tolle neue Features, die dann auf einem Testsystem abgenommen werden müssen oder das Licht der Welt auf dem Livesystem erblicken dürfen. Früher hat man dafür den FTP-Client angeschmissen, dann wurde es en vogue alles per SSH zu transferieren und irgendwann wurde alles so komplex, dass man noch Tests vorher ausführen oder das Autoloading von Klassen und Schnittstellen automatisieren wollte. Dadurch wurde dieser Prozess so aufgebläht und kompliziert, dass man gezwungen wurde, diesen auch von Software durchführen zu lassen, um ja nichts zu vergessen oder Fehler zu übersehen.
Neben Travis CI und Codeship gibt es noch für PHP Deployer, die einem auf die ein oder andere Art den Deployment-Prozess abnehmen.

Da TYPO3 das Beste System der Welt ist (höhöhö) gibt es hierfür noch aus den Zeiten von TYPO3 Flow das Deployment-Tool TYPO3 Surf, das unter der Obhut von Helmut Hummel (und ganz vielen anderen Entwicklern) gepflegt wird. TYPO3 Surf setzt darauf auf, dass ein Projekt auf Basis von git und composer erstellt wird und man noch die TYPO3 Console verwendet. Recht viele Anforderungen auf den ersten Blick. Aber wer setzt denn noch TYPO3-Installationen ohne composer auf?

Wie man composer und TYPO3 Surf installiert, wird bestens auf deren Seiten beschrieben und dann kann man sich von mir das Repository ziehen, in der alles vorhanden ist, um sich erstmal lokal eine Entwicklungsumgebung mit allen benötigten Dateien für ein Deployment mit TYPO3 Surf aufzubauen.
Das ganze Script ist noch nicht ganz fertig, es basiert leider darauf, dass eine Datenbank auf dem Livesystem mit den benötigten TYPO3-Tabellen existiert. Und die entsprechenden Konfigurationsdateien müssen auch erstmal in das eigene Repository. Von daher muss man leider noch folgende Schritte ausführen, bis man deployen kann:

  1. "composer install" ausführen, um erstmal lokal die TYPO3-Installation anstoßen zu können.
  2. Dann führt man wie gewohnt die TYPO3-Installation aus, damit wir die Datenbank erhalten, die auf das Livesystem importiert wird.
  3. In der Datei web/typo3conf/LocalConfiguration.php werden die entsprechenden Parameter für das Live-System gemacht, für das Entwicklungssystem werden die Parameter in der Datei web/Configuration/Development.php gesetzt. Diese wird verwendet, wenn man den Application-Context von TYPO3 auf Development während der Entwicklung setzt.
  4. Die Datei .surf/typo3-surf-base-installation.php muss auch noch angepasst werden. Hier müssen Hostname, SSH-User, der Pfad zur PHP-Datei, der Deployment-Pfad und das git-Repository gesetzt werden. Letzteres ist das eigene Repository, in der zwar ein Klon meines Repositories sitzt. Aber mit allen jetzt gemachten Änderungen in den Konfigurationsdateien.
  5. Die Änderungen werden in den Master-Branch des Repositories gepushed.
  6. Im Terminal der Wahl wird im Hauptverzeichnis des Repositories der Befehl "surf deploy typo3-surf-base-installation" ausgeführt. Sollte die Datei im Verzeichnis .surf umbenannt worden sein, den Befehl entsprechend anpassen.
  7. Staunen.

Zum Schluss muss nur noch der vHost-Eintrag des Livesystems auf den Ordner "releases/current/web" unterhalb des Deployment-Pfades verweisen und schon hat man sein erstes "deploytes" TYPO3-System. Viel Spaß.

In der kommenden Zeit werde ich mich noch damit auseinandersetzen, wie man die Datenbank auf dem Livesystem per Deployment und TYPO3 Console "frisch" hält und was vor allem bei zukünftigen Deployments zu beachten ist.

Update: Jan Kiesewetter von t3easy hat auf dem letzten TYPO3Camp in Stuttgart einen Talk zu TYPO3 Surf gehalten. Die Slides kann man sich bei ihm anschauen.

Backendmodule von TYPO3 6.2 nach TYPO3 7.6 migrieren

Momentan migriere ich ein paar TYPO3-Installation von Version 6.2 auf die LTS-Version 7.6 als Zwischenschritt um dann auf die neue LTS-Version 8.7 gehen zu können. Dabei sind mir ein paar kleine Backend-Module vor die Füße gefallen, deren Sinn meistens darin besteht, Daten aufzubereiten und anzuzeigen oder eine Import-Schnittstelle für CSV-/XML-Dateien bereitstellen.
Eigentlich würde ich eher dazu tendieren, diesen Update-Schritt dafür zu nutzen, den bestehenden Code zu refakturieren um von piBase/AbstractController-Extensions zu Extbase-basierten Erweiterungen zu kommen. Das ist den meisten Kunden aber schlichtweg zu teuer, von daher bleibt einem manchmal nur übrig, den minimalen Weg zu gehen.

Ich habe diverse Backend-Module mit folgenden Klassen-/Namespace-Ersetzungen wieder zum Laufen bekommen. Diese Erweiterungen sind aber wirklich nur klein und auch nicht mehrsprachig gehalten. In dieser Beziehung konnte ich leider keine Erfahrungen sammeln.

$LANG => $GLOBALS["LANG"]

$BE_USER => $GLOBALS['BE_USER']

t3lib_SCbase => \TYPO3\CMS\Backend\Module\BaseScriptClass

t3lib_BEfunc => \TYPO3\CMS\Backend\Utility\BackendUtility

t3lib_div => \TYPO3\CMS\Core\Utility\GeneralUtility

$page = t3lib_div::makeInstance('t3lib_pageSelect'); => $page = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Frontend\Page\PageRepository');

$template = t3lib_div::makeInstance('t3lib_TStemplate'); => $template = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Core\TypoScript\TemplateService');

$this->doc = t3lib_div::makeInstance('mediumDoc'); => $this->doc = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Backend\\Template\\DocumentTemplate');

$this->doc = t3lib_div::makeInstance('template'); => $this->doc = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Backend\\Template\\DocumentTemplate');

Über den Weg Gelaufenes in KW12

Diese Woche lag im Zeichen des Frühlingsanfangs und irgendwie gab es wenig Artikel, die ich mir überhaupt zum Lesen markiert habe. Lag vielleicht aber auch daran, dass ich wenig dazu kam, meine RSS-Feeds zu scannen.

  • Wunschliste für die Integration von composer in TYPO3 Alexander Schnitzler hat auf Github einige Zeilen geschrieben, wie er sich selber die Integration von composer für TYPO3 vorstellt. Die Kommentare sind lesenswert, weil sie noch mehr Punkte aufgreifen.
  • Karabiner-Elements Tool, mit dem ich die Media-Tasten von macOS auf meine Pok3r-Tastatur legen konnte. Endlich.
  • Interview mit Donald Trump mit dem Time-Magazin Auf der einen Seite total faszinierend, wie so jemand Präsident eines riesengroßen und vor allem bunten Staat werden kann. Auf der anderen Seite beängstigend.
  • OpenEmu - Emulator für diverse Systeme Auf der Suche nach einem SNES-Emulator für den Raspberry Pi drauf gestoßen, ausprobiert und für gut befunden. Alte Spiele auf macOS mit dem PlayStation-Controller spielen. Wunderbar.
  • RetroPie - Emulator für den Raspberry Pi Ich habe es noch nicht ausprobiert, aber das scheint genau das zu sein, was ich für den Mini-Rechner benötige. Wenn das wirklich mit einem PlayStation-Controller zu koppeln ist, wird mein Sohnemann das hoffentlich wie ich hervorragend finden.
  • Der letzte Brand Faszinierendes Interview eines Workaholic und in Perfektion versessenen Mannes, der nicht zum ersten Mal alles hinschmeisst, weil es nur noch betriebswirtschaftliche Maximierung für seine Tätigkeit gibt. Nicht nur, dass ich Monkey 47 immer noch allen anderen Gins bevorzuge, weil er für mich die schönste, fruchtig-würzige Geschmacksnote hat, ich würde gerne mal so einen Williams aus seiner Brennerei probieren. Leider unbezahlbar.

Über den Weg Gelaufenes in KW11

Irgendwie habe ich es vergessen für die zehnte Woche meinen Reader zu entrümpeln. Auf der anderen Seite komme ich momentan gerade sowieso kaum dazu, Artikel mehr als die Phase des Scannens zu gönnen. Was sie echt nicht verdient haben. Die meisten jedenfalls.

  • KoN (King of Nothing) ist ein Rogue-like der in sieben Tagen aus der Feder von TINYTOUCHTALES und Max Fiedler. Die Macher des hervorragenden Smartphone-Kartenspiels haben dann auch nur fünf Tage für die Umsetzung eines Threes-Rogue-Likes benötigt. Scotty wäre stolz.
  • Thimbleweed Park wird endlich veröffentlicht Ich habe ja seit der ersten Ankündigung es so gut wie vermieden, Screenshots, Videos oder Artikel über das neue Machwerk von Ron Gilbert (unter anderem) anzuschauen und zu lesen. Auch wenn es nicht der große Wurf wird, möchte ich das Spiel ohne irgendwelche Beeinflussung genießen. Der Anspruch an ein neues Grafik-Adventure besonder in dem Stil ist einfach nicht zu erfüllen, das ist mir jetzt schon klar. Aber vielleicht werde ich ja eines Besseren belehrt. Hoffentlich.
  • Is design dead? Zu meiner Schande muss ich gestehen, dass ich diesen langen Artikel noch gar nicht gelesen habe, aber wenn es dort wirklich um die Praktiken des Extreme programming (XP) und Software-Design geht, habe ich das auf jeden Fall vor.
  • CSS Grid Layouts werden der neue Scheiss Die Unterstützung von Flexbox ist mittlerweile so stark, dass man es ohne Nachdenken verwenden kann und auch "Frameworks" wie Bootstrap verwenden diese Methode in Version 4. Der "Nachfolger" steht nun schon in den Startlöchern und erlaubt unter anderem zweidimensionale Grids anzulegen, die man so auch nicht mit Flexbox hinbekommt. Jedenfalls nicht mit purem CSS. Hier und hier gibt es noch ein paar Infos.
  • Die MiniDisc Ich wollte damals immer einen MiniDisc-Player haben, aber die waren für einen Schüler einfach viel zu teuer.

Der erste Kinder-Rechner

Ich weiß noch, wie ich meinen ersten Computer zum elften (zehnten?) Geburtstag bekommen habe: im örtlichen Metro habe ich meinen Vater angebettelt doch den Amiga 500 zu kaufen und nicht den kleinen Bruder. Und das, obwohl meine Eltern überhaupt gar nicht den Sinn gesehen haben, mir so ein neumodisches Ding in mein Kinderzimmer zu stellen. Zwar hatte mein Vater damals im Büro auch schon zwei Rechner (8088er und ich glaube schon einen 286er), die aber für Textverarbeitung und Steuerdinge benutzt wurden. Wenn sie nicht von uns Kindern zum Flippern oder Frogger-Spielen zweckentfremdet wurden.
Von meinen Freunden hatten fast alle aber einen Commodore C64, was dann den Ausschlag gegeben hat, dass ich auch solch einen bekommen habe. So von wegen Software-Vielfalt und so. Knick-knack, sie verstehen schon.

Nun ist es soweit, dass ich meinem großen Sohn auch einen Rechner in sein Zimmer stellen werde. Er ist zwar schon firm in der Bedienung eines iMacs und auch iPad und iPhone stellen ihn vor keine große Hürde (außer, dass sein iPhone nur für Fahrradtouren mit seinen Kumpels oder ähnliches verwendet werden darf), aber diese Geräte stehen halt nicht direkt in seinem Zimmer.
Da ich noch keine großen Ausgaben haben wollte und alle alten Rechner defekt oder ausgeschlachtet sind, musste Ersatz in Form eines Raspberry Pi her. Viel Rechenpower hat er ja nicht, aber zum Zocken stehen dem Herrn ja auch diverse Konsolen zur Verfügung, auf denen auch schon seine eigenen Nutzerprofile laufen. In erster Linie soll er den Rechner zur Recherche für die Schule, YouTube und seine eigene Musik verwenden. Und vielleicht bekomme ich ihn ja sogar dahin, ein wenig in die Programmierung zu schnuppern. Video- und Audiobearbeitung wird auf dem schmalbrüstigen Prozessor nicht möglich sein, daran hat er die letzten Monate auch in der Schule gefallen dran gefunden, aber da bin ich noch auf Recherche.

Ich habe ihm jetzt erstmal ein aktuelles Raspbian installiert und neben dem schon installierten LibreOffice habe ich LXMusic als MP3-Player auf den kleinen Rechner geworfen. Zum Drucken kann er dank CUPS und hplip auf den im Haushalt befindlichen HP Deskjet-Drucker per Airprint drucken.
Da er ihn zu Ostern bekommen soll möchte ich bis dahin es auch noch schaffen zum Beispiel einen SNES-Emulator inklusive PS3-Controller-Verbindung zum Laufen zu bekommen, damit er neben Minecraft (es gibt eine spezielle Version für den Pi) auch noch ein wenig Mario World oder ähnliches spielen kann.

Warhammer 40000 Light

Zum letzten Weihnachten habe ich mir selber einen schönen Ausflug in die eigene Kindheit geschenkt. Seitdem haben meine Kinder und ich schon einige Ausflüge in die Katakomben voller Orks und Chaos-Krieger und Zaubererverließe unternommen und meine Hoffnung wächst, dass sie in einigen Jahren mit ihren Freunden sogar vielleicht Pen&Paper-Rollenspiele spielen werden.

Damals gab es aber nicht nur HeroQuest, das eine abgespeckte Variante eines TabelTops war, sondern kurze Zeit später auch die kindgerechte Version von Warhammer 40000: StarQuest.
Und wie auch bei HeroQuest stolperte ich eines Abends vom Heuschnupfen mit Fieber niedergestreckt über eine Sofort-Kaufen-Aktion bei eBay, die zu einem akzeptablen Preis eine Version von StarQuest anbot, die sehr neuwertig aussah. Denn auch wie HeroQuest wurde StarQuest nur sehr kurz hergestellt und das auch schon vor 25 Jahren.

Die Regeln sind ein wenig umfangreicher als bei der Fantasy-Version, auch bekommen die Mitspieler nicht nur einen Charakter, sondern gleich eine ganze Einheit von fünf Space Marines im Kampf gegen den Spielleiter zur Verfügung. Aber nach kurzem Blättern im Regelwerk und einer kleinen improvisierten Testrunde starteten meine Jungs begeistert auf der Suche nach dem ersten Dreadnought durch.