使用PHP-FPM在Apache服务器上运行PHP应用程序

使用PHP-FPM在Apache服务器上运行PHP应用程序,php,docker,apache2,fpm,Php,Docker,Apache2,Fpm,我们有一个php应用程序,它使用 Docker图像: php:7.2-apache-stretch 我们现在必须使用下图以获得更好的性能,并使应用程序像以前一样工作 php:7.2.17-fpm-stretch 因为此映像中没有apache。从安装apache2和基于各种论坛的相关软件包开始,我更新了Dockerfile 还有许多其他步骤。我刚刚在Dockerfile中添加了已更新的说明 FROM php:7.2.17-fpm-stretch RUN apt-get update &

我们有一个php应用程序,它使用 Docker图像:

php:7.2-apache-stretch

我们现在必须使用下图以获得更好的性能,并使应用程序像以前一样工作

php:7.2.17-fpm-stretch

因为此映像中没有apache。从安装apache2和基于各种论坛的相关软件包开始,我更新了Dockerfile

还有许多其他步骤。我刚刚在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"
php包含。在run.sh脚本中,我们启动php fpm服务和apache2,如下所示

php-fpm-D

/usr/sbin/apachectl-D前台

之前我尝试从映射到9000 fpm的端口访问应用程序。当我访问apache运行的正确端口时,我能够查看info.php

vhost.conf文件中的内容

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

我对它进行了一些修改

我使用了这个稍微修改过的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"
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"
我还添加了以下代码段,与您对/etc/apache2/sites available/000-default.conf所做的修改相同:

<FilesMatch \.php$>
  SetHandler "proxy:fcgi://localhost:9000"
</FilesMatch>
另外,您是否尝试在没有缓存的情况下构建dockerfile?有时,缓存可能会导致软件包安装出现问题。有关更多详细信息,请参阅。要创建清晰的图像,只需使用:

docker build --no-cache 

我对它进行了一些修改

我使用了这个稍微修改过的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"
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"
我还添加了以下代码段,与您对/etc/apache2/sites available/000-default.conf所做的修改相同:

<FilesMatch \.php$>
  SetHandler "proxy:fcgi://localhost:9000"
</FilesMatch>
另外,您是否尝试在没有缓存的情况下构建dockerfile?有时,缓存可能会导致软件包安装出现问题。有关更多详细信息,请参阅。要创建清晰的图像,只需使用:

docker build --no-cache 

我能够访问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端口映射

我能够访问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端口映射

我使用此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"
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我使用此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"
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


我可以使用

Hello访问info.php,非常感谢您的回复。我没有包括在内。我正在对脚本进行chmod,并且我能够成功地启动这两个过程。但我不确定这一切是如何联系在一起的。我在vhost.conf中的实现是否正确。如果我们有一个像WordPress这样的php应用程序,我必须使用php fpm在Apache服务器上托管它,那么要做的步骤是什么。我在/etc/apache2/sites available/000-default.conf中添加了以下代码片段,它对我有效:SetHandler proxy:fcgi://localhost:9000 我已经更新了我的Dockerfile。当我尝试访问info.php时。我做不到。而localhost可以访问index.html.:。它适用于sample.php文件。我有一个用php运行的wordpress应用程序:。在该Dockerfile中启用了以下MOD。您好,非常感谢您的回复。我没有包括在内。我正在对脚本进行chmod,并且我能够成功地启动这两个过程。但我不确定这一切是如何联系在一起的。我在vhost.conf中的实现是否正确。如果我们有一个像WordPress这样的php应用程序,我必须使用php fpm在Apache服务器上托管它,那么要做的步骤是什么。我在/etc/apache2/sites available/000-default.conf中添加了以下代码片段,它对我有效:SetHandler proxy:fcgi://localhost:9000 我已经更新了我的Dockerfile。当我尝试访问info.php时。我做不到。而localhost可以访问index.html.:。它适用于sample.php文件。我有一个用php运行的wordpress应用程序:。在该Dockerfile中启用了以下MOD。感谢您的回复。现在我的wordpress应用程序正在运行。但我面临重写的问题,我在.htaccess文件中提到过。[2019年4月10日星期三15:24:03.632495][proxy_fcgi:error][pid 15:tid 13995605555200][client 172.17.0.18:55636]AH01071:出现错误'Primary script unknown\n',参考者:[2019年4月10日星期三15:26:53.354451][proxy_fcgi error][pid 16:tid 13
9956039169792][client 172.17.0.18:56056]AH01071:获取错误“主脚本未知\n”,请参考:什么.htaccess文件?感谢您的响应。现在我的wordpress应用程序正在运行。但我面临重写的问题,我在.htaccess文件中提到过。[Wed Apr 10 15:24:03.632495 2019][proxy_fcgi:error][pid 15:tid 13995605555200][client 172.17.0.18:55636]AH01071:Get error'Primary script unknown\n],参考者:[Wed Apr 10 15:26:53.354451 2019][proxy_fcgi error pid 16:tid 139956039169792][client 172.17.0.18:56056]AH01071:Get error'Primary script unknown\n,什么.htaccess文件?