nginx 403 Запрещено в laravel проекте с docker - PullRequest
1 голос
/ 20 февраля 2020

Когда я запускаю de Project с php artisan serve все работает нормально, но когда я запускаю свой проект с docker-compose up -d, возникает ошибка: 403 Forbidden nginx / 1.10.3

Nginx файл по умолчанию:

    listen [::]:80;
    listen 80;

    root /var/www/html/public;

    index index.html index.htm index.php;

    server_name {{getenv "NGINX_SERVER_NAME"}};

    server_tokens off;

    charset utf-8;

    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt  { log_not_found off; access_log off; }

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/usr/local/var/run/php-fpm.sock;
    }

    error_page 404 /index.php;

    location ~ /\.ht {
        deny all;
    }

    add_header X-Served-By Bitpress.io;
    include h5bp/basic.conf;
}

и вот мой docker -композит Файл

docker -compose.yml

version: "3"
networks:
  app-tier:
    driver: bridge

services:
  app:
    image: test
    container_name: site
    build:
      context: .
      dockerfile: docker/Dockerfile
    networks:
      - app-tier
    env_file:
      - .docker.env
    ports:
      - 5050:80
    volumes:
      - .:/var/www/html
    environment:
      APP_ENV: local
      CONTAINER_ROLE: app

  scheduler:
    image: test
    container_name: scheduler
    depends_on:
      - app
    env_file:
      - .docker.env
    volumes:
      - .:/var/www/html
    environment:
      CONTAINER_ROLE: scheduler

  queue:
    image: test
    container_name: queue
    depends_on:
      - app
    env_file:
      - .docker.env
    volumes:
      - .:/var/www/html
    environment:
      CONTAINER_ROLE: queue

Я видел, что разрешения от каталогов root. Я попытался изменить его с помощью команды RUN chown -R www-data:www-data /var/www/html, но он не работает.

1 Ответ

0 голосов
/ 21 февраля 2020

Я просто обновляю то, что у вас есть, но не решу на 100% ваши проблемы, некоторые вещи тоже не будут выполнены, но без всей информации я не смогу сделать больше. Вам может потребоваться добавить php -fpm в ваш docker -compose.yml

nginx .conf

server {
    listen [::]:80;
    listen 80;

    # will be remove if you run everything inside container
    root /var/www/html/public;

    # will be remove if you run everything inside container
    index index.html index.htm index.php;

    server_name {{getenv "NGINX_SERVER_NAME"}};

    server_tokens off;

    charset utf-8;

    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt  { log_not_found off; access_log off; }

    # will be remove
    # location / {
    #     try_files $uri $uri/ /index.php$is_args$args;
    # }

    # Add this, now nginx only redirect request to expose socket from docker
    location / {
        proxy_pass          http://localhost:5050
        proxy_ser_header    X-Served-By Bitpress.io;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/usr/local/var/run/php-fpm.sock;
    }

    # will be remove if you run everything inside container
    error_page 404 /index.php;

    location ~ /\.ht {
        deny all;
    }

    # will be remove if you run everything inside container
    add_header X-Served-By Bitpress.io;

    include h5bp/basic.conf;
}

docker -compose.yml

version: "3"

networks:
  app-tier:
    driver: bridge

services:
  app:
    image: test
    container_name: site
    build:
      context: .
      dockerfile: docker/Dockerfile
    networks:
      - app-tier
    env_file:
      - .docker.env
    ports:
      - 5050:80
    volumes:
      - .:/var/www/html
      # - /absolute/path/better:/var/www/html
    environment:
      APP_ENV: local
      CONTAINER_ROLE: app

  scheduler:
    image: test
    container_name: scheduler
    networks:       # <-- add thisadd this
      - app-tier    # <-- add thisadd this
    depends_on:
      - app
    env_file:
      - .docker.env
    volumes:
      - .:/var/www/html
      # - /absolute/path/better:/var/www/html
    environment:
      CONTAINER_ROLE: scheduler

  queue:
    image: test
    container_name: queue
    networks:       # <-- add thisadd this
      - app-tier    # <-- add thisadd this
    depends_on:
      - app
    env_file:
      - .docker.env
    volumes:
      - .:/var/www/html
      # - /absolute/path/better:/var/www/html
    environment:
      CONTAINER_ROLE: queue

У вас могут быть проблемы между env_file: и CONTAINER_ROLE, которые имеют приоритет: ваши 3 контейнера разделяют позор .docker.env, это могут быть проблемы. может быть хорошей идеей иметь:

.docker.app.env
.docker.scheduler.env
.docker.queue.env
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...