如何正确制作独立的 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;
}