system.ini

Die system.ini ist die zentrale Steuerdatei im Ini-Format zur Konfiguration des Ignition Prozesses und der zu startenden Anwendung.

Abschnitte

Die Konfiguration ist in Abschnitte aufgeteilt.

reporter

Der Abschnitt reporter definiert einen Dienst, der Fehler (Exception) verarbeiten kann. Aktuell gibt es eine Klasse für Sentry und eine für ein Dateisystem-Reporter. Die Konfiguration erfolgt folgendermaßen:

[reporter]

class=\Alvine\Dispatcher\Reporter\Sentry
url=https://example.com/api/<project-id>/store/
key=<key>
secret=<geheim>

Für den Dateisystem-Reporter:

[reporter]

class=\Alvine\Dispatcher\Reporter\Directory
directory=/var/log/exceptions

Die erstellte Datei ist eine JSON-Zeichenkette, die zum Beispiel mit jq ausgegeben werden kann.

Die Projekt-ID project-id, der Schlüssel key und das Passwort secret können in Sentry nachgeschlagen werden.

filesystem

Im filesystem Abschnitt werden die Pfade zu den einzelnen Speicherorten festgelegt und definiert. Im Wesentlichen wird versucht die Standardstruktur von Unix zu verwenden.

; Hier liegt das Standardsystem (readonly)
; Default: /opt/new-project/
basePath=/opt/new-project/

; Phar-Archive, externe Bibliotheken
; Default: /opt/vendor/
vendorPath=/opt/vendor/

; Kunden- und Projektspezifische Dateien 
; Default: /var/new-project/
dataPath=/var/new-project/

; Unter diesem Pfad liegt kunden- und 
; projektspezifizische Code
; Default: /var/new-project/
customisationPath=/var/new-project/

; Logging und Debugging
; Default: /var/log/new-project/
logPath=/var/log/new-project/

; Konfigurationsdateien (Routen, Zugangsdaten)
; Default: /etc/new-project/
configPath=/etc/new-project/

; Temporäre Dateien
; Default: /tmp/new-project/
tempPath=/tmp/new-project/

; Für Webanwendungen liegen hier die 
; über HTTP aufrufbare Dateien
; Default: /srv/new-project/
webPath=/srv/new-project/

!!! "note" Hinweis Der webPath muss bei reinen CLI-Anwendungen nicht gesetzt werden.

units

Im units Abschnitt werden die Namen und die Reihenfolge der durchzuführenden Schritte spezifiziert. Die Namen der einzelnen Einheiten (Units) werden als Schlüssel angegeben.

Der Name der Einheit ist identisch mit dem Klassennamen der entsprechenden Einheit. Der Schlüssel SendAccessControlAllowOrigin gehört so zur Klasse \Alvine\Dispatcher\Unit\SendAccessControlAllowOrigin.

Der Wert entspricht den API in denen die Unit ausgeführt werden soll. Wird als Wert ein Stern * notiert, so wird die Einheit auf allen API ausgeführt. Der Wert http steht für alle Web-APIs und cli für alle Konsolen-Anwendungen. Außerdem können alle spezifischen SAPI-Namen als Kommaliste angegeben werden.

Mögliche Werte sind unter anderem aolserver, apache, apache2filter, apache2handler, caudium, cgi (bis PHP 5.3), cgi-fcgi, cli, cli-server, continuity, embed, fpm-fcgi, isapi, litespeed, milter, nsapi, phttpd, pi3web, roxen, thttpd, tux und webjames.

Die Werte können per Komma getrennt angegeben werden. So kann die Ausführung einer Unit auf Apache, FPM und isapi mit folgendem Wert eingeschränkt werden: apache,fpm-fcgi,isapi

Die Werte müssen so, wie von der Methode \php_sapi_name() zurückgegeben, angegeben werden.

Hinweis

Alle Units müssen im Namespace \Alvine\Dispatcher\Unit angelegt und von der Klasse \Alvine\Dispatcher\Unit abgeleitet sein.

Die Standard-Unit-Klassen werden automatisch eingebunden. Klassendateien für projektspezifische Units müssen manuell per include_once eingebunden werden.

Standardeinheiten

Jede Einheit kann eigene Konfigurationen besitzen, die in einem Abschnitt mit identischem Namen definiert werden. So verfügt die Einheit \Alvine\Dispatcher\Unit\SendAccessControlAllowOrigin über einen Konfigurationsabschnitt mit dem Namen [SendAccessControlAllowOrigin].

RunExternals

Diese Einheit führt eine beliebige PHP-Datei aus. Die Ausführung des Script erfolgt in einem Closure.

[RunExternals]
; Externe Scripte in den Startupprozess integrieren
path[]= ~/projekte/svn/alvine.application.platform/development/environment/alvine-platform/ignition/example.php

InitLegacyConstants

Mit dieser Einheit können Konstanten festgelegt werden, die in der Anwendung zur Verfügung steht.

[InitLegacyConstants]
; Zuweisung von Konstanten zu einem bestimmten Wert.
MY_CONST_VARIABLE=value

Dependencies

Mit dieser Einheit können Voraussetzungen der PHP-Installation überprüft werden. Wenn nicht alle Abhängigkeiten gegeben sind, so wird eine Exception geworfen.

[Dependencies]
; Notwendige PHP-Erweiterungen
extension[]=yaml
extension[]=mbstring

; Notwendige PHP-Version
php-version=7.3.0

RegisterApplicationNamespace

Mit dieser Einheit kann der Namespace registriert werden.

[RegisterApplicationNamespace]
; Namespace der Anwendung
namespace=\Alvine\Application\Platform

RegisterCustomisationNamespaces

Mit dieser Einheit kann ein eigener Namespace registriert werden.

[RegisterCustomisationNamespaces]
; Diese Namespaces werden registeriert
; Die Dateien müssen im Verzeichnis customissation 
; aus der filesystem-Sektion liegen
; Der Namespace kann beliebig gewählt werden.
namespace[]=\Customisation
; namespace[]=\Customisation2

RewriteRequestURI

Mithilfe dieser Einheit kann die REQUEST-URI umgeschrieben werden. Dies ist zum Beispiel bei Systemen in denen eine index.php angegeben wurde sinnvoll. Dazu muss man ein pattern definieren, dass dann mit dem Wert aus replace ersetzt wird.

Als Trennzeichen für den Regex kommt das ~-Zeichen zum Einsatz.

[RewriteRequestURI]
; Regex-Pattern
pattern=^/index.php
; Ersetzung
replace=/

InitCliAssemblyAndExecute

Diese Einheit initialisiert die Anwendungsklasse und startet die Anwendung.

[InitCliAssemblyAndExecute]
; Der Namespace muss vorher über
; RegisterApplicationNamespace oder
; RegisterCustomisationNamespaces registriert 
; worden sein
class=\Alvine\Application\Platform\Command
; Verzeichnisse, in denen nach Konfigurationswerten gesucht wird.
; Die Verzeichnisse müssen Unterverzeichnisse von config sein.
; Die einzelnen Verzeichnisse werden in der Reihenfolge wie hier 
; aufgeführt ausgewertet. Die Dateien im Verzeichnis werden nach 
; dem Dateinamen sortiert und in dieser Reihenfolge ausgewertet. 
directories=generally,cli

; Soll der Cache deaktiviert werden
; Diese Einstellung sollte mit Vorsicht geändert werden
; Bei deaktivertem Cache wird die Performance enorm beeinträchtigt.
disableCache=false

InitWebAssemblyAndExecute

Diese Einheit initialisiert die Anwendungsklasse und startet die Anwendung.

[InitWebAssemblyAndExecute]
; Der Namespace muss vorher über
; RegisterApplicationNamespace oder
; RegisterCustomisationNamespaces registriert 
; worden sein
class=\Alvine\Application\Platform\Web

; Verzeichnisse, in denen nach Konfigurationswerten gesucht wird.
; Die Verzeichnisse müssen Unterverzeichnisse von config sein.
; Die einzelnen Verzeichnisse werden in der Reihenfolge wie hier 
; aufgeführt ausgewertet. Die Dateien im Verzeichnis werden nach 
; dem Dateinamen sortiert und in dieser Reihenfolge ausgewertet. 
directories=generally,http

; Soll der Cache deaktiviert werden
; Diese Einstellung sollte mit Vorsicht geändert werden
; Bei deaktivertem Cache wird die Performance enorm beeinträchtigt.
disableCache=false

InitErrorReportingAndDebugging

Mit dieser Einheit kann das Verhalten im Fehlerfall definiert werden.

[InitErrorReportingAndDebugging]
; Entwickeln und/oder Debugging der Anwendung über die HTTP-Schnittstelle
; Wenn die Anwendung im Debug-Modus ist, wird der Cache deaktiviert und
; es werden mehr Informationen ausgegeben.

; Anzeigen der PHP Fehlermeldungen. Die Codes sind hier zu entnehmen:
; http://php.net/manual/de/errorfunc.constants.php
; 32767 sind alle Meldungen; 0 Keine Meldungen
errorReportingLevel=0

; Sollen PHP-Fehlermeldungen angezeigt werden
displayErrors=true


; Soll der Opcache während des Debuggings geleert werden
; Wichtig: Diese Einstellung kann große Auswirungen auf die
; Performance haben.

; Funktioniert nur, wenn in PHP Opcache aktiviert ist
clearOpcache=false

; Die Debug-Funktion ist auf die hier aufgeführten IP-Adressen 
; beschränkt. Wichtig bei der Verwendung von Proxies: Die IP-Adresse
; des Clients muss weitergereicht werden. Folgende Felder werden
; ausgewertet: X-Forwarded-For

; Die IP-Adresse kann IPV4 oder IPV6 sein
; werden keine IP-Adressen angegeben, so arbeiten
; die Einstellungen für alle Adressen.
limitToIP[]=::1
limitToIP[]=127.0.0.1
;limitToIP[]=

; Wird kein Cookie oder kein Parameter definiert, so
; Wird bei allen IP-Adressen das Debugging eingeschalten.

; Name des Cookies, der die Anwendung
; in den Debug-Modus schaltet.
enableByCookie=
; Name des Parameters, der die Anwendung
; in den Debug-Modus schaltet.
enableByParameter=debug
; Name des Parameters, der die temporär gespeicherten Routendateien der Anwendung löscht
resetRoutesByParameter=reset

IncludeComponents

Diese Einheit bindet alle in der assembly.ini im Abschnitt components definierten Phars über das phar:// Protokoll ein. Die Komponenten werden dabei im Vendor-Verzeichnis gesucht.

;[IncludeComponents]
; Pfad in dem die Phars liegen
path=/opt/vendor/phars

InitEnvironmentFromEnv

Diese Einheit bindet eine PHP-Datei ein.

[InitEnvironmentFromEnv]
; Pfad in dem die env.php liegt
; Diese Datei kann spezielle Environment-Daten enthalten
path=/etc/env.php

Die eingebundene PHP Datei sollte Umgebungsvariablen für die Anwendung definieren, kann aber auch andere Aufgaben wahrnehmen. Die folgende Datei /etc/env.php ist ein Beispiel für eine Datei zum Setzen der Umgebungsvariable.

<?php
function setAlvineDevelopmentEnvironment(string $key, string $value): void {
    \putenv($key . '=' . $value);
    $_ENV[$key] = $value;
}

setAlvineDevelopmentEnvironment('MONGODB_URI', 'mongodb://127.0.0.1:27017');
setAlvineDevelopmentEnvironment('REDIS_URI', 'redis://127.0.0.1:6379');
setAlvineDevelopmentEnvironment('LOGLEVEL', 'ALL');

SendAccessControlAllowOrigin

Diese Einheit sendet bei http-Anfragen den Access-Control-Allow-Origin mit dem angegebenen Wert.

[SendAccessControlAllowOrigin]
; Wird kein Wert angegeben, so wird kein header gesendet
value=*