Docker kullanarak bir php webapp yapılandırmaya çalışıyorum. Fikir, uygulamayı php-fpm
bağımsız bir kapsayıcıda kullanarak çalıştırmak ve nginx çalıştıracak başka bir kapsayıcıya sahip olmaktır. Bu kurulumun amacı, aynı makinede çalışan diğer web uygulamalarına yapılan istekleri proxy yapmak için aynı nginx kapsayıcısını kullanmaktır. Sorun, bu nginx
istekleri devam tutmak gibi düzgün statik dosyaları (js, css, vb) işlemek için alamıyorum olmasıdır fpm
.
Dosya sistemi şöyle görünür:
/
├── Makefile
├── config
│ └── webapp.config
└── webapp
└── web
├── index.php
└── static.js
Ben böyle bir şey Makefile
(bununla ilgilenmiyorum docker-compose
) kullanarak her şeyi çalıştırıyorum :
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
İşte böyle config/webapp.conf
görünüyor.
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;
}
}
Bu index.php
dosyayı kullanarak işlenmesi gereken her eylem çalışır. Ancak, statik dosyalar sunulmaz, bu da kötü 404
hatalara neden olur (php webapp'ın bunlar için yapılandırılmış yolları olmadığından). Ben nginx aslında webapp
kap içinde olduklarında, kendi kapsayıcı dosya sisteminden yüklemeye çalışır inanıyorum geri @webapp
.
nginx
Başka bir kapsayıcıda bulunan dosyaları sunmak için yapılandırabileceğim bir yol var mı ?
nginx
php uygulaması içinde istek dosyaları fpm
yapmıyorum, bunu yapmak için proxy ediyorum ve nginx
statik php olmayan dosyalara erişmeniz gerekiyor .
webapp
kaba değil, birime monte edilirler nginx
.