LaravelはPHPのWebフレームワークの1つでここ数年で人気が高くなってます。私も前職では大変お世話になり多くのシステム開発に利用しました。今回は、Laravelを開発する環境をDockerを使って準備する方法を記事にします。
目次
Laravelとは?
Laravelは、オープンソースのPHPで書かれたWebフルスタックフレームワークです。Artisanコマンドツールを利用する事で「ログイン機能」「データベースのマイグレーション」「コマンド」など自動生成する事ができます。設計も簡易になっているため習得しやすいフレームワークになります。
Dockerを使うメリットは?
Docker社が開発しているコンテナ型の仮想化環境を構築・実行するためのプラットフォームになります。
Dockerを使った場合下記のメリットがあります。
- 開発PCの環境を変更しないで済む。
- コンテナ単位でPHPやMySQLバージョンを変更できる。
- Dockerファイル共有で複数人が同じ環境で開発できる。
- プロジェクトを終了後、コンテナ破棄でPCをクリアにできる。
用意される開発環境
2020年4月現在、構築手順をする事で下記開発環境が用意されます。
ソフト | バージョン |
---|---|
Nginx | 1.17.9 |
PHP | 7.2.29 |
MySQL | 5.7 |
Laravel | 7.5.2 |
※作業手順「4.Laravelインストール」にてバージョンを変更する事ができます。
事前準備
開発環境にはDockerが必要なため事前に準備をお願いします。
2020年4月現在、Docker Desktop はバージョン2.2となっています。
開発環境の構築手順
1.開発ディレクトリ、ファイルの準備
開発環境を作成する用のディレクトリを準備して必要ファイルを作成します。下記ディレクトリ構成で準備を進めます。
【任意ディレクトリ】
└ docker-compose.yml
└ src
└ docker
└ db
└ nginx
└ default.conf
└ php
└ Dockerfile
└ php.ini
docker-compose.ymlについて
docker-compose.ymlはDockerコンテナの起動に関する設定等をYAMLにて記述したファイルになります。今回はDB, PHP, NGINXの3つのコンテナを準備します。
version: '3'
services:
php:
container_name: php
build: ./docker/php
volumes:
- ./src:/var/www
nginx:
image: nginx
container_name: nginx
ports:
- 80:80
volumes:
- ./src:/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
docker/nginx/default.confについて
default.confはNGINXコンテナを起動した際に設定されるファイルになります。
server {
listen 80;
index index.php index.html index.htm;
root /var/www/public;
location / {
index index.php index.html index.htm;
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/php/Dockerfileについて
Dockerfileはコンテナの構成情報を設定したファイルになります。今回PHPコンテナに対してバージョンや必要なライブラリを指定します。
FROM php:7.2-fpm
COPY php.ini /usr/local/etc/php/
RUN apt-get update \
&& apt-get install -y zlib1g-dev mariadb-client unzip \
&& docker-php-ext-install zip pdo_mysql
COPY --from=composer /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
WORKDIR /var/www
RUN composer global require "laravel/installer"
docker/php/php.iniについて
php.iniはPHPコンテナを起動した際に設定されるファイルになります。
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
1.開発ディレクトリ、ファイルの準備 (GitHub)
GitHubに上記環境を準備しました。下記コマンドを利用してください。
cd 【任意ディレクトリ】
git clone https://github.com/todatomohiro/laravel-dev.git
mv ./laravel-dev/* ./
※作業完了後、laravel-devディレクトリは破棄してください。
2.Dockerを起動
ターミナルを利用してdocker-composeコマンドを実行します。
任意ディレクトリまで移動はCDコマンドで移動してください。
cd 【任意ディレクトリ】
docker-compose up -d
3.PHPコンテナにbashで入る
LaravelのインストールをするためPHPコンテナに入ります。
下記コマンドでコンテナに入ることができます。
docker-compose exec php bash
4.Laravelインストール
PHPコンテナの中でLaravelのインストールを行います。
2020年4月現在、Laravel7.5がインストールされます。
[PHPコンテナ] laravel new
●Laravel5.5の場合
rm ./readme.txt
composer create-project "laravel/laravel=5.5.*" ./
●Laravel6の場合
rm ./readme.txt
composer create-project "laravel/laravel=6.*" ./
5.src/.envファイルの修正
Laravelのインストールを行うとsrcフォルダにLaravelが保存されます。src/.envをエディタで開いてデータベース接続設定を変更します。
ホストはDBコンテナを指定するため db-host とします。
DB_CONNECTION=mysql
DB_HOST=db-host
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=docker
DB_PASSWORD=docker
6.ブラウザで開くか確認
設定が正常にできていると http://localhost にてLaravelの起動画面が表示されます。1度アクセスして表示されるか確認ください。
その他操作
Artisanコマンドを利用
Artisanコマンドを利用する場合、PHPコンテナに入る必要があります。
下記コマンドで実行してください。
cd 【任意ディレクトリ】
# PHPコンテナに入る
docker-compose exec php bash
# PHPコンテナでartisanコマンドを実行
[PHPコンテナ] php artisan list
コンテナの停止・削除について
作成したコンテナの停止・破棄は下記コマンドにて対応できます。
# コンテナの停止
docker-compose stop
# コンテナの停止と削除
docker-compose down
# コンテナの停止&削除(コンテナ・ネットワーク・ボリューム)
docker-compose down -v
まとめ
Dockerを利用したLaravel開発環境の構築をまとめてみました。
LaravelはPHPフレームワークの中で簡単な部類に入りますが、用意されている機能が充実していて大変使いやすくなっています。これからフレームワークを覚える方は勉強も兼ねて是非使ってもらいたいと思います。