今回はLaravelの環境構築をやっていきます。 今回の投稿は前回・前々回の投稿の続きとなります。

前々回 開発環境を構築する【Docker+Nginx+Php】 前回 開発環境を構築する【Docker+Nginx+Php+MySQL】

環境 Mac(intel) Catalina 10.15.7 Docker version 20.10.8

project
    ├── docker
    │   ├── mysql
    │   │   ├── data
    │   │   └── my.cnf
    │   ├── php
    │   │   ├── php.ini
    │   │   └── Dockerfile
    │   └── nginx
    │       └── default.conf
    ├── source
    │   
    └── docker-compose.yml
  • sourceディレクトリの中は空にしておきます。この中にLaravelのファイル郡が生成されます。

①docker/php/Dockerfileの修正

FROM php:7.4.9-fpm

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

# 修正箇所
RUN apt update \
  && apt install -y default-mysql-client zlib1g-dev libzip-dev unzip \
  && docker-php-ext-install pdo_mysql zip

# 追記箇所
RUN curl -sS https://getcomposer.org/installer | php \
  && mv composer.phar /usr/local/bin/composer \
  && composer self-update

WORKDIR /var/www

説明
# Laravelをインストールするときに必要なツールをインストールする
RUN apt update \
  && apt install -y default-mysql-client zlib1g-dev libzip-dev unzip \
  && docker-php-ext-install pdo_mysql zip
  • Laravelのインストール時にzipとunzipが必要となる。
  • zipを使用するにはzlib1g-devとlibzip-devが必要なのでこれもインストールします。
# composerをインストールする(Laravelをcomposerを使ってインストールするため)
RUN curl -sS https://getcomposer.org/installer | php \
  && mv composer.phar /usr/local/bin/composer \
  && composer self-update
  • composerをダウンロードして、パスの通っているディレクトリに移動させています。

②Nginxのconfの修正

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
        
    # 修正箇所
    root /var/www/public;

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

    location ~ \.php$ {
        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;
    }
}

修正箇所は、ここだけ。

root /var/www/public;

http://localhost にアクセスしたときにLaravelのトップページが表示されるように変更 ※変更しなければ、http://localhost/pulbic にアクセスするとLaravelのトップページが表示される。


③docker composeでコンテナを起動させる。

# projectディレクトリに移動
cd project

# コンテナを起動、オプションの-dは、バックグラウンドで起動するという意味、--buildはDockerfileに基づき、最初からイメージをつくるということ
docker compose up --build -d

④正常に起動しているかを確認する

# コンテナの起動を確認
docker compose ps

# 次のように4つのコンテナがつくられ、STATUSがrunningになっていれば正常に起動している
nginx-php-mysql-phpmyadmin_mysql_1        "docker-entrypoint.s…"   mysql               running             3306/tcp, 33060/tcp
nginx-php-mysql-phpmyadmin_nginx_1        "/docker-entrypoint.…"   nginx               running             0.0.0.0:80->80/tcp, :::80->80/tcp
nginx-php-mysql-phpmyadmin_php_1          "docker-php-entrypoi…"   php                 running             9000/tcp
nginx-php-mysql-phpmyadmin_phpmyadmin_1   "/docker-entrypoint.…"   phpmyadmin          running             0.0.0.0:8080->80/tcp, :::8080->80/tcp

⑤Laravelをインストールする

docker compose exec php composer create-project --prefer-dist laravel/laravel ./ "8.*"
  • phpコンテナ内でcomposerコマンドを実行しています。(docker compose exec php でphpのコンテナ内に接続して、composerコマンドを実行しているイメージです。)
  • Laravelのバージョン8をインストールしています。
  • project/sourceの中にLaravelのファイル群が生成される。

⑥Laravelの動作確認

ブラウザ(Google chromeなど)で http://localhost にアクセスして、次のような画面が表示されればOK laravel_top.jpg


⑦Laravelの設定

.envの設定

# DBにmysqlを使用する
DB_CONNECTION=mysql

# ホスト名はコンテナ名(今回はmysql)
DB_HOST=mysql

# ポートはデフォルトの3306
DB_PORT=3306

# データベース名(今回はphp_db)
DB_DATABASE=php_db

# ユーザー名(今回はphper)
DB_USERNAME=phper

# パスワード(今回はpassword)
DB_PASSWORD=password
  • MySQLへの接続設定。
  • docker-compose.ymlのMySQLのコンテナを定義した環境変数と同じ。

config/app.php

# 変更
'timezone' => 'Asia/Tokyo',

# 変更
'locale' => 'ja',
  • タイムゾーンと言語の設定をします

その他

php のコンテナ内でコマンドを実行させるときは以下のように実行します。

docker compose exec php php artisan migrate

docker compose exec php でphpのコンテナ内に接続 php artisan migrate でphp artisan migrateを実行

以上でLaravelの環境構築ができました。