PHP
Die Deploio-Build-Umgebung nutzt das Paketo PHP Buildpack.
Beispiel-App
Eine einfache Symfony App zeigen wir in unserem
Beispiele-Repository. Sie
können diese mit nctl
deployen:
nctl create application symfony \
--git-url=https://github.com/ninech/deploio-examples \
--git-sub-path=php/symfony
PHP Extensions
Wie bereits erwähnt, nutzt Deploio das Paketo PHP Buildpack, um PHP-Support zur Verfügung zu stellen. Dabei inkludiert das PHP Buildpack wiederum das Paketo PHP Distribution Buildpack, welches die PHP-Distribution in verschiedenen Versionen liefert. Die verschiedenen kompilierten PHP-Versionen enthalten dabei bereits eine Menge an verfügbaren Extensions, welche Sie in Ihrer Applikation nutzen können. Die verschiedenen verfügbaren PHP-Extensions werden dabei in verschiedenen YAML-Dateien pro PHP- Version im Paketo PHP Distribution Buildpack definiert.
Derzeit ist es nicht möglich PHP-Extensions zu nutzen, welche nicht in den oben genannten YAML-Dateien definiert sind.
Es ist wichtig zu wissen, dass obwohl sehr viele Extensions mitgeliefert
werden, keine von den Extensions zur Laufzeit standardmässig geladen werden.
Dies erfolgt, um nicht unnötig Arbeitsspeicher zu verschwenden.
Um die Extensions zu laden, müssen Sie diese entweder via Composer oder via
selbst erstellten *.ini
Dateien spezifizieren. Beide Wege werden in den
folgenden Abschnitten erläutert.
Laden von Extensions via Composer
Falls Sie Composer als PHP-Paketmanager nutzen, können Sie die entsprechenden
Extensions, welche geladen werden sollen, in der Datei composer.json
definieren. Um beispielsweise die bz2-, curl- und die zip-Extension zu laden,
können Sie den folgenden Inhalt verwenden:
{
"require": {
"php": ">=8.1",
"ext-bz2": "*",
"ext-curl": "*",
"ext-zip": "*"
}
}
Dies ist auch in der offiziellen Composer- Dokumentation beschrieben.
Laden von Extensions via .ini-Dateien
Falls Sie nicht Composer verwenden, können Sie Extensions über selbst erstellte
*.ini
-Dateien laden. Diese müssen im Quellcode-Repository im Verzeichis <APP-ROOT>/.php.ini.d
abgelegt werden. Um beispielsweise die bz2-, curl- und zip-Extension zu laden,
können Sie eine Datei <APP-ROOT>/.php.ini.d/meine-extensions.ini
mit folgendem
Inhalt erstellen:
extension=bz2.so
extension=curl.so
extension=zip.so
Composer Plattform-Anforderungen
Da auf Deploio die Build- und Laufzeit-Container unterschiedlich sind, kann es sein, dass ein Projekt nicht gebaut werden kann wegen fehlenden Plattform-Anforderungen. Diese Anforderungen werden mit dieser Build-Umgebungsvariable ignoriert:
--build-env=BP_COMPOSER_INSTALL_OPTIONS="--ignore-platform-reqs"
Dadurch werden alle Plattform-Anforderungen ignoriert. Ansonsten können auch spezifische extensions ignoriert werden:
--build-env=BP_COMPOSER_INSTALL_OPTIONS="--ignore-platform-req=ext-mysqli"
Wenn diese Variable gesetzt ist, werden die extensions weiterhin durch das Buildpack validiert, ob diese auch im Laufzeit-Container verfügbar sind. Nur der Build wird deshalb nicht mehr fehlschlagen.
Build-Umgebungsvariablen
Der Build-Prozess bietet einige Umgebungsvariablen, mit deren Hilfe Sie ihn an Ihren Use Case anpassen können. Eine Auflistung aller verfügbaren Variablen finden Sie im Abschnitt Anleitungen der Dokumentation.
Einen Webserver auswählen
Standardmässig wird der in PHP eingebaute Webserver verwendet. Für Produktionsumgebungen empfehlen wir die Verwendung von Apache oder NGINX:
-
PHP eingebauter Webserver
--build-env=BP_PHP_SERVER=php-server
-
Apache HTTPD Webserver
--build-env=BP_PHP_SERVER=httpd
-
NGINX Webserver
--build-env=BP_PHP_SERVER=nginx
Der Webserver kann, wenn benötigt, weiter angepasst werden, indem Sie eine eigene Server-spezifische config-Datei verwenden.
Das Webverzeichnis konfigurieren
Einige Frameworks legen die index.php
-Datei in einem separaten Verzeichnis wie
etwa public
statt im Repository-Stammverzeichnis ab. Wenn es sich beim
Webserver um HTTPD oder NGINX handelt, ist das Webverzeichnis standardmässig
htdocs. In jedem Fall können Sie das Webverzeichnis mit einer
Build-Umgebungsvariable überschreiben.
--build-env=BP_PHP_WEB_DIR=public
Symfony
Damit die Symfony-Anwendung ohne Fehler erstellt werden kann, müssen die Auto-Scripts aktuell ausgeschaltet sein:
--build-env=BP_COMPOSER_INSTALL_OPTIONS=--no-scripts -o