PHP
Die Deploio-Build-Umgebung nutzt das Paketo PHP Buildpack auf dem Paketo-Stack und das Heroku PHP Cloud Native Buildpack auf dem Heroku-Stack. Weitere Informationen findest du unter Buildpack-Stacks.
Beispiel-App
Eine einfache Symfony App zeigen wir in unserem
Beispiele-Repository. Du
kannst diese mit nctl deployen:
- Heroku Stack
- Paketo Stack
nctl create application symfony \
--git-url=https://github.com/ninech/deploio-examples \
--git-sub-path=heroku-stack/php/symfony
nctl create application symfony \
--buildpack-stack=paketo \
--git-url=https://github.com/ninech/deploio-examples \
--git-sub-path=paketo-stack/php/symfony
PHP Extensions
Paketo-Stack
Das Paketo PHP Buildpack inkludiert 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 du in deiner Applikation nutzen kannst. 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, musst du 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 du Composer als PHP-Paketmanager nutzt, kannst du die entsprechenden
Extensions, welche geladen werden sollen, in der Datei composer.json
definieren. Um beispielsweise die bz2-, curl- und die zip-Extension zu laden,
kannst du 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 du Composer nicht verwendest, kannst du Extensions über selbst erstellte
*.ini-Dateien laden. Diese müssen im Quellcode-Repository im Verzeichnis <APP-ROOT>/.php.ini.d
abgelegt werden. Um beispielsweise die bz2-, curl- und zip-Extension zu laden,
kannst du 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.
Heroku-Stack
Extensions werden in der composer.json über das Präfix ext- im
require-Abschnitt deklariert. Weitere Informationen findest du in der
Heroku-Dokumentation zur Verwaltung von PHP-Extensions.
{
"require": {
"ext-bcmath": "*",
"ext-gmp": "*"
}
}
Paketo-Stack-Konfiguration
Der Build-Prozess bietet einige Umgebungsvariablen, mit deren Hilfe du ihn an deinen Use-Case anpassen kannst. Eine Auflistung aller verfügbaren Variablen findest du 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 du eine eigene Server-spezifische Konfigurationsdatei 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 kannst du das Webverzeichnis mit einer
Build-Umgebungsvariable überschreiben:
--build-env=BP_PHP_WEB_DIR=public
Heroku-Stack-Webserver-Konfiguration
Auf dem Heroku-Stack wird der Webserver über ein
Procfile im Root des Repositories konfiguriert.
Weitere Informationen findest du in der Heroku-
Dokumentation.
Symfony
Paketo-Stack
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