Lokale Installation von PHP vs. PHP in Docker

Lokale Installation von PHP vs. PHP in Docker
30/10/2020

PHP ist eine serverseitige Skriptsprache, die für Webentwicklungen entwickelt wurde, die aber auch als allgemeine Programmiersprache verwendet werden kann. PHP kann zu reinem HTML hinzugefügt werden oder es kann mit einer Vielzahl von Template-Engines und Web-Frameworks verwendet werden. PHP-Code wird normalerweise von einem Interpreter verarbeitet, der entweder als natives Modul auf dem Webserver oder als Common Gateway Interface (CGI) implementiert ist.

Beide Installationsarten sehen gleich aus, aber der Unterschied liegt in der Lokalisierung der ini-Dateien. Der Standardpfad zu ini-Dateien für ein lokales PHP ist /usr/local/etc/php. Die Docker-Installation verwendet den gleichen Pfad, aber man findet hier zwei Dateien - php.ini-development und php.ini-production sowie einen Ordner namens conf.d. Wenn Sie phpinfo() in beiden Systemen hinzufügen, können Sie folgendes sehen:

Und das ist das Problem. Leider sucht PHP nach der standardmäßigen php.ini-Datei im Standardpfad. Dateien mit dem Namen ini-development oder ini-production werden nicht akzeptiert. Andere ini-Dateien können von einem anderen Ort geladen werden: /usr/lokal/etc/php/conf.d.

Wie kann man das Problem lösen?

1/ Wenn man Dateien mit Standardwerten hochladen möchte, kann eine der Dateien in /usr/local/etc/php/ umbenannt werden. In Dockerfile wie folgt:

{% c-block language="markdown" %}
FROM PHP:apache
           WORKDIR /var/www/html
           COPY . . #copy your awesome app to workdir
           RUN mv /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini

{% c-block-end %}

2) Wenn man eine Datei mit Standardwerten und einige mit benutzerdefinierten Werten hochladen möchte, kann man den Befehl Echo nach dem Umbenennen der Dateien wie in Lösung Nr. 1 wie folgt verwenden:

{% c-block language="markdown" %}
FROM PHP:apache
           WORKDIR /var/www/html
           COPY . . #copy your awesome app to workdir
           RUN mv /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini \
                       && echo “my_values” > /usr/local/etc/php/conf.d/my_php_ini.ini
{% c-block-end %}

3) Um nur Dateien mit benutzerdefinierten Werten zu verwenden, können wir Echo- oder Multiple-Echo-Befehle verwenden oder wir können unsere eigene ini-Datei im Repo verwenden und in den richtigen Pfad kopieren bzw. wenn wir die GitLab Pipeline verwenden, können wir die Echo-Umgebung (GitLab ENV) für einige ini-Dateien im Pfad /usr/local/etc/php/conf.d/ verwenden

{% c-block language="markdown" %}
FROM PHP:apache
           WORKDIR /var/www/html
           COPY . . #copy your awesome app to workdir
           COPY “path_to_your_ini_file(s)” /usrlocal/etc/php/conf.d
{% c-block-end %}

oder:

{% c-block language="markdown" %}
RUN echo “my_values” > /usr/local/etc/php/conf.d/my_php_ini.ini (creating file)
           RUN echo “my_other_values” >> /usr/local/etc/php/conf.d/my_php_ini.ini (add_lastline_into_file)
{% c-block-end %}

Bis bald bei der nächsten Folge unserer DevOps-Serie.

Teilen:
Pavel ist ein erfahrener DevOps-Guru und begeisterter SysAdmin, der für Application Life Cycle, Continuous Integration und Continuous Delivery verantwortlich ist, Sowohl für Kunden als auch für interne SABO Projekte. Er schult Software-Entwickler in unserem Team und koordiniert alle DevOps-Aktivitäten. Hat immer einen Spruch parat, wechselt unberechenbar ins Polnische und kocht und backt gerne.

Article collaborators

SABO Mobile IT

Für unsere Kunden aus der Industrie entwickeln wir spezialisierte Software zur Umsetzung von Industry 4.0. IoT, Machine Learning und Künstliche Intelligenz ermöglichen uns, signifikante Effizienzsteigerungen bei unseren Kunden zu erzielen.
Über uns