PHPフレームワークLaravelでWEBシステム開発するためのDockerによる開発環境Laradockを使ってみる。
For Windows。
Laradock v10、Laravel7でのWEB開発環境構築は「LaradockでLaravel7開発環境」へ!
目次
必要なもの
docker
docker-compose
git
構築環境
Alpine Linux(Docker標準)
Nginx
MySQL5.7
PHP7
phpMyAdmin
開発ディレクトリ構成
C:\laravel ┠laradock ┠project1 ┠project2 ┠・・・
Laradockインストール
PS C:\> mkdir laravel
PS C:\> cd laravel
# Laradockをクローンして環境設定
PS C:\laravel> git clone https://github.com/laradock/laradock.git
PS C:\laravel> cd laradock
# Laradock環境設定ファイル作成
PS C:\laravel\laradock> cp env-example .env
C:\laravel\laradock\.env
DATA_PATH_HOST=.laradock/data
MYSQL_VERSION=5.7
※C:\laravel\laradock\data をMySQLのデータディレクトリに設定
Laradock起動
PS C:\laravel\laradock> docker-compose up -d workspace mysql nginx phpmyadmin
Laradock v10.0 から起動時に
ERROR: for phpmyadmin Cannot start service phpmyadmin:
driver failed programming external connectivity on endpoint laradock_phpmyadmin_1 ・・・:
Bind for 0.0.0.0:8080 failed: port is already allocated
などと8080番ポートがすでに割り当てられている的なエラーが出る。
これはWORKSPACEのコンテナが8080番を使用しているので.envファイルでこのポート番号を変更することで対応することにする。
WORKSPACE_VUE_CLI_SERVE_HOST_PORT=8080
↓
WORKSPACE_VUE_CLI_SERVE_HOST_PORT=8088
※初回起動時はイメージを作成するためすっごい時間がかかる。
※DockerでCドライブをShareしておかないとエラーに。。。
※エラーが出たら
・イメージ再構築(–buildオプションを付けて実行)
・Dockerの再起動
のどちらかで直ることが多い。
PS C:\laravel\laradock> docker-compose ps
指定されたパスが見つかりません。
Name Command State Ports
---------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp, 2376/tcp
laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
laradock_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_phpmyadmin_1 /docker-entrypoint.sh apac ... Up 0.0.0.0:8080->80/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
http://localhost:8080 でphpMyAdminのログイン画面が表示される。
サーバ:mysql
ユーザ名:root
パスワード:root
でログインできたらOK!
Laravelプロジェクト作成&設定
Laravelプロジェクト作成
例としてproject1というプロジェクトを作成します。
# BashでLaradockのworkspaceにアクセス
PS C:\laravel\laradock> docker-compose exec workspace bash
# プロジェクト作成
root@0a4312279de6:/var/www# composer create-project laravel/laravel project1
laradockの環境設定ファイル.envにLaravelプロジェクトを設定
C:\laravel\laradock\.env
APP_CODE_PATH_HOST=../
↓
APP_CODE_PATH_HOST=../project1
laradock再起動
PS C:\laravel\laradock> docker-compose down
PS C:\laravel\laradock> docker-compose up -d workspace mysql nginx phpmyadmin
http://localhost/ にアクセスしてLaravelのデモ画面が表示されたらOK!
★Laradockの環境設定ファイル.envを変更することでプロジェクトの切り替えができるのね!
同時に起動はできないけど。
タイムゾーンとロケールの設定
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
エラーメッセージ日本語化
PS C:\laravel\laradock> docker-compose exec workspace bash
root@0a4312279de6:/var/www# composer require laravel-ja/comja5
root@0a4312279de6:/var/www# composer update
root@0a4312279de6:/var/www# vendor/bin/comja5 -a
# 終了
root@0a4312279de6:/var/www# exit
※resources/lang/jaディレクトリが生成される。
データベースとメール(Gmail)を設定
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=project1
DB_USERNAME=root
DB_PASSWORD=root
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=********@gmail.com
MAIL_PASSWORD=xxxxxxxx
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=********@gmail.com
MAIL_FROM_NAME="Project1"
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'mysql'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'project1'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', 'root'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
補足:Windows起動時にDocker for Windowsの自動起動を停止
OS起動時に自動的にDocker for Windowsが立ち上がる。
設定で「Start Docker Desktop when you log in」のチェックを外したのにな~
と思っていたらWindowsのスタートアップに登録されてた。
タスクバーを右クリック
>タスクマネージャー
>スタートアップ[タブ]
>Docker Desktopを右クリックして「無効化」
補足:複数サイトを同時表示したい
Laradock環境設定ファイル.envのAPP_CODE_PATH_HOSTでhttp://localhost/で表示するプロジェクトを切り替えることにしたが、複数のプロジェクトを同時に利用したい。
【例】
project1をhttp://project1.local
project2をhttp://project2.local
でそれぞれ表示できるように設定します。
APP_CODE_PATH_HOST
APP_CODE_PATH_HOST=../
※元に戻す
Nginxの設定
laradock/nginx/sites/laravel.conf.example をコピーして
laradock/nginx/sites/project1.conf
laradock/nginx/sites/project2.conf
を作成し各ファイルを以下のように変更。
server_name laravel.test
root /var/www/laravel/public
↓
project1.conf
server_name project1.local
root /var/www/project1/public
project2.conf
server_name project2.local
root /var/www/project2/public
hostsファイルに追記
Windows10なら
C:\Windows\System32\drivers\etc\hosts
127.0.0.1 project1.local
127.0.0.1 project2.local
起動
PS C:\laravel\laradock> docker-compose up -d workspace mysql nginx phpmyadmin
※workspaceはAPP_CODE_PATH_HOSTのパスになるのでコマンド実行時には注意!
特に複数サイトを同時表示が必要な場合だけにしたほうが楽ね。