大雨が降る恐れがあると、ずっと言われ続けていますが、今日も小雨がぱらつく程度でした。体調は良さげな感じです。良く寝れているのがいいのかもしれない。
さて、これまでAMP(Apache+Mysql+PHP)の環境にWampServerというWindowsのアプリを使っていたのですが、WSL(Windows Subsystem for Linux)に乗り換えることにしました。
外部コマンド(ghostscript)が必要となった
PDFの変換のため、ghostscriptを使う必要が出てきました。今はテスト環境がWindows、本番環境がLinuxという状態ですので、このままだとghostscriptをWindowsとLinuxの両方に入れて、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" でログインできるようになりました。詳細は以下にあります。
後は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になれば改善すると期待しています。