在我的项目中,我需要构建同一应用程序的多个变体。因此我有这个docker-compose.yml
:
version: '3.7'
services:
moodle_alpine_fpm_base:
build:
context: ../..
dockerfile: dockerfiles/fpm_alpine/Dockerfile_base
image: ellakcy/moodle:alpine_fpm_base
nginx:
image: nginx:alpine
ports:
- "7870:7870"
- "7871:7871"
- "7872:7872"
volumes:
- '../../conf/nginx/build/nginx_latest.conf:/etc/nginx/nginx.conf:ro'
- "mysql-www:/var/www/html/mysql"
- "mysql-data:/var/moodledata/mysql"
- "psql-www:/var/www/html/psql"
- "psql-data:/var/moodledata/psql"
- "psql-www:/var/www/html/mariadb"
- "psql-data:/var/moodledata/mariadb"
links:
- 'moodle_alpine_fpm_mysql'
- 'moodle_alpine_fpm_mariadb'
- 'moodle_alpine_fpm_psql'
#Mysql variant
moodle_mysql_alpine_db:
image: mysql:5.7
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
MYSQL_ONETIME_PASSWORD: "yes"
MYSQL_DATABASE: "${MOODLE_DB_NAME}"
MYSQL_USER: '${MOODLE_MYSQL_USER}'
MYSQL_PASSWORD: '${MOODLE_MYSQL_PASSWORD}'
moodle_alpine_fpm_mysql:
build:
context: ../..
dockerfile: dockerfiles/fpm_alpine/Dockerfile_mysql
image: ellakcy/moodle:mysql_maria_fpm_alpine
links:
- "moodle_mysql_alpine_db:moodle_db"
- "moodle_alpine_fpm_base"
volumes:
- "mysql-www:/var/www/html"
- "mysql-data:/var/moodledata"
environment:
MOODLE_DB_HOST: "moodle_mysql_alpine_db"
MOODLE_DB_NAME: "${MOODLE_DB_NAME}"
MOODLE_DB_USER: '${MOODLE_MYSQL_USER}'
MOODLE_DB_PASSWORD: "${MOODLE_MYSQL_PASSWORD}"
MOODLE_ADMIN: "${MOODLE_ADMIN}"
MOODLE_ADMIN_PASSWORD: "${MOODLE_ADMIN_PASSWORD}"
MOODLE_URL: "http://0.0.0.0:7870"
#Mariadb for demοnstration
moodle_mariadb_alpine_db:
image: mariadb:10.2
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
MYSQL_ONETIME_PASSWORD: "yes"
MYSQL_DATABASE: "${MOODLE_DB_NAME}"
MYSQL_USER: '${MOODLE_MYSQL_USER}'
MYSQL_PASSWORD: '${MOODLE_MYSQL_PASSWORD}'
moodle_alpine_fpm_mariadb:
image: ellakcy/moodle:mysql_maria_fpm_alpine
links:
- "moodle_mariadb_alpine_db:moodle_db"
- "moodle_alpine_fpm_base"
volumes:
- "mariadb-www:/var/www/html"
- "mariadb-data:/var/moodledata"
environment:
MOODLE_DB_HOST: "moodle_mariadb_alpine_db"
MOODLE_DB_NAME: "${MOODLE_DB_NAME}"
MOODLE_DB_USER: '${MOODLE_MYSQL_USER}'
MOODLE_DB_PASSWORD: "${MOODLE_MYSQL_PASSWORD}"
MOODLE_ADMIN: "${MOODLE_ADMIN}"
MOODLE_ADMIN_PASSWORD: "${MOODLE_ADMIN_PASSWORD}"
MOODLE_URL: "http://0.0.0.0:7871"
#Postgresql
moodle_psql_alpine_db:
image: postgres
environment:
POSTGRES_DB: "${MOODLE_DB_NAME}"
POSTGRES_USER: '${MOODLE_MYSQL_USER}'
POSTGRES_PASSWORD: '${MOODLE_MYSQL_PASSWORD}'
moodle_alpine_fpm_psql:
build:
context: ../..
dockerfile: dockerfiles/fpm_alpine/Dockerfile_postgresql
image: ellakcy/moodle:postgresql_fpm_alpine
links:
- "moodle_psql_alpine_db:moodle_db"
- "moodle_alpine_fpm_base"
volumes:
- "psql-www:/var/www/html"
- "psql-data:/var/moodledata"
environment:
MOODLE_DB_HOST: "moodle_psql_alpine_db"
MOODLE_DB_NAME: "${MOODLE_DB_NAME}"
MOODLE_DB_USER: '${MOODLE_MYSQL_USER}'
MOODLE_DB_PASSWORD: "${MOODLE_MYSQL_PASSWORD}"
MOODLE_ADMIN: "${MOODLE_ADMIN}"
MOODLE_ADMIN_PASSWORD: "${MOODLE_ADMIN_PASSWORD}"
MOODLE_URL: "http://0.0.0.0:7072"
volumes:
mariadb-www:
mariadb-data:
mysql-www:
mysql-data:
psql-www:
psql-data:
在我nginx.conf
有以下设置:
events {
worker_connections 768;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
charset utf-8;
gzip on;
gzip_disable "msie6";
client_max_body_size 10000M;
server {
listen 7870;
server_name _;
proxy_redirect off;
root /var/www/html/mysql;
index index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#fastcgi_index index.php;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param DOCUMENT_ROOT /var/www/html;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass moodle_alpine_fpm_mysql:9000;
}
location /dataroot/ {
internal;
alias /var/moodledata/mysql/;
}
}
server {
listen 7871;
server_name _;
proxy_redirect off;
root /var/www/html/mariadb;
index index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#fastcgi_index index.php;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param DOCUMENT_ROOT /var/www/html;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass moodle_alpine_fpm_mariadb:9000;
}
location /dataroot/ {
internal;
alias /var/moodledata/mariadb/; # ensure the path ends with /
}
}
server {
listen 7872;
server_name _;
proxy_redirect off;
root /var/www/html/psql;
index index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#fastcgi_index index.php;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param DOCUMENT_ROOT /var/www/html;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass moodle_alpine_fpm_psql:9000;
}
location /dataroot/ {
internal;
alias /var/moodledata/psql/; # ensure the path ends with /
}
}
}
正如你可以看到我的每个容器上,除了数据库的人与nginx
一个php
文件位于/var/www/data
,而里面的nginx
一个是位于下的子目录/var/www/html
。
我这样做的原因是我为https://hub.docker.com/r/ellakcy/moodle 中moodle
所见创建了一个构建存储库。因为我的计算机在 CPU 上的运行速度有些慢,因此我希望在构建每个变体时拥有更少的图像。所以我认为如果我有一个单一的 nginx 图像来为所有变体提供服务以便发布它们会更容易。php-fpm
在我的尝试中,虽然我收到以下错误消息:
nginx_1 | 2019/07/21 19:55:46 [error] 6#6: *6 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 172.22.0.1, server: _, request: "GET / HTTP/1.1", upstream: "fastcgi://172.22.0.5:9000", host: "0.0.0.0:7870"
所以我想知道如何告诉 fastcgi 不要用另一个路径“映射”路径?
你的配置应该是:
events {
worker_connections 768;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
charset utf-8;
gzip on;
gzip_disable "msie6";
client_max_body_size 10000M;
server {
listen 7870;
server_name _;
proxy_redirect off;
root /var/www/html/mysql;
index index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#fastcgi_index index.php;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param DOCUMENT_ROOT /var/www/html;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
fastcgi_pass moodle_alpine_fpm_mysql:9000;
}
location /dataroot/ {
internal;
alias /var/moodledata/mysql/;
}
}
server {
listen 7871;
server_name _;
proxy_redirect off;
root /var/www/html/mariadb;
index index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#fastcgi_index index.php;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param DOCUMENT_ROOT /var/www/html/;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
fastcgi_pass moodle_alpine_fpm_mariadb:9000;
}
location /dataroot/ {
internal;
alias /var/moodledata/mariadb/; # ensure the path ends with /
}
}
server {
listen 7872;
server_name _;
proxy_redirect off;
root /var/www/html/psql;
index index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#fastcgi_index index.php;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param DOCUMENT_ROOT /var/www/html/;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
fastcgi_pass moodle_alpine_fpm_psql:9000;
}
location /dataroot/ {
internal;
alias /var/moodledata/psql/; # ensure the path ends with /
}
}
}
如您所见,我们不使用$dataroot
变量而是直接指定路径。请记住,转发服务器中的路径应以/
以下配置为INVALID结尾:
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#fastcgi_index index.php;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param DOCUMENT_ROOT /var/www/html/;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_pass moodle_alpine_fpm_psql:9000;
}
相反,您应该使用:
D*:
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#fastcgi_index index.php;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param DOCUMENT_ROOT /var/www/html/;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
fastcgi_pass moodle_alpine_fpm_psql:9000;
}
注意以下区别:
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句