Dockerを使用したlaravel環境構築


前提

・ Dockerを使用してlaravelの環境構築を行いたい方
・ laravelの標準のログイン、管理画面も使用したい人
・ Dockerはインストール済み
・ 他コマンド実行に必要なものは必要に応じてインストールしてください

構成

laravelソースを格納するのフォルダ(名前は任意でOK)
  ├── docker-compose.yml
  ├── docker
  │   ├── php
  │   │    ├── Dockerfile
  │   │    └── php.ini
  │   └── nginx
  │        └── default.conf
  └── src
      └──  Laravelのプロジェクトファイル

docker-compose.ymlの中身

docker-compose.ymlは複数のコンテナを同時に動かすためのツールである、Docker Composeを利用するために使用するYMLファイルです

docker-compose.yml
version: '3'

services:
  php:
    build: ./docker/php
    volumes:
      - ./src:/var/www

  nginx:
    image: nginx
    ports:
      - 8000:8000
    volumes:
      - ./src:/var/www
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: mysqlDataBase(任意のデータベース名)
      MYSQL_USER: mysql(任意のデータベースのログインユーザー名)
      MYSQL_PASSWORD: mysql(任意のデータベースのログインパスワード)
      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

  node:
    image: node:12.13-alpine
    tty: true
    volumes:
      - ./src:/var/www
    working_dir: /var/www

Dockerfileの中身

DockerfileとはDocker上で動作させるコンテナの構成情報を記述するためのファイルです

FROM php:7.4-fpm-alpine

RUN docker-php-ext-install pdo pdo_mysql

php.iniの中身

php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

default.confの中身

default.confはngninxの設定情報を記述するためのファイルです

default.conf
server {
  listen 8000;
    index index.php index.html;
    root /var/www/Laravelのプロジェクト名/public;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
    }

  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;
  }
 }

環境構築の手順

はじめに任意の場所にlaravelのファイルを格納するフォルダをローカルに作成する

~/ $ mkdir laravelソースを格納するのフォルダ名

docker-compose.ymlファイルを作成して、中身は冒頭で紹介したdocker-compose.ymlの内容をコピペする

~/laravelソースを格納するのフォルダ名 $ touch docker-compose.yml

Dockerfileとphp.iniを作成して、中身は冒頭で紹介したそれぞれのファイルの内容をコピペする

~/laravelソースを格納するのフォルダ名 /docker/php $ touch Dockerfile
~/laravelソースを格納するのフォルダ名 /docker/php $ touch php.ini

defalt.confファイルを作成して、中身は冒頭で紹介したdefault.confの内容をコピペする

~/laravelソースを格納するのフォルダ名/nginx $ touch default.conf

docker-compose.ymlファイルがあるディレクトリ内で下記コマンドを実行してdockerを起動させる

~/laravelソースを格納するのフォルダ名 $ docker-compose up -d

Creating php                ... done
Creating db-host            ... done
Creating Laravelのプロジェクト名_node ... done
Creating nginx              ... done

phpのコンテナ内に入る

~/laravelソースを格納するのフォルダ名 $ docker-compose exec php bash

phpコンテナ内でLaravelプロジェクトを作成する

root@7eb4359bf51c:/var/www# laravel new Laravelプロジェクト名(任意)

Laravelのプロジェクトが入っているか確認する
バージョンが出力されればOKです

root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan --version
Laravel Framework 8.27.0

phpコンテナを抜ける

root@7eb4359bf51c:/var/www# exit

これでlaravelソースを格納するのフォルダ名/src内にLaravelのプロジェクトファイルが作成され、
http://localhost/ にアクセスするとlaravelのページが表示されます

MySQLの設定

MySQLコンテナに入る

~/laravelソースを格納するのフォルダ名 $ docker-compose exec db bash

MySQLコンテナ内でMySQLにログイン

root@630fbaf32806:/# mysql -u root -proot

今回のプロジェクトで使用するデータベースを作成する
データベース名はdocker-compose.ymlで指定した、MYSQL_DATABASEで作成します。
これを合わせないとデータベースを使用する際、エラーが発生します。

mysql> mysql> CREATE DATABASE mysqlDataBase(任意のデータベース名);

Query OK, 1 row affected (0.01 sec) 

Laravelのプロジェクトファイル内の.envファイルを下記に修正する

.env
DB_CONNECTION=mysql
DB_HOST=db # db(docker-compose.ymlに記載したDBのサービス名)
DB_PORT=3306
DB_DATABASE=mysqlDataBase(任意のデータベース名)
DB_USERNAME=mysql(任意のデータベースのログインユーザー名)
DB_PASSWORD=mysql(任意のデータベースのログインパスワード)

phpコンテナに入る

~/laravelソースを格納するのフォルダ名 $ docker-compose exec php bash

phpコンテナ内でマイグレーションを実行する

root@7eb4359bf51c:/var/www# cd Laravelプロジェクト名(任意)
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan migrate

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.06 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.04 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.02 seconds)

マイグレーションが無事に実行されれば成功です。
nodeコンテナに入る

~/laravelソースを格納するのフォルダ名 $ docker-compose exec node sh

/var/www

これでlaravelの環境構築は完了になります。

会員登録・ログイン機能追加

phpコンテナ内でパッケージのインストール

root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# composer require laravel/ui:3.* --dev

バージョンエラーが起きたら3.*の数字を変えて再度実施すればいける。

パッケージがインストールできたら、フロントエンドのスカフォールドをインストールします。

// 基本的なスカフォールドを生成
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan ui bootstrap
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan ui vue
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan ui react
 
// ログイン/ユーザー登録スカフォールドを生成 
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan ui bootstrap --auth
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan ui vue --auth
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan ui react --auth

これらはすべてきちんとインストールしてください。

完了後、http://localhost/ にアクセスするとヘッダーにログイン、会員登録のリンクが表示されます。
そこからアクセスすると各ページに飛びます。
デザインが当たってなかったら以下で解決できます。

Node.jsとNPMのインストール状況確認(なければインストールして下さい)
~/laravelソースを格納するのフォルダ名/src $ node -v
~/laravelソースを格納するのフォルダ名/src $ npm -v

Laravelをインストールすると、package.jsonがあり、PHPの代わりにNodeの依存パッケージが定義されている所が異なるので以下のコマンドで、依存パッケージをインストールしてください。

~/laravelソースを格納するのフォルダ名/src $ npm install

Mixの実行

Laravelに含まれるpackage.jsonファイル上のNPMスクリプトの一つをMixの実行で起動してください。
~/laravelソースを格納するのフォルダ名/src $ npm run dev

完了後、再度アクセスするとデザインがあたった状態になります。

管理画面構築

phpコンテナ内で以下実行

root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# composer require encore/laravel-admin

次にasset、configファイルを移動させます。
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"

最後に下記コマンドを実行することでインストールが完了です。
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan admin:install

http://localhost:8000/admin にアクセスすれば管理画面にアクセスできます。
ログイン画面が表示されればOKです!
初期ログイン情報はid,passwordともに「admin」で入れます。

以上で環境構築完了です。