Entwicklungsumgebung Lando und Contao (Teil 1)

Was ist Lando?

Hat das etwas mit Lando Calrissian von StarWars zu tun? Nein!
Lando ist eine lokale Entwicklungsumgebung auf Basis von Docker mit „einfacher“ Konfiguration via YAML.

Vorteile

  • Simulation des Live-Servers mit allen Gegebenheiten z.B. pdflib, elasticsearch etc.
  • Standardisierung für Teams unter OSX, Windows, Linux
  • Erweiterung mit eigenen Kommandos (tooling)
  • Eine Umgebung für alle Projekte

Warum nicht mit Docker compose?

  • Abstraktionsebne über docker-compose.yml mit vereinfachter Konfiguration
  • Tooling erleichtert Verbindung zum Docker-Container
    z.B. lando composer install statt docker exec -it "container-id" php /usr/local/bin/composer install
  • Im Hintergrund erfolgt Generierung von docker-compose.yml mit URLs, Proxy, Netzwerk etc.

Wo kann ich Lando herunterladen?

Wie kann ich Lando installieren?

Es gibt für Windows, Mac und Linux entsprechende Pakete zum Download.
Unter Windows einfach die aktuelle "lando-v3.0.0-rc.XX.exe" Datei herunterladen und ausführen - ggf. währenddessen die aktuellste Docker-Version installieren.

Falls die Docker-Aktualisierung fehl schlägt die neueste Docker-Version direkt installieren:
 
Wir arbeiten seit einigen Monaten mit Lando als tägliche Entwicklungsumgebung und sind damit wesentlich zufriedener als mit unserer vorherigen Lösung mit virtueller Maschine. Ihr müsst also keine Angst davor haben, dass der Release Candidate nicht zuverlässig läuft. Ein paar Besonderheiten sind unter Windows mit Contao aber dennoch zu beachten, die ich in Teil 2 näher erläutern werde - Stichwort: Performance & Symlinks!

Erste Schritte mit Lando

In Lando gibt es einige vorgegebene Rezepte, wie z.B. drupal, joomla, lamp, laravel, lemp, wordpress etc. Vielleicht wird auch irgendwann mal ein Rezept für Contao veröffentlicht. Bisher kommen wir aber auch gut mit dem Rezept "lamp" zurecht.

Um einen "lamp-Server" zu starten, kann man nach der Installation von Lando einfach lando init in einem beliebigen Verzeichnis rufen und dann lamp als Rezept auswählen. Das wird zu folgender .lando.yml führen, die man mittels lando start in Betrieb nehmen kann.

name: test
recipe: lamp
config:
  webroot: .

Anschließend wird man seine erste Lando-Konfiguration über https://test.lndo.site aufrufen können. Wenn der Test erfolgreich war, können die Docker-Container mit lando destroy -y direkt wieder zerstört werden.

Wie bekomme ich den Contao-Manager zum Laufen?

Wenn man den Contao-Manager ohne bestehende Installation zum Laufen bekommen möchte, dann erstellt man am besten in einem leeren Verzeichnis folgende .lando.yml.

name: contao-manager
recipe: lamp
services:
    appserver:
        webroot: contao/web
        config:
            php: php.ini
        #build:
        #    - ./contao-manager-init.sh /app/contao/web

Da Lando in einem Subprozess das Memory Limit nicht richtig setzt, sollte man diese Einstellung über die folgende php.ini auf einen festen Wert setzen (siehe (lando#1630). Die Zeitzone kann man dann direkt auch auf Deutschland stellen ;-)

memory_limit = 512M
date.timezone = "Europe/Berlin"

Wenn man den Contao-Manager beim Start von Lando automatisch initialisieren möchte, dann kann man noch folgendes Script in den Ordner legen und die beiden letzten Zeilen in der .lando.yml auskommentieren. Alternativ muss man das Unterverzeichnis contao/web manuell erstellen und den heruntergeladenen Manager dort als contao-manager.phar.php ablegen. Wenn das Unterverzeichnis beim Start von Lando noch nicht vorhanden ist, kann es zu Fehlern kommen!

#!/bin/sh

downloadFileName="contao-manager.phar"
downloadUrl="https://download.contao.org/contao-manager/stable/${downloadFileName}"

installFileName="${downloadFileName}.php"
installPath="/app/web"
if [ "$1" ]; then
    installPath=$1
fi
installFilePath="${installPath}/${installFileName}"

if [ ! -d $installPath ]; then 
     mkdir -p $installPath
fi

if [ ! -f $installFilePath ]; then 
    curl $downloadUrl -LO 
    mv $downloadFileName $installFilePath
fi

Achtung:
Bei einer neuen Contao-Installation muss man ein leeres Unterverzeichnis wählen, da der Manager sonst aufgrund der Konfigurationsdateien für Lando meckern wird! Nach der erfolgreichen Contao-Initialisierung über den Manager kann man das Unterverzeichnis contao/ in das Projekt-Verzeichnis verschieben und aus der lando.yml entfernen. Allerdings ist dann auch ein lando rebuild -y notwendig!

Tipp:
Wir legen alle Konfigurationsdateien für Lando  in ein Unterverzeichnis .lando, so wissen wir bei jedem Projekt direkt, was im Repository für lando notwendig ist. Hierbei muss dann auch die .lando.yml angepasst werden, z.B. php: .lando/php/php.ini

Wenn ihr alles richtig angelegt hab, dann sollte der Contao-Manager nach lando start unter https://contao-manager.lndo.site/contao-manager.phar.php erreichbar sein.
Die Serverkonfiguration stellt ihr auf "Andere ...", wobei der Pfad dann automatisch auf /usr/local/bin/php gesetzt werden sollte.
Nach der Contao-Installation verwendet ihr folgende Zugangsdaten zur Datenbank:

host: database
username: lamp
password: lamp
database: lamp

siehe auch: https://docs.devwithlando.io/tutorials/lamp.html#connecting-to-your-database

Gibt es Fallstricke?

Ja, es gibt einige kleine Probleme mit Lando, die gelegentlich die Arbeit blockieren:

  • Bei Änderung des Windows-Passworts „Shared Drives“ unter Docker Settings zurücksetzen
  • $HOME auf C:/Users/… definieren (abhängig von Gruppenrichtlinien)
  • Ggf. Probleme bei Updates von Docker-Images
  • Viren- bzw. Malwarescanner können Lando blockieren

Wenn sich Lando merkwürdig verhält, hilft auch manchmal ein Rechner- oder Docker-Neustart ;-)

Weitere Optimierungen für Contao notwendig?

Mit diesem Blog-Eintrag wollte ich euch nur einen kleinen Einblick in die Welt von Lando geben. Allerdings haben wir ziemlich schnell festgestellt, dass v.a. unter Windows für Contao noch einige Optimierungen der Lando-Konfiguration notwendig sind, die ich euch demnächst in einem Teil 2 präsentieren werde!

Bei Fragen oder Anregungen nehmt einfach mit mir Kontakt auf.