Ich versuche, eine PHP-Webanwendung mit Docker zu konfigurieren. Die Idee ist, die App php-fpm
in einem eigenständigen Container auszuführen und einen anderen Container zu haben, in dem Nginx ausgeführt wird. Die Idee für dieses Setup ist, denselben Nginx-Container zu verwenden, um Anforderungen an andere Webanwendungen zu senden, die bereits auf demselben Computer arbeiten. Das Problem ist, dass ich nginx
statische Dateien (js, css usw.) nicht richtig verarbeiten kann , da die Anforderungen an diese weiterhin bestehen fpm
.
So sieht das Dateisystem aus:
/
├── Makefile
├── config
│ └── webapp.config
└── webapp
└── web
├── index.php
└── static.js
Ich führe die ganze Sache mit einem aus Makefile
, der so aussieht (nicht daran interessiert docker-compose
):
PWD:=$(shell pwd)
CONFIG:='/config'
WEBAPP:='/webapp'
run: | run-network run-webapp run-nginx
run-network:
docker network create internal-net
run-webapp:
docker run --rm \
--name=webapp \
--net=internal-net \
--volume=$(PWD)$(WEBAPP):/var/www/webapp:ro \
-p 9000:9000 \
php:5.6.22-fpm-alpine
run-nginx:
docker run --rm \
--name=nginx \
--net=internal-net \
--volume=$(PWD)$(CONFIG)/webapp.conf:/etc/nginx/conf.d/webapp.domain.com.conf:ro \
-p 80:80 \
nginx:1.11.0-alpine
So config/webapp.conf
sieht mein Aussehen aus.
server {
listen 80;
server_name webapp.domain.com;
# This is where the index.php file is located in the webapp container
# This folder will contain an index.php file and some static files that should be accessed directly
root /var/www/webapp/web;
location / {
try_files $uri $uri/ @webapp;
}
location @webapp {
rewrite ^(.*)$ /index.php$1 last;
}
location ~ ^/index\.php(/|$) {
include fastcgi_params;
fastcgi_pass webapp:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
}
Welche Aktion auch immer benötigt wird, um mit dieser index.php
Datei verarbeitet zu werden, funktioniert. Statische Dateien werden jedoch nicht 404
bereitgestellt , was zu bösen Fehlern führt (da für die PHP-Webanwendung keine Routen konfiguriert sind). Ich glaube, nginx versucht, diese aus seinem eigenen Container-Dateisystem zu laden, wenn sie sich tatsächlich im webapp
Container befinden @webapp
.
Gibt es eine Möglichkeit, die ich konfigurieren kann nginx
, um die Dateien bereitzustellen, die sich in einem anderen Container befinden?
nginx
Anforderungsdateien innerhalb der PHP-Anwendung, ich bin ein Proxy fpm
dafür und ich muss nginx
auf statische Nicht-PHP-Dateien zugreifen.
webapp
Container bereitgestellt , nicht in dem nginx
einen.