47歳でやむなくセミリタイア

病気のためセミリタイアをすることに。現在は週20時間程度のバイトをしています。その他、雑多なことを記録として書いています。

Yii2の使い方: WSLでAMP(Apache+Mysql+PHP)を動作させる設定方法

大雨が降る恐れがあると、ずっと言われ続けていますが、今日も小雨がぱらつく程度でした。体調は良さげな感じです。良く寝れているのがいいのかもしれない。

さて、これまでAMP(Apache+Mysql+PHP)の環境にWampServerというWindowsのアプリを使っていたのですが、WSL(Windows Subsystem for Linux)に乗り換えることにしました。

外部コマンド(ghostscript)が必要となった

PDFの変換のため、ghostscriptを使う必要が出てきました。今はテスト環境がWindows、本番環境がLinuxという状態ですので、このままだとghostscriptをWindowsLinuxの両方に入れて、phpで切り替える必要があります。

それならいっそ、Linux側でAMPを動作させてしまおうということで、WSLでAMPを設定してみました。

Windows の設定

ファイアウォールとマウントオプションの変更が必要です。

ファイアウォールの受信の規則に 80/tcp を追加

以下のページの説明の通りですが、詳細設定への移動方法が変わっています。

Windows10で80番ポートを開放する方法 - suzu6

「設定」→「更新とセキュリティ」→「Windowsセキュリティ」→「ファイアウォールとネットワーク保護」→「詳細設定」で、詳細設定が開きます。

windowsディレクトリをwebrootにしている場合には、マウントオプションmetadataを指定

詳細は以下に記載があります。

WSLでWindowsなのにLinux環境を整える - yu nkt’s blog

やることは以下。

metadataオプションを有効にして再マウントする。

$ sudo umount /mnt/c
$ sudo mount -t drvfs C: /mnt/c -o metadata

WSL起動時に自動的に指定されるよう、/etc/wsl.confを作成して、以下を記載する

[automount]
options = "metadata"

apache2の設定

WSLのubuntuにはapache2がインストールされているので、設定をするだけで使えるようになります。

/etc/apache2/apache2.conf の設定

apache起動時に"AH00076: Failed to enable APR_TCP_DEFER_ACCEPT"のワーニングが出るのを防ぐため、/etc/apache2/apache2.confに以下を記載します。

AcceptFilter http none
AcceptFilter https none

/etc/apache2/sites-available/xxx.conf を作成して、sites-enabledにシンボリックリンクを作る

何でも構わないのですが、001-yii2.confみたいなファイルを作成します。000-default.confがあるので、真似するとよいです。

<VirtualHost *:80>
    DocumentRoot "/mnt/C/Work/yii2/backend/web/"
    ServerName yii2.jp
    ErrorLog ${APACHE_LOG_DIR}/yii2-error_log
    CustomLog ${APACHE_LOG_DIR}/yii2-access_log common
    <Directory "/mnt/C/Work/yii2/backend/web/">
        AllowOverride All
        Options +ExecCGI +SymLinksIfOwnerMatch
        Require all granted
        DirectoryIndex index.php
    </Directory>
</VirtualHost>

作成したら/etc/apache2/sites-enabledに、作成したファイルのシンボリックリンクを作ります。

$ cd /etc/apache2/sites-enabled
$ sudo ln -s ../sites-available/001-yii2.conf .

rewriteモジュールを有効にする

$ sudo a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  service apache2 restart

apache2の起動

普通のservice restartです。

sudo service apache2 restart

mysqlの設定

WSLのubuntuには含まれていないので、インストールから必要です。

インストール

$ sudo apt install mysql-server mysql-client

ホームディレクトリを追加

$ sudo usermod -d /var/lib/mysql mysql

rootのパスワード方式を変更

デフォルトではパスワードでなく実行ユーザを参照しているので、一般ユーザから "mysql -u root" で起動できないらしい。パスワードを参照するように変更します。

$ sudo service mysql start
$ sudo mysql
mysql> use mysql;
mysql> update user set plugin='mysql_native_password' where user='root';
mysql> exit
$ sudo service mysql restart

これで "mysql -u root" でログインできるようになりました。詳細は以下にあります。

WSLにMySQLを入れてみた|おぶすた|note

後はWindowsの時と同じ

ユーザとデータベースを作って、テーブルを作って、許可を与えていきます。

$ mysql -u root
mysql> CREATE USER "mysql"@"localhost" IDENTIFIED BY "password";
mysql> CREATE DATABASE yii2 DEFAULT CHARACTER SET utf8;
mysql> GRANT ALL PRIVILEGES ON yii2.* TO mysql@localhost;
...以下略...

apache2とmysql自動起動の設定

以下の内容のバッチファイル(wsl.bat)をスタートアップに置くと自動起動するようになります。何故かショートカットだと動作しませんでした。

@echo off
wsl -u root -- service apache2 start
wsl -u root -- service mysql start

これで、Yii2が動作するようになりました。WampServerと比べると動作が少し遅いのですが、WSL2になれば改善すると期待しています。