今回は、前回の 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 サーバは必須
次回は、いよいよ センサー連携(気温・室温・臭気検知) に挑戦する予定です。 引き続き、学んだことをブログで発信していきます。
コメントを残す