Windows10+Docker+WSL2+ubuntuでLaravelをインストール&プロジェクト生成

侍エンジニア塾

侍エンジニア塾に入ってた時に、講師のすすめでPHP Laravelの環境を構築してたものの、ついぞ構築できないまま終わってしまった悔しさがあります。

そこで改めて(いまは侍エンジニア塾生じゃないけど)Laravelのインストールのリベンジをしたいと思いました。

あぁ、こんなところに便利なサイトが。
https://readouble.com/laravel/9.x/ja/installation.html

現在の私の環境は

PHPバージョン8.1
Laravelのバージョン9
Windows 10 Pro

こんな風になっています。

Docker Desktopのインストール

Docker Desktop
Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.

ここから「Also available for windows and Linux」を押せば、「Docker Desktop Installer.exe」のダウンロードが開始します。

1.インストーラーの起動

2.Configurationの画面

・Use WSL 2 instead of Hyper-V
・Add shortcut to desktop

この2つにチェックが入ってることを確認して「OK」

3.Installation succeeded画面

インストール成功したら、「Close and restart」をクリック。

4.Our Service Agreement has Changed画面

この画面がでたら「I accept the terms」にチェックを入れて「Accept」

5.WLS 2 installation is incompleteの画面

WSL2 Linuxカーネルは別のMSI更新パッケージを使用してインストールされるようになりました。リンクをクリックしてカーネルアップデートをインストールしてください。

てことなので、

https://aka.ms/wsl2kernelをクリック。

以下の画面がでるので

「X64 マシン用WSL2 Linuxカーネル更新プログラムパッケージ」をクリックすると、「wsl_update_x64.msi」のダウンロードが始まる。

これを起動。Windows Subsystem for Linux Update Setupの完了。

6.Docker Desktopを起動

起動した。

Get started with Docker in a fiew easy stepsの画面で「Start」をクリック。

Ubuntuのインストール

画面左下のWindowsボタンから、Microsoft Storeを起動して、ubuntuを検索。色々でてくるので「Ubuntu 20.04.4 LTS」を「入手」

Ubuntuを起動。Enter new UNIX usernameと出てくるので任意の名前とパスワードでユーザーを作成しておくこと。

(ここでユーザーを作成せずに他のことやっちゃってエラー出た。)

Windows PowerShellからWSL2の設定

コマンドプロンプトでもいいと思うけど。WindowsマークからPowerShellを起動。

wsl -l -v

でWSLのバージョンを確認。

Ubuntu-20.04がStoppedになっててVERSIONが1のままなので、これのVERSIONを2に変更。

wsl --set-version Ubuntu-20.04 2

「変換中です。この処理には数分かかることがあります」と出る。

Docker Desktopの設定

画面右上の歯車のボタンからSettings画面を出す。

General > Use Docker Compose V2にチェックを入れて

Resources > WSL Integration > Ubuntu-20.04のスイッチをONにして

画面右下の「Apply & Restart」をクリック。

ubuntuにログインしてアップグレードを実施

sudo apt update && sudo apt upgrade -y

Ubuntu Linuxのアップデートの確認と、実際にアップグレードを行う。

Laravelのインストール

ubuntuから下記コマンドを実行。

curl -s "https://laravel.build/coffeeapp?php=81" | bash

coffeeappというプロジェクトを作成。

完了。

次に

cd coffeeapp && ./vendor/bin/sail up

このコマンドを入力してねと出てくるので、

sailコマンドを入力すれば

これでLaravelのインストールが完了する。このあと時間がかかる。

sailコマンドについて。

Laravel Sail(セイル、帆、帆船)は、LaravelのデフォルトのDocker開発環境を操作するための軽量コマンドラインインターフェイスです。 Sailは、Dockerの経験がなくても、PHP、MySQL、Redisを使用してLaravelアプリケーションを構築するための優れた出発点を提供します。Sailの本質は、docker-compose.ymlファイルとプロジェクトのルートに保存されているsailスクリプトです。sailスクリプトは、docker-compose.ymlファイルで定義されたDockerコンテナを操作するための便利なメソッドをCLIで提供します。
https://readouble.com/laravel/9.x/ja/sail.html

Sailは、macOS、Windows(WSL2)、およびLinuxと互換性のあるLaravel用のDockerを利用したローカル開発エクスペリエンスを提供します。Dockerを除いて、Sailを使用する前にローカルコンピューターにソフトウェアやライブラリをインストールする必要はありません。SailのシンプルなCLIは、Dockerの経験がなくてもLaravelアプリケーションの構築を開始できることを意味します。
https://github.com/laravel/sail

ちなみにbashエイリアスに登録することで sail と入力するだけで起動するようになる。ユーザールートにある.bashrcに記述してもよい。

$ alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'

.bashrcに記述したものをすぐ反映させるにはsource ~/.bashrcと入力。

これでdockerの中でLaravelが起動してるはず。

途中、「Windowsセキュリティの重要な警告」の画面が出てきた。ファイアウォールでDockerがブロックされてるようなので「アクセスを許可する」にした。

ところが

ターミナル上にずーっとログっぽい文字が流れてていつ終わるのかわからない。

mailhog-1 | [APIv1] KEEPALIVE /api/v1/events
meilisearch-1 | [2022-07-26T05:51:2Z INFO actix_web::middleware::logger: 127.0.0.1 “GET /health HTTP/1.1” 200 22 “-” “Wgett/” 0.000032

なにか‥奇妙だ‥

ブラウザでlocalhostにアクセスすると‥

UnexpectedValueException
The stream or file “/var/www/html/storage/logs/laravel.log” could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: The stream or file

なんかエラー出ててLaravelの画面が出てくれない。

これさっきubuntuユーザーを作成せずに進めた結果らしい。

なのでubuntuでユーザーを作成するところからやり直しした。

rootユーザーをexitして。
新たに作成したユーザーでubuntuにログイン。
coffeeappはもうあるので、example-appを生成。

curl -s "https://laravel.build/example-app?php=81" | bash

Docker is not running

と出てしまう。Dockerは起動中のはずなんだけど‥PCを再起動してDockerを起動して。

ubuntuにログインして、

curl -s "https://laravel.build/example-app?php=81" | bash

を実行。

途中作成したユーザーのパスワードを入力。

DocierのContainersを見ると、example-appがRunningになってる。

ブラウザでlocalhostにアクセスすると‥

出た!

タイトルとURLをコピーしました