WSL2のUbuntu20.04で Apache 2.4 + PHP 7.2 + MariaDB 15.1 の開発環境作るメモ
以前、WSL1で作っていた環境をWSL2で作り直した。
※Ubuntuのコマンドは、基本的にはすべて一般ユーザーで実行しています。
WSL2を有効化
以下の公式の記事を参照……
Windows Subsystem for Linux (WSL) を Windows 10 にインストールする | Microsoft Docs
まず管理者権限で起動したPowerShellで以下コマンド実行して、仮想マシンプラットフォーム機能を有効化。
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
そしたらPC再起動後、『x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ』をインストール。
そしたらPowerShellで以下コマンド実行して、Linuxディストリビューションインストール時の既定のバージョンをWSL2に変更。
wsl --set-default-version 2
Ubuntuをインストール
Microsoft Storeから、ここでは『Ubuntu 20.04 LTS』をインストール。
※なぜならUbuntu無印はWSL1でインストール済みだったから。それに、WSL1ではUbuntu 20.04が sleep: cannot read realtime clock: Invalid argument
とか言ってちゃんと動かなかったからちょうど良いと思ったので。詳しくは以下の記事を参照。
(今はまだ)WSL1にUbuntu 20.04を入れるな - Qiita
ちなみに、インストール済みのディストリビューションをWSL2に切り替える場合はコマンドプロンプトで以下実行。
wsl --set-version Ubuntu 2
以下、WSL2のUbuntu上で環境構築を行っていく。
環境構築の前に
……と思ったが、自分の環境ではWSL1のUbuntuの方でApacheとMadiaDBが動いてたので、念のため止めておく。
sudo service apache2 stop
sudo service mysqld stop
以下、今度こそWSL2のUbuntu上で環境構築を行っていく。
環境構築開始
最初はこれ。
sudo apt update
Apacheをインストール
そしたらWSL2のUbuntuにApacheインストール。
sudo apt install apache2
apache2 -v
Server version: Apache/2.4.29 (Ubuntu)
Server built: 2020-03-13T12:26:16
サービス起動してるか確認。
service apache2 status
* apache2 is not running
WSL2になってもインストール後に自動で起動しないのは同じようなので、以下コマンドで起動する。
sudo service apache2 start
* Starting Apache httpd web server apache2
*
無事に起動。なお、ここで Failed to enable APR_TCP_DEFER_ACCEPT
とか表示される人はこちらを参照。
この時点で http://localhost
を開くと、ちゃんとUbuntuのApache2のデフォルトページが表示された。
[2020-11-23追記] なんか後日確認したところ、表示されなくなってた。
あれ? 調べたところ、本当はWSL2上の localhost
にWindows側から接続するには設定が必要らしい。
WSL2内で立ち上げたサーバにWindows側からlocalhostで接続する - Qiita
Windows側のユーザのフォルダに .wslconfig
を作成して、中身を以下のようにする。
[wsl2]
localhostForwarding=True
そしたらコマンドプロンプトからWSL2をシャットダウン。
wsl --shutdown
再度WSL2を立ち上げてApache2を起動したら、やっと http://localhost
にアクセスできるようになった。
PHPをインストール
PHP7.4を……と思ったが、いまPHPで動かしてる本番環境が7.2なので7.2をインストール。
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php7.2 php7.2-common php7.2-cli php7.2-fpm php7.2-mysql php7.2-dev php7.2-mbstring php7.2-zip php7.2-sqlite3 php7.2-curl php7.2-gd php7.2-xml
最後に以下のメッセージが表示されたけど、開発環境だしFPMは無効のままで構わないので無視。
NOTICE: Not enabling PHP 7.2 FPM by default.
NOTICE: To enable PHP 7.2 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php7.2-fpm
NOTICE: You are seeing this message because you have apache2 package installed.
インストールできたか確認。
php -v
PHP 7.2.34-8+ubuntu20.04.1+deb.sury.org+1 (cli) (built: Oct 31 2020 16:57:33) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.34-8+ubuntu20.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies
ApacheにPHPを乗せる
ApacheのPHP7.2モジュールをインストールして、Apacheを再起動。
sudo apt install libapache2-mod-php7.2
sudo service apache2 restart
PHPが動くか確認したい。以下コマンド実行してから、http://localhost/phpinfo.php
を開いてみる。
sudo su
echo '<?php echo '<?php'; ?> echo phpinfo();' > /var/www/html/phpinfo.php
exit
phpinfoの表が表示されればOK。
Composerをインストール
Composerも入れていく。インストール方法は概ね公式サイト通り。
まずインストーラをダウンロード。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'c31c1e292ad7be5f49291169c0ac8f683499edddcfd4e42232982d0fd193004208a58ff6f353fde0012d35fdd72bc394') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Installer verified
と表示されればファイルのハッシュ値はOK。
そしたら以下コマンドでインストールする。ここでは /usr/local/bin
に composer
という名前でインストールして、グローバルで composer
コマンドを使えるようにする。
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"
composer --version
Composer version 2.0.6 2020-11-07 11:21:17
MariaDBをインストール
以下コマンドでインストール。
sudo apt install mariadb-server
mysql --version
mysql Ver 15.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
一応、サービスがどうなってるか確認。
service mysql status
* MariaDB is stopped.
WSL1と同様に、インストール直後はサービスが起動していない。起動する。
sudo service mysql start
そしたら mysql_secure_installation
で初期設定を行っていく。
sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): # 最初はDBのrootユーザーのパスワードは無いので何も入力しない
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y # DBのrootユーザーのパスワードをセットしたいからy
New password: # DBのrootユーザーのパスワードを入力
Re-enter new password: # もう一度入力
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y # 匿名ユーザーでログインさせたくないからy
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y # リモートからrootユーザーで繋がせたくないからy
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y # testデータベースは不要だからy
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y # いま設定した権限をリロードしてほしいからy
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
初期設定できたら、試しにrootユーザーで入ってみる。パスワードを訊かれたら、さっき設定したパスワードを入力する。
sudo mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.1.44-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
入れたからOK。quit
で抜けられる。
MariaDBに開発用ユーザー作成
開発で使うので、MariaDBに開発用ユーザーを作っておく。
ここでは仮にユーザー名は mydevuser
、パスワードは mypassword
とする。開発用なので接続元は localhost
とする。
MariaDBにログインして以下実行。
CREATE USER mydevuser@localhost;
GRANT ALL PRIVILEGES ON *.* TO mydevuser@localhost IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
作成したら、ユーザーテーブルを確認してみる。
SELECT user, host, password FROM mysql.user;
+----------------+-----------+-------------------------------------------+
| user | host | password |
+----------------+-----------+-------------------------------------------+
| root | localhost | ***************************************** |
| mydevuser | localhost | ***************************************** |
+----------------+-----------+-------------------------------------------+
こんな感じになってるはず。
念のため quit
で抜けて、作成したユーザーで入れるか試してみる。(※-ppassword
は誤字ではない。-p
の後にスペースは本当にいらない。)
sudo mysql -u mydevuser -pmypassword
入れればOK。
MariaDBにデータベース作成
ついでにデータベースも作成する。ここでは仮に mydevdb
とする。
MariaDBにログインして以下実行。
CREATE DATABASE mydevdb CHARACTER SET utf8mb4;
さらに今回は手元に mysqldump
で作成したダンプファイルがあるので、今作ったデータベースにリストア。
quit
で抜けてから以下実行。
sudo mysql -u mydevuser -pmypassword -D mydevdb < /path/to/dumpfile.sql
実際には、ダンプファイルはWindows側に置いてあるものを /mnt/c/Users/piyopiyo/Desktop/dump.sql
みたいに指定した。
自動起動設定
最後に、PC立ち上げ時にApacheとMariaDBが自動起動するように設定する。
少し調べたらWSL2でも systemctl
は使えないっぽいので、WSL1と同様にWindowsのスタートアップでやることにした。
『ファイル名を指定して実行』に shell:startup
を入力して、ログインユーザーのスタートアップのフォルダ (C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
) を開く。そこに好きな名前のbatファイルを作って、内容を以下の通りにする。
@echo off
wsl -d Ubuntu-20.04 -u root -- service apache2 start
wsl -d Ubuntu-20.04 -u root -- service mysql start
ここでは Ubuntu 20.04 をインストールしてるので、ディストリビューションの指定は Ubuntu-20.04
にしてある。インストール済みのディストリビューションの名前はコマンドプロンプトで wsl -l
で確認できるよ。
これでWindowsを再起動してみると、ログイン時に一瞬だけ黒窓が出てきて以下が表示され、ApacheとMariaDBが起動される。
* Starting Apache httpd web server apache2
*
* Starting MariaDB database server mysqld
以上。