ラボ > サーバ:Docker、OS:Windows、Laravel、Lumen:インスト絡み

WIN+Docker+Ubuntuでlaravelを使うための作業メモ

作成日:2022-11-26, 更新日:2023-07-11

基本

WSL2+Docker Desktop+UbuntuでLaravel9の開発環境を構築する」に従って試してみた。そのときのメモ

ざっくりした流れ

  1. Dockerインスト
  2. Ubuntuインスト
  3. laravelプロジェクト作成
  4. Visual Studio Codeのインスト(←必須じゃないらしい)

Dockerインスト

すでにインスト済みなので放置

▼そのときのメモ
・「Docker(+Win)をインスト

Ubuntuインスト

Ubuntuインスト

「Microsoft Store」から「ubuntu」で検索・入手(インストールされて、コマンドラインが開かれる)
コマンドラインでユーザー名、パスワードを登録

「WSL Integration」の設定

  1. Dockerを開く
  2. 「Settings」で「Resourcres」-「WSL Integration」
  3. 「Ubuntu」にチェックをいれる
  4. Ubuntuを再起動

laravelプロジェクト作成

作業場所の確保

▼任意のトコにフォルダを作成し、Ubuntuでカレントを移す

cd \\wsl$\Ubuntu\home\recatnap

※「recatnap」はUbuntuをインストしたときのユーザー名

WindowsからWSL2のディレクトリへの接続方法

エクスプローラーのアドレスバーに「\\wsl$」を入力する
※末尾に「$」が入っているためネットワークの一覧には表示されない

laravelプロジェクト作成1

▼Ubuntuで実行(※「example-app」はプロジェクト名になるので任意の文字列にする)

curl -s https://laravel.build/example-app | bash

→「\\wsl$\Ubuntu\home\recatnap\example-app」が出来る

laravelプロジェクト作成2

cd example-app && ./vendor/bin/sail up -d

ブラウザで確認

「http://localhost/」をブラウザで開く

Visual Studio Codeのインスト(←必須じゃないらしい)

Visual Studio Codeが便利らしいので試してみる

まずは、DL・インスト。追加で、Remote Development拡張をインストール
Visual Studio Codeの下にある緑背景の「><」をクリック

Visual Studio Codeの下にある緑背景の「><」

基本、ウィンドウの下部の赤枠あたりのとこに「><」がある。
その後、開きたいフォルダを指定する

VS Code Server for WSL closed unexpectedly

▼なんかのアラートが出てきた

VS Code Server for WSL closed unexpectedly

▼Windows PowerShellを起動して実行・確認(※「規定」が「Ubuntu」になっているか確認したい)

PS C:\Users\xxxx> wslconfig /l
Linux 用 Windows サブシステム ディストリビューション:
docker-desktop-data (既定)
docker-desktop
Ubuntu

▼「Ubuntu」を「規定」にする

PS C:\Users\xxxx> wslconfig /setdefault Ubuntu

▼「Ubuntu」が「規定」になったか確認

PS C:\Users\xxxx> wslconfig /l
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
docker-desktop
docker-desktop-data

再度、Visual Studio Codeの下にある緑背景の「><」をクリックして無事開くことを確認

laravelを修正してブラウザで確認

ひとまず既存のハローワールド替わりのページを修正してみる
→まずは作業対象のファイルを探す

作業対象のファイル

とりあえずルーティングを確認してどのファイルが開かれるかを確認する必要がある

ルーティング

ルーティングは「routes/」の中のファイルのどれか
ブラウザで確認したいページなのでおそらく「web.php」

▼「routes/web.php」

Route::get('/', function () {
    return view('welcome');
});

→「view('welcome')」とあるのでこれを起点に探す

コントローラー

「app/Http/Controllers」フォルダの中を確認
→「welcome」がないので使っていないっぽい

ビュー

「resources/views」フォルダの中を確認
→「welcome.blade.php」ってのがいた

ひとまず開いて適当なトコに文字を入力→ブラウザで確認

エラー

▼ブラウザで開くと下記エラー

file_put_contents(/var/www/html/storage/framework/views/xxxxxxxx.php): Failed to open stream: Permission denied

→修正箇所を元に戻してもエラーのまま。

…エラー文に「Permission denied」ってあるけど、このPATHはドコ?
ドコって思ったらubuntuのヤツってことに気づいたのubuntuのコンソールで権限を追加

▼調べると書込み権限をいくつか設定が必要っぽい

  • chmod 777 bootstrap/cache
  • chmod 777 storage/app/public
  • chmod 777 storage/framework/cache
  • chmod 777 storage/framework/cache/data
  • chmod 777 storage/framework/sessions
  • chmod 777 storage/framework/views
  • chmod 777 storage/logs

▼1行にしてみる

chmod 777 bootstrap/cache & chmod 777 storage/app/public & chmod 777 storage/framework/cache & chmod 777 storage/framework/cache/data & chmod 777 storage/framework/sessions & chmod 777 storage/framework/views & chmod 777 storage/logs

▼ブラウザで再度確認、エラー文が表示されたままならエラー文のファイルを削除

/var/www/html/storage/framework/views/xxxxxxxx.php

日時

  • 「config/app.php」の「'timezone'」を「'timezone' => 'Asia/Tokyo',」

ログ関連

  • 「config/logging.php」
  • 「.env」の「LOG_xxxx」
    →ログレベルは「energencey, alert, critical, error, warning, notice, info, debug」まで

カスタマイズ

▼docker-compose.ymlを修正後、ubutsuでコマンド実行

$ ./vendor/bin/sail up -d

PHPのバージョンを変更したい

Laravel 8.x Laravel Sail」より

▼「laravel.xxx」の「build」の「context」

PHP8.1
context: ./vendor/laravel/sail/runtimes/8.1
PHP8.0
context: ./vendor/laravel/sail/runtimes/8.0
PHP7.4
context: ./vendor/laravel/sail/runtimes/7.4

▼「laravel.xxx」の「image」

image: sail-8.1/app

DBのタイムゾーン

▼mysqlのトコを修正(※「TZ」と「command」の行)

~ 略 ~
mysql:
    ~ 略 ~
    environment:
        MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
        ~ 略 ~
        TZ: Asia/Tokyo
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_general_ci','--default-time-zone=+09:00']
    ~ 略 ~
~ 以下、略 ~

SQLで確認

▼現在の日時の確認

SELECT NOW();

▼タイムゾーンの確認

show variables like '%time_zone%';

phpMyAdminを追加したい

▼「services」の中にphpMyAdmin追加

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links:
        - mysql:mysql
    ports:
        - 8080:80
    environment:
        #PMA_USER: "${DB_USERNAME}"
        #PMA_PASSWORD: "${DB_PASSWORD}"
        PMA_HOST: mysql
        MEMORY_LIMIT: 256M
        UPLOAD_LIMIT: 256M
    networks:
        - sail

※「DB_USERNAME」「DB_PASSWORD」は「.env」で設定されているので変更不要

他、メモ

  • インストしたらすでにAPIトークン認証用に「sanctum」ってのが入っている(マイグレーションファイルがいくつかすでに作られ、ルーティングも設定済み)