Raspberry Pi初心者がWebサーバを構築するまでの記録

今回は、前回の SSH 接続構築に続き、 Raspberry Pi を Web サーバとして動かす環境づくりに挑戦した内容をまとめます。

過去の投稿はこちらから

第1回
Raspberry Pi初心者がリモート接続できるまでの記録 | Techno-core Blog
第2回
Raspberry Pi初心者がSSH接続環境を構築するまでの記録 | Techno-core Blog

IoT 開発では、センサー情報を Web 画面で確認したり、
外出先から状態をチェックしたりする場面が多くあります。
そのため、Web サーバ構築は “スマートホーム化” の基盤となる重要なステップです。

これから Raspberry Pi を使って Web サーバを作ってみたい方の参考になれば嬉しいです。

Webサーバとは?

Webサーバとは、 ブラウザからアクセスしたユーザーに Web ページを返す仕組みのことです。

Raspberry Pi では以下のような用途で活用できます。

  • 自宅内の IoT デバイスの状態を表示
  • センサー値のリアルタイムモニタリング
  • 自作アプリの公開
  • ローカルネットワーク内の簡易サイト運用

今回は、軽量で高速な Nginx(エンジンエックス) を使って構築します。

なぜ Nginx を選んだのか?

Web サーバには Apache と Nginx の2大選択肢がありますが、 Raspberry Pi のような軽量デバイスでは Nginx が圧倒的に相性が良いです。

  • 軽量で高速
  • 同時アクセスに強い
  • 設定ファイルがシンプル
  • IoT用途の小規模サーバに最適

実際に使ってみても、起動が速く、負荷も少なく、非常に扱いやすい印象でした。

Webサーバ構築の実手順

ここからは、実際に私が行った手順を細かくまとめていきます。

1. Raspberry Pi のアップデート(ここでトラブル発生)

まずは OS を最新状態にしておくため、以下を実行しました。

予定した手順通りnginxのインストールをしようとすると下記エラーが発生。
※nginxインストールについては後述してます。

【エラー内容】
E: ロック /var/lib/dpkg/lock-frontend が取得できませんでした。

何が起きたかわからず一瞬、茫然自失となりましたが、
気を取り直してログを見てみるとアップデートができていないことが発覚。
ここからトラブルシューティングが始まります。

◆トラブルシューティング:apt/dpkgのロック問題と404エラー

原因の切り分け
まず、apt が他のプロセスによって使用中かどうか確認。

ps aux | grep apt

すると、 apt update が裏で動き続けていることが判明。

これがロックを掴んでいたため、 新しい apt コマンドが実行できなかったわけです。

●① まずはプロセスが終わるまで待機

apt updateは SDカードの速度やネットワーク状況によって 数分〜数十分かかることがあります。

強制終了は OS を壊す可能性があるため、 まずはしばらく待機しました。

●② dpkg の状態を修復

プロセスが終了した後、dpkg の整合性を確認。

sudo dpkg --configure -a

ここで /etc/default/useradd の設定ファイルについて 「新しい設定を使うか?」「今の設定を残すか?」 と聞かれましたが、今回は N(現在の設定を残す) を選択。

/etc/default/useraddは新規ユーザー作成時のデフォルト値を
 あらかじめ設定しておくファイルです。
 こちらは特段修正などしていなかったためNを選択しました。

●③ ロックファイルの削除

sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/dpkg/lock

●④ apt キャッシュの修復

sudo apt clean
sudo rm -rf /var/lib/apt/lists/*
sudo apt update
sudo apt upgrade -y

これで 404 エラーも解消し、
apt が正常に動作する状態に戻りました。

◆トラブルを乗り越えて、再び Web サーバ構築へ

アップデートが正常に完了したため、
ここから本来の Web サーバ構築に戻ります。

2. Nginx のインストール

Raspberry Pi OS では、Nginx が標準リポジトリに含まれています。

インストールが完了すると、自動でサービスが起動します。

3. Nginx の起動確認

サービスの状態を確認します。

active (running) と表示されていれば成功です。

4. Webブラウザからアクセスしてみる

Raspberry Pi の IP アドレスを確認します。
以下のコマンドで確認する事ができます。

hostname -I

同じネットワーク内の PC からブラウザを開き、
以下の URL にアクセスします。

すると、Nginx の初期ページ(Welcome to nginx!)が表示されます。

これで Web サーバが正常に動作していることが確認できました。

5. 自作ページを配置する

Nginx の公開ディレクトリは以下です。

/var/www/html/

初期ページを削除して、自作ページを配置します。

●① 初期ファイルを削除

sudo rm /var/www/html/index.nginx-debian.html

●② 新しい index.html を作成

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>My Raspberry Pi Web Server</title>
</head>
<body>
    <h1>Raspberry Pi Web Server</h1>
    <p>This page is Running on a Raspberry Pi!</p>
</body>
</html>

保存後、再度ブラウザでアクセスすると、 自作ページが表示されます。

6. Nginx の設定ファイルを編集する

Nginx の設定ファイルは以下です。

/etc/nginx/nginx.conf

また、サイトごとの設定は以下にあります。

/etc/nginx/sites-available/default

●① 設定ファイルを開く

●② ルートディレクトリの確認

必要に応じて変更できます。

7. Nginx の再起動

設定変更後は再起動します。

8. ファイアウォール設定(必要な場合)

家庭内 LAN では不要ですが、
UFW を使う場合は以下を許可します。
今回はスキップしました。

9. Webサーバが正しく動作しない場合のチェックポイント

実際に構築してみて、つまずきやすいポイントもまとめておきます。

●① ポート80がブロックされていないか?

ポート80はHTTPプロトコルなので
 こちらがブロックされていると
 ブラウザからのアクセスができなくなってしまいます。

●② 設定ファイルの構文チェック

Web サーバ全体が起動しなくなるため、
 起動前に安全確認するためです。
 セミコロンの付け忘れやスペルミスなど。

エラーがあれば表示されます。

●③ 権限の問題

公開ディレクトリの権限を確認します。

Nginx が Web ページを読み込めず “表示されない”
 という事態を防ぐため
 403や404、Nginxのエラーページなどが表示される可能性があります。

必要に応じて所有者を変更します。

今後の展望

Web サーバが構築できたことで、 次のステップとして以下の開発を進める予定です。

  • Python でセンサー値を取得し Web に表示
  • API サーバ化して外部アプリと連携
  • 外出先からアクセスできるよう VPN を構築
  • スマートホーム化のための制御画面作成

特に IoT 開発では、 Web サーバは “情報を見える化するための中心” となるため、 今回の構築は大きな一歩となりました。

まとめ

今回の Web サーバ構築を通して、以下の点を強く実感しました。

  • Raspberry Pi は Web サーバとして十分実用的
  • Nginx は軽量で高速、初心者でも扱いやすい
  • SSH と組み合わせることで開発効率が大幅に向上
  • IoT 開発の基盤として Web サーバは必須

次回は、いよいよ センサー連携(気温・室温・臭気検知) に挑戦する予定です。 引き続き、学んだことをブログで発信していきます。

コメント

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です