質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

2436閲覧

Dockerでnginxの405エラーが発生する laravelプロジェクト

maxmm

総合スコア54

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/06/29 14:14

Dockerを使ってnginx上でPHP実行環境を構築し、Laravel新規プロジェクト作成を行いたいです。

laravelのプロジェクト作成自体は成功しましたが、localhostにアクセスすると nginxの404 Not Foundが発生します。

調べてもわからず限界だったので質問します。よろしくおねがいします。

期待値

laravelのデモ画面を表示すること

構成

project
├ docker-compose.yml
├ docker
│  ├ php
│  │  ├ php.ini
│  │  └ Dockerfile
│  └ nginx
│    └ default.conf
└ server
server内にlaravelプロジェクトが入っています。

実際のソース

//docker-compose.yml version: '3' services: php: container_name: php build: ./docker/php volumes: - ./server:/var/www nginx: image: nginx container_name: nginx ports: - 80:80 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: docker MYSQL_PASSWORD: docker 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: - 3306:3306

Dockerfile

1FROM php:7.2-fpm 2COPY php.ini /usr/local/etc/php/ 3 4RUN apt-get update \ 5 && apt-get install -y zlib1g-dev mariadb-client \ 6 && docker-php-ext-install zip pdo_mysql 7 8#Composer install 9COPY --from=composer /usr/bin/composer /usr/bin/composer 10 11ENV COMPOSER_ALLOW_SUPERUSER 1 12 13ENV COMPOSER_HOME /composer 14 15ENV PATH $PATH:/composer/vendor/bin 16 17 18WORKDIR /var/www 19 20RUN composer global require "laravel/installer"
//default.conf server { listen 80; index index.php index.html; root /var/www/public; location / { root /var/www/public; index index.html index.php; try_files $uri $uri/ /index.php$query_string; } location ~ .php$ { try_files $uri =404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }

実行したコマンド

$ docker-compose up -d $ docker-compose exec php bash $ composer create-project laravel/laravel

試したこと

  • Not Foundなので、/var/www/public にプロジェクトを作成

→403 Forbiddenエラー

# ls -ld /var/www/public/project/ drwxr-xr-x 26 root root 832 Jun 29 14:05 /var/www/public/project/ //実行権限あり。ルートディレクトリも実行権限あり。

参考にしたサイト

https://qiita.com/A-Kira/items/1c55ef689c0f91420e81

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

$ composer create-project laravel/laravel

を実行した場合、コンテナ内の /var/www/laravel このディレクトリにLaravelプロジェクトがインストールされます。
default.conf/var/www/laravel/public と変更してビルドしてイメージを再生成する必要があります。

もしくは、

$ composer create-project laravel/laravel .

とするとカレントディレクトリに対してLaravelプロジェクトがインストールが行われます。

これ以降は本題とは関係ないですが、補足します。

default.conf に関しての補足です。

公式から推奨設定がありますのでこちらをご参考にすることを推奨します。
https://readouble.com/laravel/7.x/ja/deployment.html

docker/php/Dockerfile に関しての補足です。

COPY php.ini /usr/local/etc/php/

php.ini は変更がかかりやすいのでCOPY命令はなるべく後に実行されることを推奨します。
一番初めにしてしまうとキャッシュ効率が良くありません。


RUN apt-get update \ && apt-get install -y zlib1g-dev mariadb-client \ && docker-php-ext-install zip pdo_mysql

Laravelのサーバ要件は以下の要件を満たす必要があります。
https://readouble.com/laravel/7.x/ja/installation.html

PHP >= 7.2.5 BCMath PHP拡張 Ctype PHP拡張 Fileinfo PHP extension JSON PHP拡張 Mbstring PHP拡張 OpenSSL PHP拡張 PDO PHP拡張 Tokenizer PHP拡張 XML PHP拡張

デフォルトだとBCMathのPHP拡張ライブラリが足りないので追加して上げてください。
また、 mariadb-client は必要ない気がしてます。

&& docker-php-ext-install zip pdo_mysql bcmath

ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /composer ENV PATH $PATH:/composer/vendor/bin

ENV命令が実行されるたびにレイヤーが作成されてますので、下記のようにワンライナーで実行するとレイヤー数を節約できます。

ENV COMPOSER_ALLOW_SUPERUSER=1 \ COMPOSER_HOME=/composer \ PATH=$PATH:/composer/vendor/bin

RUN composer global require "laravel/installer"

せっかくLaravelインストーラを導入していますが、最新のLaravelインストーラはPHP7.3以降のバージョンしか対応しておりません。
また、PHP7.2はあと4ヶ月ほどでセキュリティサポートが切れてしまうので特に理由がない場合は最新版の7.4系をご利用されることを推奨致します。

投稿2020/06/29 17:30

編集2020/06/29 17:40
ucan-lab

総合スコア888

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maxmm

2020/06/29 22:47

ありがとうございます。Laravelのホーム画面を表示することができました。 ディレクトリ構成を理解していればわかったことなのでnginxも含めて根本的に勉強をし直したいと思います。 また、細かい点の指摘もしていただきありがとうございます。参考にし、修正させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問