Запустите приложение PHP на сервере Apache, используя PHP-FPM - PullRequest
1 голос
/ 09 апреля 2019

У нас есть php-приложение, которое работало нормально с использованием Docker Image:

php: 7.2-apache-stretch

Теперь нам нужно воспользоваться следующимизображение для лучшей производительности и заставить приложение работать как было раньше.

php: 7.2.17-fpm-stretch

Поскольку на этом изображении нет apache в нем,Я обновил Dockerfile, начиная с установки apache2 и связанных пакетов, основанных на различных форумах.

Есть много других шагов.Я только что добавил инструкции, которые я обновил в Dockerfile.

 FROM php:7.2.17-fpm-stretch

RUN apt-get update && apt-get install -y apache2 wget

RUN cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb && dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb;apt-get install -f

RUN a2enmod actions proxy_fcgi fastcgi
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
COPY info.php /var/www/html/info.php
COPY run.sh /app/run.sh
# EXPOSE 9000
RUN chmod 755 /app/run.sh
CMD "/app/run.sh"

info.php содержит <?php phpinfo( ); ?>.В сценарии run.sh мы запускаем службу php-fpm и apache2, как показано ниже

php-fpm -D

/ usr / sbin / apachectl -D FOREGROUND

ранее я пытался получить доступ к приложению через порт, который был сопоставлен с 9000 (fpm).Когда я получил доступ к правильному порту, на котором работал apache, я смог просмотреть info.php.

Содержимое в файле vhost.conf.

<FilesMatch \.php$>
  SetHandler "proxy:fcgi://localhost:9000"
</FilesMatch>

Ответы [ 3 ]

2 голосов
/ 10 апреля 2019

У меня получилось, что я сделал несколько модификаций.

Я использовал этот слегка модифицированный dockerfile:

FROM php:7.2.17-fpm-stretch

RUN apt-get update; apt-get install -y apache2 wget

RUN cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb && dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb;apt-get install -f


RUN a2enmod actions proxy_fcgi fastcgi

COPY run.sh /app/run.sh
RUN chmod 755 /app/run.sh
CMD "/app/run.sh"

Я также добавил следующий фрагмент (ту же модификацию, что и вы) в / etc/apache2/sites-available/000-default.conf:

<FilesMatch \.php$>
  SetHandler "proxy:fcgi://localhost:9000"
</FilesMatch>

Вот вывод, который я получаю:

[09-Apr-2019 21:23:06] NOTICE: fpm is running, pid 9
[09-Apr-2019 21:23:06] NOTICE: ready to handle connections
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message

Кроме того, вы пытались создать файл docker без кеша?Иногда кэширование может вызвать проблемы с установкой пакета (подробнее см. здесь ).Чтобы сделать чистую сборку изображения, просто используйте:

docker build --no-cache 
1 голос
/ 10 апреля 2019

Ваша новая конфигурация работает с использованием этого файла Docker:

FROM php:7.2.17-fpm-stretch

RUN apt-get update && apt-get install -y apache2 wget

RUN cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb && dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb;apt-get install -f

RUN a2enmod actions proxy_fcgi fastcgi
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
COPY info.php /var/www/html/info.php
COPY run.sh /app/run.sh
RUN chmod 755 /app/run.sh
EXPOSE 80
CMD "/app/run.sh"

Я выполнил команду:

docker run -P -d --rm <php-image>

Доступны следующие порты:

0.0.0.0: 32773-> 80 / tcp, 0.0.0.0:32772->9000/tcp

Мне удалось получить доступ к info.php с помощью http://localhost:32773/info.php

0 голосов
/ 10 апреля 2019

Мне удалось получить доступ к странице php. Все работало нормально. Но я смотрел не в ту сторону. Когда я запускаю контейнер.

docker run -P -d --rm php:test-fpm

Вывод был

82071c9ff023        php:test-fpm                    "docker-php-entrypoi…"   2 seconds ago       Up 1 second         0.0.0.0:32778->80/tcp, 0.0.0.0:32777->9000/tcp   practical_mclean

Я обращался к localhost: 32777 / info.php. Но я должен был получить доступ к 32778, где выставлен apache и localhost: 32778 / info.php работал !!! ,

Есть ли способ избежать сопоставления портов 9000. ???

...