如何正确制作独立的 nginx 和 php-fpm 容器
How to make self-contained nginx and php-fpm containers properly
我有两个 docker-容器:nginx 和 php-fpm。
我想让它们独立(容器将在构建时从 git 克隆 repo)用于生产。但是在克隆 repo 之后我需要做一些初始的东西,比如项目文件夹中的 composer install
。我可以在 php-fpm 容器内完成,因为我在那里有 php。但是如何在 nginx 容器中准备代码呢?我没有 php 作曲家。
一切正常,当我将相同的初始化文件夹装入两个容器时。
也许我做错了什么,为 nginx+php-fpm 做自包含容器的最佳方法是什么?
现在我有这个 nginx-config:
server {
listen 80;
server_name localhost;
index index.php index.html;
# I need only /api/ path
location /api/ {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
root /var/www/public;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass api:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
FPM 服务器上应该只有 PHP 个文件。正如您之前提到的,您应该在该服务器上有 php 到 运行 composer 的 cli。你不应该在 nginx 服务器上需要任何 PHP 文件。 SCRIPT_FILENAME 将由 CGI 服务器解析,因此该位置不需要存在于 Web 代理上。如果您需要对 nginx 服务器进行配置更改,您可能想要使用更面向系统的东西,例如 Salt、Chef 或 Puppet。
location ~ \.php$ {
# This is the webserver root for static junk
root /var/www/public;
...
# Point this somewhere else if the docroot is in a different location on the FPM server.
fastcgi_param SCRIPT_FILENAME /home/php-fpm/wwwroot/$fastcgi_script_name;
}
我有两个 docker-容器:nginx 和 php-fpm。
我想让它们独立(容器将在构建时从 git 克隆 repo)用于生产。但是在克隆 repo 之后我需要做一些初始的东西,比如项目文件夹中的 composer install
。我可以在 php-fpm 容器内完成,因为我在那里有 php。但是如何在 nginx 容器中准备代码呢?我没有 php 作曲家。
一切正常,当我将相同的初始化文件夹装入两个容器时。
也许我做错了什么,为 nginx+php-fpm 做自包含容器的最佳方法是什么?
现在我有这个 nginx-config:
server {
listen 80;
server_name localhost;
index index.php index.html;
# I need only /api/ path
location /api/ {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
root /var/www/public;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass api:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
FPM 服务器上应该只有 PHP 个文件。正如您之前提到的,您应该在该服务器上有 php 到 运行 composer 的 cli。你不应该在 nginx 服务器上需要任何 PHP 文件。 SCRIPT_FILENAME 将由 CGI 服务器解析,因此该位置不需要存在于 Web 代理上。如果您需要对 nginx 服务器进行配置更改,您可能想要使用更面向系统的东西,例如 Salt、Chef 或 Puppet。
location ~ \.php$ {
# This is the webserver root for static junk
root /var/www/public;
...
# Point this somewhere else if the docroot is in a different location on the FPM server.
fastcgi_param SCRIPT_FILENAME /home/php-fpm/wwwroot/$fastcgi_script_name;
}