皆さんはラズパイの開発元、ラズベリーパイ財団(Raspberry Pi Foundation)の公式ウェブサイトが、クラスター化されたラズパイで構築されているのを知っているでしょうか? なんと、このWebサーバは数千万人のアクセスが集中したRaspberry Pi 4の発売日を乗り切りました。驚きですね。早速、皆さんも手元にあるラズパイをWebサーバにしてみましょう。
目次
- クラスター化されたラズパイでウェブサービス
- なぜラズパイをWebサーバに?
- ラズパイに合うWebサーバは? Apache vs Nginx
- ラズパイがWebサーバに早変わり
- お好みの情報をウェブページに表示しよう
- 静的なコンテンツから動的なコンテンツへ
- ラズパイにPHPをインストールしよう
- ラズパイ+Apache+PHP+MySQLは本格的なWebサーバ構成
- まとめ
1. クラスター化したラズパイ(Raspberry Pi)が提供するウェブサービス
ラズベリーパイ財団の公式ウェブサイトを支えるWebサーバは、クラスター化したラズパイで構築されています。小さなラズパイでも、数を束ねれば強力なサーバマシンに匹敵するというのはすごいですね。
ただし、ラズベリーパイ財団が使うラズパイWebサーバは、データーセンターに設置された高信頼ハイエンドスイッチ・ロードバランサー・独自にカスタマイズされたOSイメージを組み合わせた少し特殊な事例です。
ラズパイをクラスター化すればサーバとしての性能は上がりますが、家庭向けのルーターとインターネット回線では通信速度や安定性が優れていても、同じようなサービスを提供するのは難しいでしょう。
セキュリティーも考えなければいけません。ラズパイを誰もがアクセス出来るインターネットに接続するということは、悪意のあるハッカー達に攻撃されることを意味します。もし、これをローカルネットワークに直結した状態で試してしまうと、LAN内部へ進入を許すことになり、極めて危険です。
ラズパイをWebサービスに利用するなら、ホスティング業者に管理を依頼するのがおすすめです。信頼性を必要とする業務目的のケースならなおさらです。
クラウドサービス事業者が、お試し無料で小規模のVPS(仮想専用サーバ)を提供しています。ITスタートアップ企業くらいになると、このレベルのインフラでは心許ない気もしますが、個人のブログや特定のコミュニティに向けたサービス、フリーランスのウェブサイトだったら十分実用的です。利用を検討してみましょう。もちろん、ラズパイで学んだLinuxの知識がそのまま活かせます。
2. なぜラズパイ(Raspberry Pi)をWebサーバに?
ラズパイはコストと消費電力に優れているので、Webサービスを搭載するサーバとする用途にも活用できます。
例えば、Webサービスのテスト環境としてラズパイを使えば、通信料やサーバのリソース・利用規約を気にすることもなく、思うまま自由に使える環境を作ることができます。通信ケーブルの物理的な抜き差しもできるので、実機に近いテストを行うこともできます。
小さなオフィスなら、社内のネットワーク上にWikiのような情報共有サービスを構築するのも有用です。(ただし、自動的にバックアップする仕組みを用意することをおすすめします)
Webサーバとサーバを組み合わせればIoTデバイスの試作も実現できます。ネットワークを通じたダッシュボードといった、離れた場所からのモニタ機能の実装も可能でしょう。
ラズパイにWebサーバを構築すれば、思いついたアイデアを簡単に実現することができます。早速、ラズパイにWebサーバソフトウェアをインストールして仕組みをマスターしましょう。
ただし、ローカルネットワークではIPアドレスとサーバの対応を管理するDNSサーバがない場合があります。その場合は「https://deviceplus.jp/」のような、ドメイン名ではアクセスできません。全てのパソコンの「hosts」と呼ばれるファイルを修正する方法もありますが、「http://192.168.1.2/」(ラズパイに割り当てられたアドレス)のような、IPアドレスで直接アクセスする方法が簡単です。
3. ラズパイ(Raspberry Pi)に合うWebサーバは? Apache vs Nginx
人気のあるWebサーバはApache(アパッチ)とNginx(エンジン・エックス)です。どちらもオープンソースで展開されているため、無料でインストールできます。
Apacheは1995年に登場し、以降インターネットの発展と歴史を共にしてきました。現在でも、WebサーバソフトウェアといえばApacheが真っ先に挙がるでしょう。
Webサーバは、アクセスによって内容が変化する動的なコンテンツを扱う必要があります。リクエストを受けたApacheが、PHPなどのプログラム言語を起動、その処理結果をブラウザに送り返すといった仕組みです。ApacheはPHPをモジュールとして内部に組み込むことで高速に動作します。
Apacheは分かりやすいマニュアルやフォーラムが数多く存在するため、多くのWebサーバに採用されています。
また、Apacheは個々のディレクトリ毎に設定を変えることができる、堅牢で柔軟な設計になっています。こうした設計思想は、これからWebサーバの仕組みを学んでいこうという人にも最適です。
ただしApacheは、大量な接続を同時に処理することが苦手と言われています。そこで、その欠点をカバーする設計思想のNginxが誕生しました。
Apacheのように動的コンテンツの処理は実装されていませんが、Nginxは予め作成してあるファイルの送出のような、静的なコンテンツの処理に優れた能力を発揮します。
ラズパイにどちらをインストールするか非常に迷うところですが、今回はApacheを選択しました。
Nginxは優れたWebサーバソフトウェアですが、前述したような、ローカルなネットワーク上で使う用途だと特徴はあまり活かされません。ただし、それなりの規模のWebサーバや拡張によって大規模化する場合などには、Nginxの採用も検討してみてください。
また、実用的なWebサーバでは、静的コンテンツを処理するフロントエンドにNginxを、動的コンテンツを処理するバックエンドにApacheというように、2つのソフトウェアを組み合わせることも良くあります。
そのほかのWebサーバ機能を提供するソフトウェア:
- Node.js(ラズパイには初期状態でインストール済み)
JavaScriptを使ってコーディングできる開発環境ですが、Webサーバソフトウェアとしても機能します。大量な接続を同時に処理することができるため、大規模なWebサーバを比較的容易に構築できます。また、ApacheやNginxといったWebサーバが既に稼働している環境での共存も可能です。 - Python http.serverモジュール(ラズパイには初期状態でインストール済み)
Pythonのテスト環境としての利用に向いています。特にPythonでWebアプリケーションを実装している際、ソースコードを数行追加するだけで、簡単にWebサーバとして動作します。 - Lighttpd
CPUの負荷や速度など、効率よく動作することを意識して作られたWebサーバソフトウェアです。組み込みシステムやIoTデバイスでの利用に向いています。
4. ラズパイ(Raspberry Pi)がWebサーバに早変わり
この記事ではラズパイのOSに「Raspbian Buster」を使用します。ApacheはさまざまなOSで動作するよう設計されているため、OSのバージョンが異なっていてもインストール方法は大きく変わりません。また、パッケージのインストールにはインターネット接続が必要です。
まずは、ターミナルを起動してOSを最新な状態に更新します。
sudo apt update && sudo apt upgrade -y
更新の完了後、Apacheをインストールします。
sudo apt install apache2 -y
ここでApacheのインストールが完了したか、ブラウザで確認してみましょう。
ラズパイのブラウザを起動して、アドレスバーに「http://localhost.com/」と入力してください。
ラズパイが接続しているローカルネットワーク上からアクセスする場合は、ラズパイのIPアドレスを事前に調べておく必要があります。通常のWebサーバはIPアドレスを固定しますが、IPアドレスが分からない場合は、ターミナル上で次のコマンドを入力してください。
hostname -I
「xxx.xxx.xxx.xxx」(xxxは1〜3桁の数字)といった表示を見つけてください。これがラズパイに割り当てられているIPアドレスです。このIPアドレスが、Webサーバを呼び出すURLになります。
ローカルネットワークに接続する別のPCからアクセスしてみましょう。ブラウザのアドレスバーに「http://192.168.1.2/」と入力します。「192.168.1.2」の部分は、先ほど調べたIPアドレスと置き換えてください。
ブラウザ上に次のようなページが表示されると思います。
ラズパイがローカルネットワーク上のWebサーバとして立派に機能しました。ちなみに、ラズパイのIPアドレスが自動で割り当てられている場合(DHCP)は、再起動の際など、IPアドレスが変わる可能性があります。変わるのを避けたい場合は、IPアドレスの割り当てを固定することで回避できます。
5. お好みの情報をウェブページに表示しよう
静的なコンテンツは簡単に内容を変えられるのが特徴です。ただし、静的なコンテンツはHTMLファイルを変更しない限り、何回アクセスしても全く同じページが表示されます。
HTMLファイルを少し修正してみましょう。ターミナルから次のコマンドを入力してください。
sudo nano /var/www/html/index.html
スクロールして「Apache2 Debian Default Page」と書かれている行を見つけてください。そこを好きな文字列に書き換えましょう。
保存後、先ほどのブラウザ画面を再度読み込んでください。
表示された内容が書き換わっているはずです。
ウェブサイトの構築といっても、公開したいHTMLファイルをディレクトリ「/var/www/html/」内に配置するだけです。面倒なことはApacheが処理してくれます。
静的なコンテンツは保守性も良く高速で、多くの情報を提供できます。簡単なブログ、会社案内、ランディングページなどは、これだけでも十分に実用的です。
6. 静的なコンテンツから動的なコンテンツへ
用途によっては、同じ情報を表示するだけ(静的コンテンツ)では物足りなくなるとおもいます。このような場合は、プログラムによって状況に合わせたコンテンツ(動的コンテンツ)を生成するようにします。
動的コンテンツは、Wikiなどの情報共有サイトや、コメント投稿ができるブログなど、ユーザーがブラウザ側から編集や情報の追加ができるものが該当します。
ラズパイと動的なコンテンツを扱うことができるWebサーバの機能を組み合わせれば、インターネットやデータベースから集めた情報や、GPIOピンに接続された機器の状態を表示するとダッシュボードの機能も実装できます。
動的コンテンツの作成にはさまざまなプログラミング言語が利用できます。C++やC、Javaといった本格的な言語だけでなく、PHPやPerl、Python、Rubyなど多くのスクリプト言語でも実装することが可能です。
初めに触れるなら、WordPressにも採用されているPHPがおすすめです。また、日本ではあまり見かけませんが、オープンソースのCMSとしては、Joomla!やDrupalといったフレームワークもWordPressと並んで人気が高く、これらもPHPで実装されています。
7. ラズパイ(Raspberry Pi)にPHPをインストールしよう
以下のコマンドを入力するだけで、PHPにApacheのモジュールをインストールできます。
sudo apt install php libapache2-mod-php -y
早速、PHPが正しくインストールされたか確認してみましょう。先ほどのHTMLファイルをPHPで書かれたソースコードに置き換えます。
「index.html」を削除して、新たに「index.php」を作成します。nanoにファイル名を指定すれば、新しいファイル「index.php」が作成されます。
sudo rm /var/www/html/index.html sudo nano /var/www/html/index.php
以下の一行を入力し保存します。
<?php phpinfo(); ?>
先ほどのブラウザ画面を再度読み込んでください。PHPの関数「phpinfo()」の出力結果が表示されます。
8. ラズパイ(Raspberry Pi)+Apache+PHP+MySQLは本格的なWebサーバ構成
ここまででも、十分に実用的なWebサーバですが、より実践的なWebサーバに近づける方法も試してみましょう。
一般的にウェブページはHTMLとCSS、JavaScriptを組み合わせて作成します。BootstrapといったJavaScriptを使ったフレームワークは、数多くのライブラリーが用意されているので、手軽に凝ったウェブページが作成できます。
もしHTMLやCSSを作成することが面倒なら、最近ではHugoのような静的サイトジェネレータを利用してみるのもいいでしょう。
静的なコンテンツの作成に慣れてきたら、次は動的コンテンツの作成です。動的コンテンツを使った実用的なサービスには、データベースが不可欠です。ラズパイに構築したWebサーバに、MariaDB(MySQL)を追加すれば、LAMP(Linux、Apache、MySQL、PHPの頭文字)と呼ばれる、Webサーバで広く使われている構成を実現できます。CMSとして有名なWordPressなどもこの構成です。この組み合わせをマスターすれば、Wikiサイトやフォーラムの運営なども可能となります。
PHPよりPythonのプログラミングに慣れている人もいるでしょう。Pythonを使ったIoTデバイスやホームオートメーションコントローラーを作ることもできます。
ただし、ApacheとPythonの組み合わせは少し複雑です。PythonにもApacheのモジュールが開発されていますが、PHPと比べあまり普及が進んでいません。今のところはCGIとしてPythonで作成したプログラムを実行する方が簡単でしょう。
もし、CGIでPythonのプログラムが起動できない場合は、Apacheを通さないPythonのhttp.serverモジュールを利用する方法もあります。ただしhttp.serverモジュールは、ややテスト向けといった色合いが強いので、本格的な運用ではDjangoやFlaskのようなフレームワークを使うのがおすすめです。Flaskは提供する機能を最小限に絞っているためDjangoより軽量に動作します。
9. まとめ
いかがでしたか?
ラズパイにWebサーバを構築するメリットや、Webサーバを構成するソフトウェアの概要を解説しました。また、IPアドレスが固定されていないラズパイでも、Webサーバとして十分に機能することをご理解いただけたでしょう。
以上はほんの概要です。ラズパイとWebサーバの組み合わせは、色々なアイデアを形にすることができる最強の組み合わせだと思いませんか? 皆さんも、ぜひWebサーバをマスターしてください。