FEDS stehe für FrontEnd Delivery System. Die Aufgabe des FEDS ist es, die publizierten Inhalte, die das CMS auf dem Webserver in Form von Dateien bereit gelegt hat so zu verarbeiten, dass das Frontend die Inhalte wie gewünscht darstellen kann. Weiter liefert das FEDS die serverseitigen Techniken wie Suchen, Applikationen-Logiken oder Lösungen für kundenindividuelle Anforderungen.

Deployment

Alle Projekt-Dateien, die für den Betrieb auf dem Webserver notwendig sind müssen in einer tar.gz-Datei breit gestellt werden.

Das tar.gz muss dabei folgende Dateien enthalten:

  • public/index.php : Dies ist der Front-Controller der für alle Anfragen aufgerufen wird, die nicht eine Front-End-Datei (JavaScript, CSS, …) oder ein publiziertes Medium erwarten.
  • ies-module.build.toml : Diese Datei enthält die Projekt-Informationen und muss mindestens folgende Daten enthalten
    id = "my-project-feds"
    name = "My Project - FEDS"
    description = "My Project - Frontend Delivery System"
    type = "FEDS"
    version = "1.0-SNAPSHOT"
    build_date = 2022-10-27T07:47:29Z
    packaging = "tar.gz"
    

Das Projekt wird über IES-Admin installiert. Die Datei wird vom IES entgegen genommen und als Modul identifiziert. FEDS-Module werden auf die IES-Webnodes weitergegeben.

Der IES-Webnode deployed das FEDS-Module.

tar.gz entpacken

Zunächste wird das tar.gz in einem Ordner wie IES_WEBNODE_HOME/feds/my-project-feds-extract-1.0.0-SNAPSHOT-24fad35795ef28026bff94433d0fdd4e/ ausgepackt.

Die letzten 5 Verzeichnisse dieser Form pro Projekt bleibem auf dem Server enthalten. Gibt es mehr als 5 Verzeichnisse werden die ältesten gelöscht, so das immer maximal 5 Verzeichnise vorhanden sind.

Warmup

Vor dem produktiv schalten der Applikation wird ein Warmup-Prozess durchgeführt. Dieser erstellt Caches und bereitet die Applikation für den Betrieb vor.

Es werden bisher nur PHP-Projekte unterstützt. Daher wir der Start-Up-Prozess über einen PHP-Aufruf gestartet.

Klassisch

Im Produktiv-Betrieb erfolgt der Start des Warmup-Prozesses über den Aufruf innerhalb des Projekt-Verzeichnisses:

bin/console feds:warm-up

Hierbei erfolgt der Warmup-Prozess für das Environment, das in der Varialbe APP_ENV in der .env-Datei eingetrage ist. Im Normalfall prod. Dies kann über die Option -e aber überschrieben werden.

bin/console -e dev feds:warm-up

Docker

In Docker-Umgebungen der IES-Webnode-Container selber kein PHP ausführen kann, erfolgt der Aufruf immer über ein FastCGI-Request an den FPM-Server.

Dazu wird zunächst ein Token mit einem Request an die URL /api/login_check mit den JSON-Daten

{
    "username" : "api",
    "password" : "[PASSWORD]"
}

erfragt. Das Passwort kann über IES_WEBNODE_HOME/config/realm.properties ermittelt werden.

Mit dem erhaltenen Token, wird der Warmup-Request über die URL /api/admin/warm-up angestoßen. War dies erfolgreich wird das Projekt produktiv geschaltet.

Produktiv schalten

Das produktiv schalten der Projektes erfolgt über setzte bzw. verschieben eines Links. Der bis dahin produktive Stand hat den Pfad IES_WEBNODE_HOME/feds/my-project-feds und ist ein Symlink auf das entsprechende Projekt. Beim produktiv schalten wird der aktuelle Link gelöscht und auf das neue Projekt-Verzeichnis gesetzt. Damit ist der neue Stand produktiv.

PHP Konfiguration

Das umschalten auf den Produktiv-Betrieb erfolgt über das setzten eines neuen Symlinks. Ein Problem dabei ist, dass der PHP Opcache im Standard-Fall nicht erkennt, dass sich der Symlink geändert hat und somit immer noch die alten im Cache befindlichen PHP-Klassen verwendet. Um dies zu verhindern muss die PHP-FPM Konfiguration opcache.revalidate_path = 1 gesetzt werde. Dies kann wie folgt erfolgen:

PHP_VERSION=$(php -r "echo PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION;")

cat <<EOT > /etc/php/$PHP_VERSION/fpm/conf.d/90-sitepark.ini

# necessary to detect if a symlink has changed.
# The deployment process uses symlinks to enable
# the update of a feds or fontend module.
opcache.revalidate_path = 1

EOT

systemctl restart php${PHP_VERSION}-fpm

Webserver Integration

Weitere Einstellungen können über Environment-Variablen vorgenommen werden. Dazu können in der Datei /etc/apache/includes/extra.conf Einträge der Form

SetEnv VAR_NAME VAR_VALUE

ergänzt werden. Mögliche Variablen sind

Name Beschreibung
APP_ENV Environment unter die Site laufen soll
APP_SECRET Hierbei handelt es sich um eine Zeichenkette, die für die Anwendung eindeutig sein sollte und üblicherweise verwendet wird, um sicherheitsrelevanten Vorgängen mehr Entropie zu verleihen. Der Wert sollte aus einer Reihe von Zeichen, Zahlen und Symbolen bestehen, die nach dem Zufallsprinzip ausgewählt werden, die empfohlene Länge beträgt mindestens 32 Zeichen.

Die Variablen können auch Publikationsbereich-Spezifisch hinterlegt werden, in dem die Einträge in einer Datei wie /etc/apache/includes/www.domain.de.extra.conf vorgenommen werden.

Für den Betrieb der Webseite sind zusätzlich zu dem FEDS-Projekt noch weitere Kompenenten notwendig.

  • Ein Frontend-Projekt, das korrespondierend zu dem serverseitigen die frontendseitige Logik für die Webseite bereit stellt.
  • Die publizierten Resourcen, die das CMS bereit gestellt hat. Dies sind die Inhalte der Redakteure und Administratoren, die für bestimmte Publikationsbereiche freigegeben sind.

Diese Komponenten werden über eine Apache-Konfiguration zusammengeführt. Dies wird von dem Apache-Macro fedsSite übernommen.