Estoy tratando de configurar una aplicación web php usando docker. La idea es ejecutar la aplicación usando php-fpm
un contenedor independiente y tener otro contenedor que ejecute nginx. La idea para esta configuración es usar ese mismo contenedor nginx para enviar solicitudes de proxy a otras aplicaciones web que ya están trabajando en la misma máquina. El problema es que no puedo nginx
procesar correctamente los archivos estáticos (js, css, etc.), ya que las solicitudes a esos continúan fpm
.
Así es como se ve el sistema de archivos:
/
├── Makefile
├── config
│ └── webapp.config
└── webapp
└── web
├── index.php
└── static.js
Estoy ejecutando todo usando un Makefile
aspecto similar a este (no estoy interesado en docker-compose
esto):
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
Así es config/webapp.conf
como se ve mi .
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;
}
}
Cualquier acción que necesite procesarse usando ese index.php
archivo funcionará. Sin embargo, los archivos estáticos no se servirán, lo que provocará 404
errores desagradables (ya que la aplicación web php realmente no tiene rutas configuradas para esos). Creo que nginx intenta cargarlos desde su propio sistema de archivos contenedor, cuando realmente están en el webapp
contenedor, fallando nuevamente @webapp
.
¿Hay alguna forma de configurarlo nginx
para servir esos archivos que residen en otro contenedor?
nginx
archivos de solicitud dentro de la aplicación php, estoy prox fpm
para hacerlo y necesito nginx
acceder a archivos estáticos no php.
webapp
contenedor, no en el nginx
uno.