Zum Hauptinhalt springen

PHP

Die deplo.io 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 deplo.io das Paketo PHP Buildpack um PHP Support zur Vefügung zu stellen. Dabei inkludiert das PHP Buildpack wiederrum 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.

Derzeitig 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 Wegen werden in den folgenden Abschnitten erläutert.

Laden von Extensions via Composer

Falls Sie Composer als PHP Paket Manager 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 ignoriert werden mit dieser Build-Umgebungsvariable:

--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 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