Windows環境上にLinuxを構築。Laradockを導入してMigrationするまでの手順



## 開発環境
Laravel 7.20.0
PHP 7.4
MYSQL 8.0.21
Windows version 2004

## 全体のおおまかな流れ
- Ubuntu導入
- WSL2に更新・導入
- dockerインストール
- laradock導入

##本記事のゴール
本記事はWindows環境上にWSL2を用いてLinux環境を構築し、Laradockを導入して画面の表示+Migrationすることを目標としています。



## まずはUbuntu導入準備から
####Windowsを最新状態にアップデート（下記URLでダウンロード）
https://support.microsoft.com/ja-jp/help/4028685/windows-10-get-the-update


####PCの設定から開発者モードに変更
•	「設定(スタートボタンの歯車アイコン)」-「更新とセキュリティ」-「開発者向け」を選択
•	「開発者向け機能を使う」欄の「開発者モード」を選択して有効化


####追加機能でSubsystem for Linuxを有効化
•	「コントロールパネル」-「プログラム」-「Windowsの機能の有効化または無効化」を選択
•	一覧のなかから「Windows Subsystem for Linux(Beta)」にチェックを入れる
>ｗindows version2004の場合は表記が「Linux用Windowsサブシステム」に変更しているためそれを有効化してください。

PC再起動






####Ubuntuのインストール

> UbuntuとはLinuxディストリビューションの1つであり、フリーソフトウェアとして提供されている

Microsoft storeでubunntuをインストール。

コマンドプロンプトでbashと入力。（Ubuntuにログイン出来たら成功）

続いてUbuntuの状態を最新にします。
<pre>$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get autoremove
</pre><br>

###GitとPHPを取得
>普通にインストールすると古いバージョンのGitがインストールされるので、リポジトリを追加して最新のものを取得。

下記コマンドを実行。
<pre>$ sudo apt-get install build-essential
$ sudo add-apt-repository ppa:git-core/ppa
$ sudo apt-get update
$ sudo apt-get install git
$ git --version　//最新になっていたらOK
git version 2.28.0
</pre><br>

###PHP
※PHP--version 7.4を指定しています。
<pre>＄sudo apt-get install php7.4 php7.4-fpm php7.4-mysql php7.4-mbstring php7.4-gd
$ php -v  //指定したバージョンがインストールされているかを確認
PHP 7.4.3 (cli) (built: May 26 2020 12:24:22) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies</pre><br>


##WSL2の事前準備
>WSL2とはLinuxカーネルが動作する「本物のLinux環境」

#####「Windows PowerShell」の中の「Windows PowerShell」を「管理者として実行」して下記コマンドを実行
<pre>PS C:\>dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart</pre><br>

<pre>PS C:\>dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart</pre><br>

PCを再起動<br>



バージョンの確認

<pre>C:¥> ver
Microsoft Windows [Version 10.0.19041.84]</pre><br>
バージョンが10.0.18917以上であることを確認<br>

デフォルトをWSL2に設定するため、下記コマンドを実行。
<pre>C:¥>　wsl --set-version ubuntu 2</pre>
WSL2に切り替わっているか確認。
<pre>C:¥> wsl -l -v
  NAME   　STATE  　　VERSION
* Ubuntu  　Stopped 　　　2
</pre><br>

##### WSL2を導入したのでDockerを構築するうえでの事前準備は完了


##Dockerのインストール
>DockerとはLinux コンテナの作成と使用を実現するオープンソースのコンテナ化技術

####下記URLからDocker Desktop Edgeをインストール
https://docs.docker.com/docker-for-windows/wsl-tech-preview/

PC再起動

再起動後、タスクバーのdockerアイコンから「setting」を選択
「Enable the experimental WSL2 based engine」にチェックを入れ「Appli&Restart」をクリック

再起動が終わってnotificationと表示されたらOK


続いて、ResourcesのWSLIntegration内の「Enable WSL Integration」をクリック

「Ubuntu」を選択して「Appli&Restart」をクリック


##Dockerの動作確認

<pre>C:\Users\magic>wsl -d ubuntu
$ docker -v
Docker version 19.03.5, build 633a0ea838</pre><br>

####Hello Worldと表示されれば成功
<pre>$ docker run hello-world
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Hello from Docker!</pre>

##Laradock導入
>本番環境に必要なパッケージを提供してくれる。Homesteadをより細かく分割したようなもの


###前提

Laradockも含めて１プロジェクト１リポジトリで管理したいので下記構成。

<pre>
 ──project_dir
　├ app  //laravel ディレクトリ
　│  ├  app
　│  │ bootstrap
　│　└ .env
　│　　　
　└ Laradock</pre><br>


###Laradockをgit clone

<pre>
$git clone https://github.com/Laradock/laradock.git</pre><br>

####設定ファイル(env-exampl)をコピーして.envを生成
<pre>$ cd laradock
$ cp env-example .env</pre><br>

###コピーしたenv（Laradock.env）ファイルの編集

####指定したいプロジェクトを指定
<pre>APP_CODE_PATH_HOST=../
APP_CODE_PATH_HOST=../プロジェクト名/</pre><br>

####データの保存ディレクトリを指定
<pre>DATA_PATH_HOST=~/.laradock/data
+ DATA_PATH_HOST=.laradock/data</pre><br>

####プロジェクト名の設定
>laradockを使ったプロジェクトを複数作る場合、プロジェクト名が同じ場合、過去に作った同じ名前のコンテナイメージが上書きされてしまいまうため、被らない名前を設定
<pre>COMPOSE_PROJECT_NAME=laradock
+ COMPOSE_PROJECT_NAME=<project_name></pre><br>


####MYSQLの設定
>MySQLは8系になってパスワードの生成方法が変わったらしくLaravelから操作できないため下記記述を追記。

<project_dir>/lardock/mysqmy.cnfに下記を追加
<pre>// [mysqld]のエリアに追記する（デフォルトの場合一番下）
default_authentication_plugin=mysql_native_password</pre><br>


##Laravel.envの設定
DBの設定を合わせて変更します
※DB_HOSTはdocker-compose.ymlに書かれているコンテナ内名を指定します。

<pre>DB_CONNECTION=mysql
DB_HOST=mysql(既存だと127.001になっていると思うのでmysqlに修正)
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret</pre><br>


##Laradockの起動
下記コマンドでlaradockを起動します。 引数には起動したいミドルウェアを指定
>なお、projectが存在しない場合はroot権限で作成されてしまうため、必ず作成した状態で起動すること
<pre>$ docker-compose up -d nginx mysql workspace</pre><br>

起動確認
<pre>$ docker-compose ps</pre><br>

##Dockerコンテナ内からLaravelをインストール
dockerコンテナ内からlaravelをインストールする方法と、設定。

下記コマンドでWorkspaceコンテナに入る。
>※userオプションでユーザを指定してください。
<pre>$ docker-compose exec --user=laradock workspace /bin/bash</pre><br>


コンテナ内で下記を実行してLaravelをインストール。

<pre>/var/www$ composer create-project --prefer-dist laravel/laravel .</pre><br>

インストール完了したところで動作確認。
（※3306portを他に使用している場合はportが競合するためタスクマネージャーなどでportを終了させてください）

Windows側のブラウザで、http://localhostにアクセスします。

###画面が表示されればインストール完了


マイグレーションの確認
MySQLの設定が完了したか、マイグレーションで確認してみましょう。

下記のようにDBにテーブルが作成されれば成功

<pre>/var/www$ php artisan migrate

Migration table created successfully.
Migrating: 2014_10_１９_000000_create_users_table
Migrated:  2014_10_１９_000000_create_users_table (0.36 seconds)
Migrating: 2014_10_１９_100000_create_password_resets_table
Migrated:  2014_10_１９_100000_create_password_resets_table (0.35 seconds)
Migrating: 2019_１０_19_000000_create_failed_jobs_table
Migrated:  2019_１０_19_000000_create_failed_jobs_table (0.1 seconds)</pre><br>


## 終わりに
今回はWindows環境にLaradockを導入するまでの流れを記事として投稿しました

それと来月でプログラミングを始めてから一年経つこともあり、当初よりも知見が深まったこともあるので、これから少しずつ技術記事を上げていこうと思います。
どうかよろしくお願いいたしますm(._.)m