A techie blog

Docker, IT, Java, Liferay

Eine lokale Liferay Instanz mittels Docker innerhalb 5 Minuten aufsetzen – Teil 2

Nachdem wir im ersten Teil gesehen haben, wie rasch man zu einer laufenden Liferay Instanz kommt, möchte ich hier näher die weiterführenden Möglichkeiten des Liferay Containers aufzeigen.

Falls Sie den ersten Teil dieses Artikels noch nicht gelesen haben, empfehle ich damit zu starten: Eine lokale Liferay Instanz mittels Docker innerhalb weniger Minuten aufsetzen

Inhalt

  1. Vorbedingungen
  2. Demo #2 – Konfiguration durch Environment Variablen
  3. Demo #3 – Erweiterungsmöglichkeiten durch Volume Mounts
  4. Fazit
  5. Quellen

Vorbedingungen

  • Docker inkl. Docker-Compose ist installiert
  • Verständnis Bedienung der Shell des Betriebssystems
  • Einen funktionierenden Container basierend auf dem offiziellen Liferay Image (siehe auch hier)

Demo #2 – Konfiguration durch Environment Variablen

Angenommen, wir möchten unserem Liferay bestimmte Konfigurationen (Stichwort: portal-ext.properties) mitgeben, können wir das direkt im Docker-Compose file machen:

version: '3'
services:
liferay:
image: liferay/portal:7.1.3-ga4
ports:
- "8080:8080"
- "11311:11311"
environment:
LIFERAY_LOCALES_PERIOD_ENABLED: de_DE,en_US,hu_HU

Startet man nun den Container und sieht sich die Sprachauswahl an (Kontrollbereich -> Konfiguration -> Instanzeinstellungen -> Diverses), sieht man, dass tatsächlich exakt die im Docker-Compose file definierten Sprachen ausgewählt sind.

Screenshot von aktuell eingestellten Sprachen
aktuell eingestellte Sprachen

Die Namen der Properties findet man übrigens sehr einfach durch die Doku oder direkt in der portal.properties von Liferay. (lokal oder online)

Hinweis: Die Datei ist übrigens auch auf der Docker Hub Seite des Liferay Containers verlinkt.

Demo #3 – Erweiterungsmöglichkeiten durch Volume Mounts

Der Liferay Container kann aber noch viel mehr. Setzt man ein Host Volume Mount auf /etc/liferay/mount, kann man:

  • beim Start Dateien ins Liferay Verzeichnis kopieren lassen (zB: um bestimmte Dateien / Scripte zu ersetzen, oder Konfigurationen abzulegen)
  • Scripte beim Start ausführen zu lassen (zB: um Ressourcen aus dem Netz herunter zu laden, Installationen, etc. durchzuführen)
  • jederzeit (War) Deployments aus dem Hostsystem starten

Hierzu erweitert man sein Docker-Compose File um folgenden volumes: Eintrag:

version: '3'
services:
liferay:
image: liferay/portal:7.1.3-ga4
ports:
- "8080:8080"
- "11311:11311"
volumes:
- ./conf/liferay:/etc/liferay/mount

Legt man nun im Unterverzeichnis conf/liferay/scripts/ die Datei portal-ext.properties mit folgendem Inhalt an, erzielt man im die gleiche Wirkung wie in Demo #2.

Für den zweiten Versuch erstellen wir in conf/liferay/scripts/ die Datei startup.sh mit folgendem Inhalt an:

!/bin/sh
echo ""
echo "*********************************************"
echo " Your special startup script has been called"
echo "*********************************************"
echo ""

Nun sehen wir beim Start von Liferay die Ausgabe des Scripts in den Log Files.

Für unseren letzten Versuch kopieren wir ein War file (zB: ein freies Theme) nach conf/liferay/deploy/. Sobald der Container “up & running” ist, wird automatisch das Verzeichnis gescannt und ein Deployment gestartet falls sich ein Plugin darin befindet.

Hinweis: War das Deployment erfolgreich, wird die Datei aus dem Verzeichis automatisch entfernt.

Den gesamten Code kann man im Bitbucket Repository finden und dort die einzelnen Demos einkommentieren um nicht alles selbst nachbauen zu müssen.

Fazit

Wir haben uns nun mit der Flexibilität des offiziellen Liferay Containers vertraut gemacht und können somit mittels Skripten sicher stellen, dass alle Vorbedingungen beim Start der Umgebung erfüllt sind.

Eine Einschränkung gibt es jedoch, da der Container – DevSecOps mässig – mit einem eingeschränkten Benutzer arbeitet kann mit apk keine Software installiert werden. Ist dies notwendig, muss man meines Erachtens wie gehabt einen eigenen Container ableiten.

Ein spannender nächste Versuch wäre zB. eine vollständige Dev Umgebung mit allen notwendigen Tools einzurichten, so dass ein Entwickler einfach mittels docker-compose up -d diese starten kann und nur noch eine IDE seiner Wahl installiert.

Quellen

https://bitbucket.org/liferaysamples/liferay-docker-demo/

https://hub.docker.com/r/liferay/portal

http://docs.docker.com/

https://docs.docker.com/compose/

https://www.liferay.com/