J'essaie de configurer une webapp php à l'aide de docker. L'idée est d'exécuter l'application à l'aide php-fpm
d'un conteneur autonome et d'avoir un autre conteneur qui exécutera nginx. L'idée de cette configuration est d'utiliser ce même conteneur nginx pour proxy des requêtes vers d'autres webapps qui fonctionnent déjà sur la même machine. Le problème est que je ne parviens pas nginx
à traiter correctement les fichiers statiques (js, css, etc.), car les demandes à ceux-ci continuent de l'être fpm
.
Voici à quoi ressemble le système de fichiers:
/
├── Makefile
├── config
│ └── webapp.config
└── webapp
└── web
├── index.php
└── static.js
J'exécute le tout en utilisant un Makefile
qui ressemble à ceci (cela ne m'intéresse pas 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
Voilà à quoi config/webapp.conf
ressemble mon .
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;
}
}
Quelle que soit l'action qui doit être traitée à l'aide de ce index.php
fichier, cela fonctionnera. Cependant, les fichiers statiques ne seront pas servis, ce qui entraînera des 404
erreurs désagréables (car la webapp php n'a pas vraiment de routes configurées pour celles-ci). Je crois que nginx essaie de charger ceux-ci à partir de son propre système de fichiers de conteneur, lorsqu'ils sont réellement dans le webapp
conteneur, en échouant @webapp
.
Existe-t-il un moyen de configurer nginx
pour servir ces fichiers qui résident dans un autre conteneur?
nginx
crée pas de fichiers de demande dans l'application php, je suis mandataire pour fpm
le faire et j'ai besoin nginx
d'accéder à des fichiers statiques non php.
webapp
conteneur, pas dans celui- nginx
ci.