使用PHP对应用程序进行响应。Dockerfile实现
我正在将我的应用程序从Azure应用程序服务移动到Azure Kubernetes服务,我需要对其进行dockerize。这是一个简单的typescript/react应用程序。我通常会按照以下顺序构建和运行它:使用PHP对应用程序进行响应。Dockerfile实现,php,html,docker,kubernetes,dockerfile,Php,Html,Docker,Kubernetes,Dockerfile,我正在将我的应用程序从Azure应用程序服务移动到Azure Kubernetes服务,我需要对其进行dockerize。这是一个简单的typescript/react应用程序。我通常会按照以下顺序构建和运行它: yarn yarn staging serve -s build -l 5000 然而,有一点扭曲。我有几个php页面需要支持。我如何将所有流量路由到/index.html,除了到达*.php的请求-这些请求需要作为php脚本处理。Azure应用程序服务允许我用PHP并排运行HTML
yarn
yarn staging
serve -s build -l 5000
然而,有一点扭曲。我有几个php
页面需要支持。我如何将所有流量路由到/index.html
,除了到达*.php
的请求-这些请求需要作为php脚本处理。Azure应用程序服务允许我用PHP并排运行HTML5应用程序。我如何使用docker实现它?我的Dockerfile应该是什么样子
以下是我目前的想法:
# Step 1
FROM node:10-alpine as build-step
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN yarn
RUN yarn staging
# Stage 2
FROM php:7.2-apache
COPY --from=build-step /app/build /var/www/html
EXPOSE 80
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
但是如果我打开它,它不会重定向到/index.html。经过所有的研究,我成功地实现了所需的行为,即:
- 用纱线构建react应用程序
- 单页应用程序URL重写
- 启用PHP。我可以打开http://*.php网页
- 打开/webpage,如果有webpage.php,它将打开php
# Build
FROM node:10-alpine as build
ARG envType=staging
RUN echo ${envType}
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN yarn
RUN yarn ${envType}
# Run
FROM php:7.3-apache
COPY --from=build /app/build /var/www/html
RUN a2enmod rewrite
EXPOSE 80
和.htaccess文件,具有重写规则:
<ifModule mod_rewrite.c>
RewriteEngine On
# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !index
RewriteRule (.*) index.html [L]
</ifModule>
重新启动发动机
#检查请求是否针对PHP文件:
重写cond%{REQUEST_FILENAME}\.php-f
重写规则^/?(.*)$/$1.php[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_URI}!指数
重写规则(.*)index.html[L]
您想在同一个容器中执行此操作吗?@JayBlanchard是的,我想。请看我的dockerfile,因为它现在已经做了一些研究,我不确定你能做到这一点,而不是真正的黑客。更好的选择可能是另一个运行PHP脚本并返回结果的容器。或者使用类似SupervisorD的工具,以便可以在同一容器中运行多个服务。请在此处提供docker ps
好吗?您应该构建静态HTML页面,而不是直接使用serve,这仅用于开发,一旦您拥有dist/build文件夹,您就可以将其与PHP文件一起提供,使用php apache或php fpm的docker映像,否则您将需要nginx之类的东西将所有内容重定向到您正在服务的端口,并将php重定向到php可执行文件。