Я намагаюся налаштувати php webapp за допомогою docker. Ідея полягає у тому, щоб запустити додаток за php-fpm
допомогою окремого контейнера та мати інший контейнер, який запускатиме nginx. Ідея цієї установки полягає в тому, щоб використовувати той самий контейнер nginx для проксі-запитів інших веб-сайтів, які вже працюють на тій же машині. Проблема полягає в тому, що я не можу отримати nginx
належну обробку статичних файлів (js, css тощо), як і запити до них fpm
.
Ось як виглядає файлова система:
/
├── Makefile
├── config
│ └── webapp.config
└── webapp
└── web
├── index.php
└── static.js
Я запускаю цілу річ, використовуючи такий, Makefile
який виглядає приблизно так (не зацікавлений у 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
Ось так config/webapp.conf
виглядає мій .
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;
}
}
Будь-яка дія, яку потрібно обробити за допомогою цього index.php
файлу, буде працювати. Однак статичні файли не подаватимуться, що призводить до неприємних 404
помилок (оскільки у php webapp насправді не налаштовані маршрути для них). Я вважаю, що nginx намагається завантажити ті з власної файлової системи контейнерів, коли вони фактично знаходяться в webapp
контейнері, не виходячи з ладу @webapp
.
Чи є спосіб, який я можу налаштувати nginx
на обслуговування тих файлів, які знаходяться в іншому контейнері?
nginx
файли запитів у програмі php, я готую fpm
це зробити, і мені потрібно nginx
отримати доступ до статичних файлів, які не є php.
webapp
контейнері, а не в nginx
одному.