WSLでWebサーバ運用

Windows 10春のアップデートでWSL (Windows Subsystem for Linux)がバックグラウンドタスクをサポートするようになった。前々回はその基本的な動作を、前回はバックグラウンドタスクを利用してcronを使う方法を取り上げた。今回はバックグラウンドタスクの利用例としてWebサーバ「Nginx」を実行する方法を紹介しようと思う。

Linuxはエッジサーバとしても使われることが多く、当然NginxやApache HTTP Serverが使われることが多い。WebシステムやWebサイトの開発にこれらのサーバを使っているという例も多いだろう。

春のアップデート以降はバックグラウンドタスクが利用できるようになったため、Windows 10上に構築したLinux環境にWebシステムやWebサイトの環境を構築しておき、Windows 10からの開発に利用するといったことができる。開発者目線で見ると、この辺りはかなり便利なところだ。

Nginxサーバセットアップ

これまでずっと運用してきたサーバはApache HTTP Serverが使われているケースが多いと思う。しかし、これから新しくWebシステムを構築するなら、現状はNginxを選んでおくのが良さそうだ。Ubuntu on WSLであれば次のようにNginxをインストールする。

■ Nginxのインストール on WSL

daichi@DESKTOP-DVVLKV9:~$ sudo apt install nginx
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  nginx
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 3,490 B of archives.
After this operation, 37.9 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 nginx all 1.10.3-0ubuntu0.16.04.2 [3,490 B]
Fetched 3,490 B in 0s (4,732 B/s)
Selecting previously unselected package nginx.
(Reading database ... 39483 files and directories currently installed.)
Preparing to unpack .../nginx_1.10.3-0ubuntu0.16.04.2_all.deb ...
Unpacking nginx (1.10.3-0ubuntu0.16.04.2) ...
Setting up nginx (1.10.3-0ubuntu0.16.04.2) ...
daichi@DESKTOP-DVVLKV9:~$

Nginxサーバは、システムにログオンしたらもう動いていてほしい。前回の記事(WSL新機能: バックグラウンドタスク cronを使う方法)を参考に、システムログオン時に自動的にUbuntu on WSLが起動するように設定を行った上で、さらに~/.bash_aliasesファイルに次の設定を追加する(sudoをパスワードなしで実行できるように設定しておく。この設定については前回の記事を参照されたい)。

■ ~/.bash_aliasesファイルに追加する内容

if ! service nginx status > /dev/null 2>&1
then
        sudo service nginx start > /dev/null 2>&1
fi

ここまで設定したら一度Windows 10を再起動して動作を確認してみる。次のようにシステムログオン時にすでにUbuntu on WSLが動作しており、nginxプロセスの動作が確認できればオッケーだ。

■システムにログオンしただけですでにnginxが動作している

daichi@DESKTOP-DVVLKV9:~$ ps auxww | grep nginx
root        62  0.0  0.0  56292     0 ?        Ss   18:41   0:00 nginx: master pr
www-data    63  0.0  0.0  56612     0 ?        S    18:41   0:00 nginx: worker pr
www-data    64  0.0  0.0  56612   188 ?        S    18:41   0:00 nginx: worker pr
daichi     124  0.0  0.0  13904  1108 tty2     S    18:43   0:00 grep --color=auto nginx
daichi@DESKTOP-DVVLKV9:~$

WSLで実行しているので、このプロセスはWindows 10からも単一のプロセスとして次のように認識されている。

Windows 10からUbuntuで動作するNginxプロセスの動作を確認

Linuxを結構ヘビーに使うようになってくると、こんな感じでシステムログオン時にすでに必要な環境が動作している状態になっていると、とても便利だ。

Webサーバの動作を確認

すでにWebサーバが動作しているので、Webブラウザからhttp://127.0.0.1/にアクセスすると次のようにNginxの動作を確認できる。

セットアップしたNginxにWindows 10からアクセス

Nginxの設定をちょっと変更すれば、次のようにNginxからWSLで動作しているLinuxファイルシステム上のファイルを閲覧できるようにもなる。

Windows 10のWebブラウザからUbuntu on WSLのファイルを一覧表示

Windows 10のWebブラウザからUbuntu on WSLのファイルを一覧表示

手持ちのWindows 10 PCやWindows 10ノートPCだけでWebシステム開発が簡単に実施できるというわけである。

応用範囲がグッと広がる

前回と今回でcronおよびNginxをシステムログオン時から自動的に動作させる方法を紹介した。紹介したのはこの2つのソフトウェアだけだが、基本的にはこの方法でほかにもたくさんのソフトウェアを動作させておくことができる。

バックグラウンドで動作させておけるようになると、WSLで動作しているLinuxの応用範囲はグッと広くなる。別途サーバを用意したり仮想環境で動作させたりすることなく、ある程度のことならWSLだけでこなせるようになるだろう。