Windows10に構築したDocker+Laravel開発環境をWSLへ移行する

Windows10の環境でDocker+Laravelの環境で開発をしていて、Webレスポンスが非常に遅く開発に支障が出ているため、WSLに移行してかなり改善されたのでその際の手順をまとめます。

githubの設定

SSHの鍵ペアを作成

ファイル名はデフォルト、パスフレーズは無しで秘密鍵と公開鍵のペアを、ssh-keygenコマンドで生成します。

$ cd ~/.ssh

$ ssh-keygen

完了すると、以下の2ファイルが生成されます。

  1. ~/.ssh/id_rsa (秘密鍵)
  2. ~/.ssh/id_rsa.pub (公開鍵)

公開鍵をgithubへ設定

以下の手順で、id_rsa.pub (公開鍵)の内容をgithubへ設定します。

1. id_rsa.pub (公開鍵)の内容を出力

$ cat ~/.ssh/id_rsa.pub

2. githubへSign in

https://github.com/login

3. New SSH Key

Settings -> SSH and GPG keys -> New SSH Key をクリック

4. SSH Key 設定内容

以下のように設定して、Add SSH Keyをクリック

  • Title
    任意のタイトル
  • Key type
    Authentication Key
  • Key
    1で出力したid_rsa.pub (公開鍵) を貼りつける

以下のように一覧に追加されればOK

ソースコードをcloneする

ここまでの作業で、WSL内でgithubを利用する準備が整ったので、githubからソースコードをcloneします。

$ git clone git@github.com:s-watanabe-apps/laravel-project-test.git

なお、この時cloneするリポジトリのリンクは、githubで任意のリポジトリを開き、Code -> SSH の順にクリックして確認できます。

動作確認①

この時点でDocker Desktopが実行されていれば、コンテナを立ち上げることが出来ます。

$ docker-compose up -d
Starting laravel-project-test_mysql_1 ... done
Starting laravel-project-test_app_1   ... done
Starting laravel-project-test_web_1   ... done

$ docker-compose ps
            Name                          Command              State                 Ports
--------------------------------------------------------------------------------------------------------
laravel-project-test_app_1     docker-php-entrypoint php-fpm   Up      9000/tcp
laravel-project-test_mysql_1   docker-entrypoint.sh mysqld     Up      0.0.0.0:3306->3306/tcp, 33060/tcp
laravel-project-test_web_1     nginx -g daemon off;            Up      0.0.0.0:8000->80/tcp

しかし、ブラウザでトップページ(http://localhost:8000/)にアクセスすると、以下のようにエラーになります。

これは、Laravelのコンポーネントやその他ライブラリ群がインストールされていないためで、composer updateを実行して必要ライブラリをセットアップする必要があります。

PHPのセットアップ

composerを実行するためにはPHPが必要なので、まず初めにPHPをインストールします。

1. PHPバージョンを確認

versionを確認するとPHPをインストールするように言われるので、指示の通りaptによりインストールを行います。

$ php --version

Command 'php' not found, but can be installed with:

sudo apt install php7.4-cli

2. PHPのインストール

$ sudo apt install php7.4-cli

3. Fetchエラーが出る場合

インストール時に一部のリソースダウンロードで、以下のようにFetchエラーになる場合があります。

(省略)
Err:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 php7.4-common amd64 7.4.3-4ubuntu2.13
  404  Not Found [IP: xxx.xxx.xxx.xxx]
Err:2 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 php7.4-json amd64 7.4.3-4ubuntu2.13
  404  Not Found [IP: xxx.xxx.xxx.xxx]
Err:3 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 php7.4-opcache amd64 7.4.3-4ubuntu2.13
  404  Not Found [IP: xxx.xxx.xxx.xxx]
Err:4 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 php7.4-readline amd64 7.4.3-4ubuntu2.13
  404  Not Found [IP: xxx.xxx.xxx.xxx]
Err:5 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 php7.4-cli amd64 7.4.3-4ubuntu2.13
  404  Not Found [IP: xxx.xxx.xxx.xxx]
Err:6 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libapache2-mod-php7.4 amd64 7.4.3-4ubuntu2.13
  404  Not Found [IP: xxx.xxx.xxx.xxx]
Err:7 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 php7.4 all 7.4.3-4ubuntu2.13
  404  Not Found [IP: xxx.xxx.xxx.xxx]
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/p/php7.4/php7.4-common_7.4.3-4ubuntu2.13_amd64.deb  404  Not Found [IP: xxx.xxx.xxx.xxx]
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/p/php7.4/php7.4-json_7.4.3-4ubuntu2.13_amd64.deb  404  Not Found [IP: xxx.xxx.xxx.xxx]
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/p/php7.4/php7.4-opcache_7.4.3-4ubuntu2.13_amd64.deb  404  Not Found [IP: xxx.xxx.xxx.xxx]
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/p/php7.4/php7.4-readline_7.4.3-4ubuntu2.13_amd64.deb  404  Not Found [IP: xxx.xxx.xxx.xxx]
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/p/php7.4/php7.4-cli_7.4.3-4ubuntu2.13_amd64.deb  404  Not Found [IP: xxx.xxx.xxx.xxx]
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/p/php7.4/libapache2-mod-php7.4_7.4.3-4ubuntu2.13_amd64.deb  404  Not Found [IP: xxx.xxx.xxx.xxx]
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/p/php7.4/php7.4_7.4.3-4ubuntu2.13_all.deb  404  Not Found [IP: xxx.xxx.xxx.xxx]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

この場合は、apt updateを実行することで、残りのリソースをダウンロードできます。

$ sudo apt update

4. 必要ライブラリのインストール

composerの実行に必要な以下のライブラリをインストールします。これらがインストールされていないと、composer実行時にエラーになりました。

$ sudo apt install php7.4-gd

$ sudo apt install php7.4-openssl

$ sudo apt install php-xml

5. 再度PHPバージョンを確認

$ php --version
PHP 7.4.3 (cli) (built: Nov  2 2022 09:53:44) ( NTS )

composerのセットアップ

インストールとアップデート

ここまでの作業でcomposerの実行準備が整いましたので、インストールとアップデートを行います。

$ composer install

$ composer update

動作確認②

再度ブラウザでトップページ(http://localhost:8000/)にアクセスすると、以下のようにトップページを開くことができ、レスポンス速度がかなり改善されていることが分かります。

Visual Studio Codeで開く

WSL上のコマンドラインから起動する

ひとまずWSLの開きたいプロジェクトへ移動し、「code .」でVSCodeを開くことが出来ます。

$ code .
Installing VS Code Server for x64 (97dec172d3256f8ca4bfb2143f3f76b503ca0534)
Downloading: 100%
Unpacking: 100%
Unpacked 2389 files and folders to ~/.vscode-server/bin/97dec172d3256f8ca4bfb2143f3f76b503ca0534.

ディレクトリ指定で開く

WSLのディレクトリはWindows上でマウントされていて、例えばホームディレクトリは以下のように指定すると開けます。

\\wsl.localhost\Ubuntu\home\{ユーザー名}\

コメント

このブログの人気の投稿

docker-compose up で proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host

docker-compose で起動したweb、MySQLに接続できない事象

【PHP】PHP_CodeSnifferを使う(コーディングルールのカスタマイズ)