Deployment mit TYPO3 Surf

Vorsicht Bücher! Nicht werfen!

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

Baustelle

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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$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

Grillen

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

Antiallergika

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

Raspberry Pi

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

StarQuest

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.

StarQuest

Über den Weg Gelaufenes in KW9

Frühling

Der Frühling ist da. Sagt mein Körper. Und geht mir seit Tagen auf die Nerven, indem er mich total lahmlegt. Grippegefühl, Fieber, Muskelschmerzen und die Lunge tut weh. Allergiker kennen sowas. Nicht-Allergiker schauen einen immer unverstanden an. So von wegen „ist doch nur Frühling?“. Egal, mal wieder zu nichts gekommen, noch nicht mal zum Zocken. Mit Kopfschmerzen und einer Reaktionszeit eines schmelzenden Gletschers kommt man Computerspielen nicht weit.

  • Kleiner Rand über Docker
    Die technischen Probleme kann ich so zwar nicht nachvollziehen, die Hürde Docker in einem relativ kleinen Entwicklungsteam, das überwiegend Websites oder Teile von Websites entwickelt, ist aber viel höher als der Nutzen.
  • Passwort-Apps auf Android und ihre Lücken
    Ein Team des Fraunhofer Instituts für Sichere Informationstechnologie hat mal die gängigen Passwort-Manager-Apps auf Android-Basis auseinandergenommen. Jetzt hätte ich gerne mal so ein Dossier für iOS-Apps. Danke.
  • Schöne Anleitung zum Deployen per FTP und Bitbucket Pipelines
    Boah, FTP, da bekomme ich immer noch Gänsehaut, warum das im 21. Jahrhundert scheinbar immer noch die gängige Methode ist, um sich mit Webspace zu verbinden. Schlimm das. Die YAML-Konfiguration kann man sich aber auch einfach auf SSH zurechtbiegen.
  • git flow als einfaches Branching-Model
    Kleine Teams brauchen geringen Overhead beim Entwickeln. Wenn man dann eigentlich noch einen Manager fürs Versionieren und Deployen brauchen würde, was zwar eigentlich sinnvoll wäre, würde das Budget kleinerer Projekte nicht mehr reichen.
  • Ein weiteres einfaches Branching-Model für git
    Ich habe es mir noch nicht durchgelesen, aber beim Überfliegen habe ich es so verstanden, dass immer im Master entwickelt wird. Das ist für mich keine Option, weil mein Deployment auf gewisse Branches aufsetzt. Wenn in diese gepushed wird, wird das entsprechende Deployment ausgelöst und der Master-Branch ist halt gleichzusetzen mit dem Stand im Livesystem.
  • Kleines und feines Best Practices in Extbase
    Oliver Klee hat sich die Mühe gemacht und eine Menge Tips und Tricks zum Entwickeln in Extbase zusammengestellt. Kann man einiges lernen und sich für seine eigene Entwicklung abschauen.

Über den Weg Gelaufenes in KW8

Straßenpflaster

Die letzte Woche war geprägt von Arbeit, selbst gemachtem Freizeitstress und irgendwie viel zu wenig Zeit zum Internet durchforsten oder Podcast hören. Von daher fällt die Liste recht unspektakulär und kurz aus.

  • GitKraken
    Ausprobiert und für gut befunden, auch wenn ich eigentlich keinen Standalone-Git-Client brauche, da mir der eingebaute Client in PhpStorm reicht. Ich werde dem Kraken aber die nächste Woche mal an seiner Stelle verwenden, vielleicht hat er ja das ein oder andere Feature, was mir mehr zusagt.
  • Anleitung zur Integration des CKEditors in TYPO3
    Ich habe leider noch überhaupt keine Zeit gehabt, mir den neuen WYSIWYG-Editor von TYPO3 anzuschauen, obwohl ich den alten RTEHtmlArea mit aller Inbrunst hasse. Auch mal für nächste Woche vornehmen.
  • Cloudbleed
    Das schlug ja ein wie eine Bombe letzte Woche, auch wenn der nächste Punkt in der Liste viel schlimmer ist. Trotzdem hatte Cloudflare monatelang einen Fehler in seinem SSL-Proxy, der nicht nur den angeforderten SSL-Traffic zum Client auslieferte, sondern auch Teile des SSL-Verkehrs anderer User. Wenn da jemand sich die Mühe gemacht hat über diesen Zeitraum brav mitzusniffen, dürfte jemand jetzt über eine Menge Rohdaten mit Passwörtern und Kreditkarten-Informationen verfügen.
  • Zwei gleiche Hashes darf es nicht geben
    Ich habe es jetzt nicht überprüft, aber in der dunklen Erinnerung haben früher ziemlich viele Systeme ihre Hash-Verfahren auf SHA1 basieren lassen. Seit Jahren ist dies aber auf dem absteigenden Ast und wird durch andere Verfahren wie RSA ersetzt. Zum Glück.
  • Ist Zelda 1 das bessere Zelda?
    Ein Video, in dem erörtert wird, dass das erste Zelda das bessere Zelda ist. Weil es in erster Linie den Spieler nicht an die Hand nimmt, wie es fast jedes aktuelle Spiel macht. Ich sollte mir vielleicht doch einen NES Mini besorgen, um zu testen, ob das stimmt. Oder mal schauen, ob es das noch für den 3DS gibt. The Legend of Zelda habe ich zu meiner Schande noch nie gespielt.

Wir sind doch alle nur Außerirdische, oder?


Highly Suspect sind mir letztes Jahr im Sommer das erste Mal über den Weg gelaufen. Und genau wie bei Boy Sets Fire habe ich mich gefragt: „Warum eigentlich erst jetzt?“
Das trio produziert fantastisch minimalen Rock und einer meiner Wünsche ist es, dass sie eine Europa-Tour mit wenigstens einem Stop in Deutschland machen. Ich stehe ganz vorne im Moshpit.

Über den Weg Gelaufenes in KW7

Tweety ist tot

An dieser Stelle fange ich mal an, meine Pocket-Liste zu entschlacken, in dem ich erwähnenswerte Sites in solchen Artikeln wochenweise zusammenfasse. Vielleicht gibt es ja den ein oder anderen, der auch gefallen an manchen Artikeln findet. Mich selber soll es dazu bringen, Dinge, die ich mir für später merken möchte, auch wirklich abzuarbeiten. Und sei es nur, sie einfach ungelesen zu löschen.
Den Anfang machen folgende Artikel:

Wir installieren uns ein MAMP-System

Switch to PHP

Jahrelang war ich stinkend faul und habe als Basis zum Entwickeln MAMP Pro benutzt. Weil ich keine großartige Lust hatte, mich mit dem Installieren und Pflegen von Apache, MySQL und PHP herumzuschlagen. Aber auch habe ich jahrelang geflucht, wenn ein Update der Software irgendetwas kaputt gemacht hat, die Dienste nicht mehr richtig liefen oder Konfigurationsdateien zerstört wurden und man den lauffähigen Zustand aus einem Backup wiederherstellen musste. Auch wenn diese Vorkommnisse in letzter Zeit weniger geworden sind.

Im Zuge meiner aluhutbedingten Einschränkungen meines Benutzerkontos auf einen Standardbenutzer unter macOS verweigerte MAMP Pro aber seinen Dienst, was seinen Ursprung wahrscheinlich darin hat, dass es Zugriff unter anderem auf die hosts-Datei haben möchte. Ich habe kurz geschaut, ob ich mich mit Vagrant oder Docker anfreunden könnte und ob die Entwicklung in virtuellen Maschinen in den Arbeitsablauf zur Agentur, in der ich arbeite, passt. Kurze Antwort: nein. Aus diversen Gründen verlagert man einfach nur das Problem der Versionierung und der Pflege des Systems in eine VM und erleichtert beziehungsweise verbessert man das Entwickeln dadurch nicht. VMs haben schon ihre Daseinsberechtigung wenn es darum geht so einen Container einfach in die Cloud zu packen und wenn dort Systeme laufen, die dadurch einfacher skaliert werden können.

Es sollte daher ein „natives“ Apache/MySQL/PHP-System auf macOS-Basis werden. Mit verschiedenen PHPs zum einfachen Wechseln, PHP-Cache und Xdebug. Letzteres bin ich noch schuldig, wie man den Rest recht einfach installiert bekommt, habe ich mal im Folgenden aufgeschrieben. Einfach die folgende Anleitung von oben nach unten abarbeiten und als Erfolg sollte man ein funktionierendes und stabiles System vorfinden. Dafür lege ich meine Hand aber nicht ins Feuer, kann nur sagen, dass es so bei mir geklappt hat.→ weiterlesen