Zum Hauptinhalt springen

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