Ошибка 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.
пожалуйста, помогите мне.
Спасибо за ваш ответ. Я добавил информацию по этому вопросу.
Можете ли вы также предоставить файл default.conf? Конечно, спрячьте конфиденциальную информацию раньше :) Я предполагаю, что вы используете какой-то экземпляр сервера (DO, EC2 или что-то еще) и вручную управляете производственным развертыванием? Судя по внешнему виду docker-compose.yml, все должно быть в порядке, поэтому вполне возможно, что есть проблемы в default.conf или, возможно, в самом экземпляре сервера...
Спасибо за ваш ответ. Я использую сервер 「vultr」 с ОС Ubuntu 18.10 x64. Я добавил файл default.conf.
Вы указываете порт 81 при посещении вашего сайта или перенаправляете запросы с 80 на 81 с вашего сервера vultr?
Извините за мой поздний ответ. Порт 81 указан nginx? и это nginx для переноса?
Из того, что я вижу в вашем файле 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: я получил ошибка "адрес уже используется"
Я полагаю, что ваш сервер vultr использует порт 80. Вам нужно либо настроить переадресацию портов с помощью vultr, либо, если vultr на самом деле не нужен в вашей настройке, вы можете просто остановить службу, чтобы порт больше не был зарезервирован.
[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 (СЛУШАТЬ) Могу ли я убить все эти процессы?
Я не знаком с vultr, но что вам нужно сделать, так это в docker compose оставить сопоставление портов как 81:81, а затем использовать vultr в качестве прокси и перенаправлять запросы, поступающие на порт 80 вашего домена, на localhost: 81 (что, в свою очередь, будет перенаправить его в службу докеров)
Каким-то образом после убийства всех 80 портовых процессов и выполнения docker-compose up -d он стал доступен в указанном домене. Я мог понять, что говорит Карлис Исбеле. Когда у меня будет время, я тоже хочу это сделать. Я очень благодарен вам.
Я предполагаю, что APP_KEY и my_domain просто скрыты для целей вопроса. Каковы ваши конфигурации nginx, docker-compose.yml или любые другие команды docker, которые вы используете? Какой образ вы используете? Потребуется немного больше информации о фактической настройке, которая у вас там происходит.