404 Не найдено при развертывании laravel, созданного с помощью докера, в производственной среде

Ошибка 404 возникает при доступе к указанному URL. Я развернул laravel, созданный с помощью докера, в производственной среде. Я подтвердил, что это работает локально. Я думаю, что спецификация URL-адреса странная. Локально URL-адрес использует localhost, а в производственной среде — приобретенный домен.

.env

APP_NAME=Laravel
APP_ENV=production
APP_DEBUG=false
APP_KEY=<<APP_KEY>>
APP_URL=<<my_domain>>

LOG_CHANNEL=stack

докер-compose.yml

version: '3'
services:
  php:
    container_name: php
    build: ./docker/php
    volumes:
      - ./server:/var/www

  nginx:
    image: nginx
    container_name: nginx
    ports:
      - 81:81
    volumes:
      - ./server:/var/www
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  db:
    image: mysql:5.7
    container_name: db-host
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: database
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./docker/db/data:/var/lib/mysql
      - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./docker/db/sql:/docker-entrypoint-initdb.d
    ports:
      - 3307:3307

default.conf

 server {
      listen 81;
        index index.php index.html;
        root /var/www/laravel/public;

        location / {
        root /var/www/laravel/public;
        index  index.html index.php;
        try_files $uri $uri/ /index.php$query_string;
        }

докер пс

CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                         NAMES
A        nginx                "nginx -g 'daemon of…"   3 hours ago         Up About an hour    80/tcp, 0.0.0.0:81->81/tcp                    nginx
B        mysql:5.7            "docker-entrypoint.s…"   3 hours ago         Up 2 hours          3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp   db-host
C        tsurikatsu_web_php   "docker-php-entrypoi…"   4 hours ago         Up 2 hours          9000/tcp                                      php

Я ожидаю, что показан проект laravel, но фактический результат - ошибка 404.

пожалуйста, помогите мне.

Я предполагаю, что APP_KEY и my_domain просто скрыты для целей вопроса. Каковы ваши конфигурации nginx, docker-compose.yml или любые другие команды docker, которые вы используете? Какой образ вы используете? Потребуется немного больше информации о фактической настройке, которая у вас там происходит.

Kārlis Ābele 19.06.2019 13:06

Спасибо за ваш ответ. Я добавил информацию по этому вопросу.

KATUO 19.06.2019 13:14

Можете ли вы также предоставить файл default.conf? Конечно, спрячьте конфиденциальную информацию раньше :) Я предполагаю, что вы используете какой-то экземпляр сервера (DO, EC2 или что-то еще) и вручную управляете производственным развертыванием? Судя по внешнему виду docker-compose.yml, все должно быть в порядке, поэтому вполне возможно, что есть проблемы в default.conf или, возможно, в самом экземпляре сервера...

Kārlis Ābele 19.06.2019 13:20

Спасибо за ваш ответ. Я использую сервер 「vultr」 с ОС Ubuntu 18.10 x64. Я добавил файл default.conf.

KATUO 19.06.2019 13:35

Вы указываете порт 81 при посещении вашего сайта или перенаправляете запросы с 80 на 81 с вашего сервера vultr?

Kārlis Ābele 19.06.2019 13:39

Извините за мой поздний ответ. Порт 81 указан nginx? и это nginx для переноса?

KATUO 20.06.2019 00:39
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
6
3 128
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из того, что я вижу в вашем файле docker-compose.yml, вы сопоставляете порт 81 вашего сервера с портом 81 контейнера nginx, что означает, что вы должны посетить свой сайт, указав порт 81, если вы не перенаправляете трафик с порта 80 на локальный хост :81.

Если вы не используете переадресацию прокси-сервера на своем vultr-сервере и ваш порт 80 ничем не зарезервирован, я предлагаю вам попробовать либо заменить сопоставление портов в службе nginx на 80:81

Если это невозможно (что-то уже использует порт 80 на вашем сервере), вам следует перенаправлять трафик с порта 80 на порт 81 всякий раз, когда запрашивается конкретное имя хоста.

Большое спасибо за очень вежливый комментарий. После удаления всех образов докера один раз и установки порта nginx для dokcer-compose.yml на 80:81 и выполнения docker-compose up -d «Ошибка запуска пользовательского прокси: прослушивание tcp 0.0.0.0:80: bind: я получил ошибка "адрес уже используется"

KATUO 22.06.2019 19:45

Я полагаю, что ваш сервер vultr использует порт 80. Вам нужно либо настроить переадресацию портов с помощью vultr, либо, если vultr на самом деле не нужен в вашей настройке, вы можете просто остановить службу, чтобы порт больше не был зарезервирован.

Kārlis Ābele 22.06.2019 22:58

[1] Я считаю, что ваш сервер vultr использует порт 80 → да [2] Я ввожу 「sudo lsof -i:80」 результат nginx 6692 root 6u IPv4 14717051 0t0 TCP *:http (LISTEN) nginx 6692 root 7u IPv6 14717052 0t0 TCP *:http (СЛУШАТЬ) nginx 6694 www-data 6u IPv4 14717051 0t0 TCP *:http (СЛУШАТЬ) nginx 6694 www-data 7u IPv6 14717052 0t0 TCP *:http (СЛУШАТЬ) Могу ли я убить все эти процессы?

KATUO 23.06.2019 05:29

Я не знаком с vultr, но что вам нужно сделать, так это в docker compose оставить сопоставление портов как 81:81, а затем использовать vultr в качестве прокси и перенаправлять запросы, поступающие на порт 80 вашего домена, на localhost: 81 (что, в свою очередь, будет перенаправить его в службу докеров)

Kārlis Ābele 23.06.2019 05:31

Каким-то образом после убийства всех 80 портовых процессов и выполнения docker-compose up -d он стал доступен в указанном домене. Я мог понять, что говорит Карлис Исбеле. Когда у меня будет время, я тоже хочу это сделать. Я очень благодарен вам.

KATUO 23.06.2019 05:54

Другие вопросы по теме