Как правильно сделать автономные контейнеры nginx и php-fpm

У меня есть два докер-контейнера: nginx и php-fpm.

Я хочу сделать их автономными (контейнеры будут клонировать репозиторий из git при сборке) для производства. Но после клонирования репо мне нужно сделать некоторые начальные вещи, например 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;
    }
}

person nkuhta    schedule 09.10.2017    source источник


Ответы (1)


У вас должны быть только файлы PHP на сервере FPM. Как вы уже отмечали ранее, у вас должен быть php cli для запуска композитора на этом сервере. Вам не нужны файлы PHP на сервере nginx. SCRIPT_FILENAME будет разрешен сервером CGI, поэтому это местоположение не должно существовать на веб-прокси. Если вам нужно внести изменения в конфигурацию сервера 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;
}
person Alex Barker    schedule 09.10.2017
comment
Спасибо, ваш ответ помог мне. Начал с нуля, потом смог правильно настроить nginx и fpm, все работает. - person nkuhta; 10.10.2017