簡単!Raspberry Pi で Web サーバーを作る!
Raspberry Pi をデスクトップ PC 代わりに利用するのは、普段利用している PC と余り違いがないのであまり面白みがありません。そこで、この記事では、Raspberry Pi を Web サーバーとして利用する例を紹介します。
Web サーバーって何?
今更ですが、Web サーバーとは何かご存知ですか? 専門的な言い方をすれば Web サイトのサービスを提供するサーバーです。
もう少し分かりやすく言うならば:
* Web サイトのコンテンツ(中身)を置いておくためのコンピュータ
* Web ブラウザから要求されたリンク(URL)の情報を提供する
と言う仕事をしています。 通常 Web サイトを作る場合は、ホスティングサービスをする業者のサーバー(コンピュータ)を間借りしてそこに、Web サイトの中身を置いて Web サイトを運営するのが普通です。
多くのサイトでは、間借りしているサーバーに Web サイトの中身のファイルを送る仕組みを提供して後は業者側が設定していると言う仕組みがほとんどで、特に Web サーバーの知識がなくても Web サイトを作れるようになっています。 もう少し本格的なサービス(AWS など)になると、Web サーバーの OS にアクセスできるので自分で細かい設定をする事ができるようになっています。
Web 開発でも、殆どの場合 Web サーバーの設定はそれほど意識をしなくても、Web サイトや Web アプリを作れるので余り意識をしない場合が殆どです。実際、サーバーの知識がなくても、少なくてもフロントエンドの開発は余り問題なくできます。 しかし、バックエンドのサービスを作ったり、フルスタックのエンジニアを目指す場合、サーバー側の知識があるのとないのでは大きな差が出てきます。サーバー側の設定の実験などは、最近では、仮想マシーン(VM:Virtual Machine)を利用すれば簡単に学習できます。しかし、同じコンピュータ内で動いていることと、仮想マシーンを開発用の PC で動かすとメモリなどのリソースがたくさん必要になるのでなかなか試せない場合も多くなります。
Raspberry Pi を Web サーバーに見立てて設定をすると、開発用の PC のリソースを機にする必要もありませんし、完全に別のコンピュータが Web サーバーの役割をするので、直感的にも分かりやすくなります。そこで、この記事では Raspberry Pi を Web サーバーにする例を紹介することにしました。
実は簡単に設定できる Web サーバー
今回は、Web サーバーを自分の家の中で作る方法を紹介します。 実は、Web サーバーをインターネットからアクセスできるようにするには、基本的にインターネットに接続可能な「IP アドレス」が必要になります。しかし、ほとんどの家庭の場合は、インターネットに直接つながる IP アドレスを割り当てられていない場合も多いので、今回は、家の中のネットワークに限定したサーバーの設定に絞ってお伝えしていきます。
Web サーバーといっても特別なコンピュータと言うわけではありません! 普通のコンピュータに Web サーバーのサービスをするソフトウエアをインストールして設定するだけで Web サーバーに早変わりします。
Linux 系の OS でよく利用されている Web サーバーのサービスをするパッケージはApacheとNginxが有名です。どちらも、無料で利用できます。この記事では、Neginxを利用する例を紹介します。
Nginx のインストール
今回は、Raspberry Pi に Ubuntu 系の Linux を入れた例を紹介します。
サーバー版の Ubuntu を Raspberry Pi にインストールした場合には、別のコンピュータから SSH でリモートログインします。 私の場合は、Ubuntu のデスクトップ版をインストールしているので、普通に Raspberry Pi を立ち上げて、ウインドウシステム上でターミナルからコマンドを実行します。
インストールは簡単で以下のコマンドを実行するだけです。
$ sudo apt update
$ sudo apt install nginx
これだけです!デスクトップ版の Ubuntu を利用している場合には、Raspberry Pi 上で Web ブラウザを開いて、「localhost」にアクセスすると、「Welcome to nginx!」が表示されるはずです。これだけで、Web サーバーのサービスがインストールされてサービスが自動的に起動されます。簡単ですね!
では、他の PC からアクセスしてみましょう! まずは、Raspberry Pi に割り当てられた IP アドレスを調べる必要があります。 「_ip a_」と言うコマンドを実行すると IP アドレスがわかります。 以下が実行例です。
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether dc:a6:32:ef:3c:6d brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether dc:a6:32:ef:3c:70 brd ff:ff:ff:ff:ff:ff
inet 192.168.86.218/24 brd 192.168.86.255 scope global dynamic noprefixroute wlan0
valid_lft 83337sec preferred_lft 83337sec
inet6 fe80::52df:bda9:72c1:7ea7/64 scope link noprefixroute
valid_lft forever preferred_lft forever
$
この Raspberry Pi では三つ12のネットワークのインターフェースが動いています。 それぞれに番号が振られて表示されています。
* 1: lo これは Raspberry Pi の OS 内での設定です。
* 2: eth0 これは、LAN ケーブルによる接続ですが、この Raspberry Pi には LAN ケーブルを接続していません
* 3: wlan0 これは WiFi(ワイヤレス LAN)の情報で、ここにある「192.168.86.218」というのが Raspberry Pi の IP アドレスになります
何にかわかりづらいですが、1番の lo は、「127.0.0.1」という IP アドレスになっていますが、これは、ブラウザで「localhost」を指定したときに利用されます。「localhost」の代わりに「127.0.0.1」と指定しても同じ結果になります。2番の eth0 は LAN ケーブルを接続して利用している場合に使います。LAN ケーブルを接続したネットワークを利用している場合は、この欄に表示される IP アドレスを利用します。今回の例の場合は、WiFi でネットワークに接続しているので、3番の wlan0 の IP アドレスを利用します。
Web ブラウザで「192.168.86.218」を指定すると、別のコンピュータから先ほど「localhost」で表示されたページと同じページが表示されるはずです!
やってみてください。
ほとんどの場合ページが表示されないはずです!どうしてでしょう?
ファイアウォールがブロックしている!
実は、Raspberry Pi の OS のファイアウォールが外部のコンピュータからのアクセスをブロックしているため、ほとんどの場合は表示されません。(予めファイアウォールの設定がされている場合は表示されます。)
従って、外部のコンピュータからアクセスできるようにするには、Raspberry Pi の OS のファイアウォールの設定が必要です。 Ubuntu ではufwというファイアウォールのサービスがこの管理をしています。 まずは、ufw が認識しているサービスの一覧を見てみます。
$ sudo ufw app list
Available applications:
CUPS
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
この中で、まずは「Nginx HTTP」のサービスを有効にします。
$ sudo ufw allow 'Nginx HTTP'
Rule added
Rule added (v6)
これで、Nginx HTTP のアクセスが許可されました。もう一度、別の PC から「192.168.86.218」を Web ブラウザで指定してみてください。今度は表示されるはずです。
サイトの中身はどこに?
では、表示されているサイトの中身はどこにあるのでしょうか?
インストール後の標準設定では、Raspberry Pi の中の「/var/www/html」というフォルダに「index.nginx-debian.html」というファイルがありますが、このファイルが表示されている Web ページの実態です。
基本的には、このフォルダに必要な HTML ファイルや CSS ファイル、Javascript などを置いておけば、Web サイトとして機能させる事ができます。また、設定ファイルを変更することで、Web サイトの中身を置くフォルダを変更する事もできます。 今回の Ubuntu のインストールでは、「/etc/neginx」の下に設定ファイルが置かれていますので、必要に応じて変更を行えば設定を変える事ができます。
まとめ
この記事では、まずは、Raspberry Pi を Web サーバーにする基本設定を紹介してきました。 設定自体はとてもシンプルで簡単です。
実際に Web サイトとして機能させるためには、Web サイトの中身を置くフォルダの設定や、Web サイトの中身のファイルをどのように Raspberry Pi に送るかなど、細かな設定が必要になります。
今後の連載で、ファイルを Raspberry Pi に送る方法などを紹介していきます。お楽しみに!