Проблемы с отделенным внешним интерфейсом и php-сервером в docker-compose - PullRequest
0 голосов
/ 07 сентября 2018

Я боролся с проблемой в среде docker-compose, где одностраничное приложение должно взаимодействовать с PHP API. Предпочтительно laravel.

Мой подход заключается в том, чтобы nginx действовал как обратный прокси для обоих.

Однако каждый раз, когда я пытаюсь перейти по маршруту / api, он говорит, что файл не найден. php-fpm действительно получает запрос, но он явно не может загрузить индекс, даже если он находится в указанной папке.

Мой docker-compose.yml выглядит следующим образом.

version: "3.1"

services:

    redis:
      image: redis:alpine
      container_name: apitest-redis

    postgres:
      image: postgres:9.6-alpine
      container_name: apitest-postgres
      working_dir: /application/api
      volumes:
        - ./api:/application/api
      environment:
        - POSTGRES_USER=myapiuser
        - POSTGRES_PASSWORD=2cr34m1ng#n4k3d
        - POSTGRES_DB=test

    webserver:
      image: nginx:alpine
      container_name: apitest-webserver
      working_dir: /application
      volumes:
          - ./client/dist:/application/dist
          - ./api:/application/api
          - ./docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
       - "8080:80"

    php-fpm:
      build: docker/php-fpm
      container_name: apitest-php-fpm
      working_dir: /application/api
      volumes:
        - ./api:/application/api
        - ./docker/php-fpm/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini

А мой nginx.conf выглядит так:

server {
    listen 80 default;

    client_max_body_size 108M;

    access_log /var/log/nginx/application.access.log;


    root /application;
    index index.html index.php;

    location / {
        root /application/dist;
        try_files $uri /index.html;
    }

    location /api {
        root /application/api/public;
        try_files $uri /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass apitest-php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        include fastcgi_params;
    }

}
...