LaradockでLaravel7開発環境

Laravelも7になったしLaradockもv10になったのでWindowsでのWEB開発環境構築としてインストールと各種設定をPHP7.4へのアップグレードも含めてまとめておきます。なお、Dockerがインストールされていることが前提です。

Laradockのインストール

PS C:\> mkdir laravel7
PS C:\> cd laravel7
# Laradockをクローンして環境設定
PS C:\laravel7> git clone https://github.com/laradock/laradock.git

Laradockの設定

PS C:\laravel7> cd laradock
# Laradock環境設定ファイル作成
PS C:\laravel7\laradock> cp env-example .env

Laradock環境設定ファイルを編集

# MySQLのデータディレクトリ設定
DATA_PATH_HOST=.laradock/data
MYSQL_VERSION=5.7

Laradock起動

C:\laravel7\laradock> docker-compose up -d workspace mysql nginx phpmyadmin

エラー発生

ERROR: for phpmyadmin Cannot start service phpmyadmin: driver failed programming external connectivity on endpoint laradock_phpmyadmin_1(082d68484d846f4c8e254d2e7fa0a10afb225bf0050eb2997e4baba3d31c576e): Bind for 0.0.0.0:8080 failed: port is already allocated

※v10.0からWORKSPACEのコンテナが8080番ポートを使用しているみたいで同じく8080番ポートを使用するphpmyadminは起動できないようなのでLaradockの環境設定でWORKSPACEが使用しているポートを変更する。

WORKSPACE_VUE_CLI_SERVE_HOST_PORT=8080
 ↓
WORKSPACE_VUE_CLI_SERVE_HOST_PORT=8088

※8088番に設定した。

ついでにPHPアップグレード

// WORKSPACEコンテナに入る
C:\laravel7\laradock> docker-compose exec workspace bash
// PHPのバージョン確認
root@f348ab4e7940:/var/www# php --version
PHP 7.2.20-2+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Jul 25 2019 11:42:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.20-2+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies
// WORKSPACEコンテナから抜ける
root@f348ab4e7940:/var/www# exit

PHPのバージョンを7.4に設定

PHP_VERSION=7.4

PHPアップグレード

C:\laravel7\laradock> docker-compose build php-fpm
C:\laravel7\laradock> docker-compose build workspace	// CLIもアップグレード

// Laradock起動
C:\laravel7\laradock> docker-compose up -d workspace mysql nginx phpmyadmin
// WORKSPACEコンテナに入る
C:\laravel7\laradock> docker-compose exec workspace bash
root@f348ab4e7940:/var/www# php --version
PHP 7.4.5 (cli) (built: Apr 19 2020 07:36:30) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

Laravel7

インストール

root@f348ab4e7940:/var/www# composer create-project laravel/laravel project1

–prefer-distを付けるとzipでダウンロードするらしいので
# composer create-project –prefer-dist laravel/laravel project1
のほうがいいね!

タイムゾーンとロケールの設定

'timezone' => 'Asia/Tokyo',
'locale' => 'ja',

日本語化

https://github.com/caouecs/Laravel-lang

src/jaディレクトリをresources/lang以下に配置
json/ja.jsonも同じくresources/lang以下に配置

※ユーザ登録ページやメールを日本語化してくれます。

データベースとメール(Gmail)を設定

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=alpha
DB_USERNAME=root
DB_PASSWORD=root

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=xxxxxxxx@gmail.com
MAIL_PASSWORD=xxxxxxxx
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=xxxxxxxx@gmail.com
MAIL_FROM_NAME="${APP_NAME}"

Auth(ユーザ認証)インストール

root@f348ab4e7940:/var/www# composer require laravel/ui
root@f348ab4e7940:/var/www# php artisan ui vue --auth
root@f348ab4e7940:/var/www# php artisan migrate
root@f348ab4e7940:/var/www# npm install

「npm ERR! Maximum call stack size exceeded」とかエラーが出た。
※何度か再試行しないとダメかも・・・
# npm cache clean –force
で解決するかも。

コンパイル

root@f348ab4e7940:/var/www# npm run dev
# または
root@f348ab4e7940:/var/www# npm run watch

SSLエラー対策

stream_socket_enable_crypto(): SSL operation failed with code 1.
OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

※config/mail.phpの設定パターンが変わりました。

    'mailers' => [
        'smtp' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
            'timeout' => null,
            'stream' => [
                'ssl' => [
                   'allow_self_signed' => true,
                   'verify_peer' => false,
                   'verify_peer_name' => false,
                ],
            ],
        ],
・・・

ユーザメール認証

Userモデルの変更

//class User extends Authenticatable
class User extends Authenticatable implements MustVerifyEmail

ルーティング

//Auth::routes();
Auth::routes(['verify' => true]);

# メール認証済のユーザだけに見せるページ
//Route::get('/home', 'HomeController@index')->name('home');
Route::get('/home', 'HomeController@index')->name('home')->middleware('verified');

# またはグループ化して
Route::middleware('verified')->group(function() {
    Route::get('/home', 'HomeController@index')->name('home');

});

モデルをapp/Modelsディレクトリ以下に配置

# app/Modelsディレクトリ作成
root@f348ab4e7940:/var/www# mkdir app/Models
# app/User.phpファイル移動
root@f348ab4e7940:/var/www# mv app/User.php app/Models/

名前空間の修正

//namespace App;
namespace App\Models;
//use App\User;
use App\Models\User;
//    'providers' => [
//        'users' => [
//            'driver' => 'eloquent',
//            'model' => App\User::class,
//        ],
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],
//use App\User;
use App\Models\User;

ユーザのホームを/userにする

public const HOME = '/home';
↓
public const HOME = '/user';

後記

WindowsでLaradockによるLaravel7のWEBシステム開発環境構築を行いました。
サンプルとして構築しておくと後はディレクトリごとコピーして
①.envを変更
②データベース変更
③# php artisan key:generate
ぐらいで同じ開発環境が構築できるので便利ですね。