Raspberry Pi で信頼性の高い Web サーバを構築するステップバイステップガイド
Raspberry Pi を自宅/オフィス/クラウドのWebサーバ(LAMP/LEMPスタック)として運用する手順を、最新OS (Raspberry Pi OS Bookworm / Bullseye) 対応で解説します。Zero W から Pi 4/5 まで全モデル対応。セキュリティ・パフォーマンス・運用自動化のベストプラクティスも併記。
前提条件
- Raspberry Pi (全モデル対応:Zero W/Zero 2W/3B+/4/5 等)
- microSDカード (8GB以上、Class 10/A1/A2推奨)
- Raspberry Pi OS (64bit版推奨) インストール済み、初期設定完了
- 有線LANまたはWi-Fiでインターネット接続済み
- SSHアクセス可能、またはモニタ/キーボード接続
ステップ 1:ターミナルアクセス
- ローカル: Ctrl+Alt+T でターミナル起動
- リモート:
ssh pi@(初期ユーザーpi、初期パスワードraspberry※変更済みなら新パスワード) - 初回ログイン時は
passwdでパスワード変更強く推奨
ステップ 2:パッケージ更新
sudo apt update && sudo apt full-upgrade -y
最新セキュリティパッチ・カーネル・ファームウェア適用。再起動推奨:sudo reboot
ステップ 3:Webサーバ (Apache) インストール
sudo apt install apache2 -y
- 自動で systemd サービス登録・起動・自動起動設定
- ドキュメントルート:
/var/www/html/ - 設定ファイル:
/etc/apache2/apache2.conf,/etc/apache2/sites-available/000-default.conf
動作確認
ブラウザで https:// アクセス → "Apache2 Debian Default Page" 表示で成功。
ステップ 4:PHP インストール (動的コンテンツ用)
sudo apt install php libapache2-mod-php -y
- 一般的拡張も併せて導入推奨:
sudo apt install php-mysql php-curl php-gd php-xml php-mbstring php-zip php-intl -y - 設定反映:
sudo systemctl restart apache2
PHP動作テスト
echo "" | sudo tee /var/www/html/info.php
ブラウザで https:// → PHP情報表示確認後、必ず削除 (sudo rm /var/www/html/info.php)。
ステップ 5:データベース (MariaDB/MySQL) インストール
sudo apt install mariadb-server -y
- Raspberry Pi OS では MariaDB がデフォルト (MySQL 互換、高性能・オープン)
- 初期設定・セキュリティ強化:
sudo mysql_secure_installation
mysql_secure_installation 対話例
Enter current password for root (enter for none): [Enter]
Switch to unix_socket authentication? [Y/n] Y
Change the root password? [Y/n] Y
New password: [強力パスワード入力]
Re-enter new password: [再入力]
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database? [Y/n] Y
Reload privilege tables? [Y/n] Y
ステップ 6:Apache 再起動・設定反映
sudo systemctl restart apache2
ステップ 7:Webサーバ動作テスト
https:// でアクセス。デフォルトページ表示なら成功。
コンテンツ配置・権限設定
# ドキュメントルート所有者を pi ユーザーに変更 (SFTP/直接編集用)
sudo chown -R pi:www-data /var/www/html
sudo chmod -R 775 /var/www/html
# 新規ファイルもグループ書き込み可に
sudo find /var/www/html -type d -exec chmod g+s {} \;
ホスト名変更 (複数Pi運用時の識別用)
# CLI での変更 (推奨)
sudo raspi-config
# 1 System Options → S4 Hostname → 新ホスト名入力 → OK → Finish → 再起動確認 Yes
# または直接
sudo hostnamectl set-hostname myraspserver
sudo sed -i 's/raspberrypi/myraspserver/g' /etc/hosts
sudo reboot
再起動後、https://myraspserver.local/ (mDNS/Avahi/Bonjour対応環境なら) でアクセス可能。
FTP / SFTP サーバ構築 (リモート開発・デプロイ用)
SFTP 推奨 (FTP 非推奨: 暗号化なし、認証情報平文)
- SSH有効化済みなら SFTP 即利用可能 (ポート22)
- クライアント: FileZilla, WinSCP, Cyberduck, VS Code SFTP拡張等
- 接続: プロトコル SFTP、ホスト
、ユーザー pi、パスワード/鍵認証 - デフォルトで
/home/piにアクセス。Webコンテンツ編集は/var/www/htmlへ移動
VS Code Remote - SSH で直接編集 (最推奨)
- 拡張機能「Remote - SSH」インストール
- SSHホスト追加 → 接続 → リモートで
/var/www/html開発・デバッグ・Git管理 - ファイル転送不要、ローカル同等の開発体験
セキュリティ・運用・パフォーマンス強化 (本番運用必須)
1. HTTPS 化 (Let's Encrypt + Certbot)
sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
# 自動更新: sudo systemctl enable certbot.timer
2. ファイアウォール (ufw)
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enable
3. Fail2Ban (ブルートフォース対策)
sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local で [sshd] enabled=true 等設定
sudo systemctl enable fail2ban --now
4. PHP/Apache チューニング
- PHP-FPM (php8.2-fpm 等) + Apache mpm_event へ切替でメモリ/並列性改善
- OPcache 有効化 (
opcache.enable=1等/etc/php/8.2/fpm/php.ini) - Apache:
KeepAlive On,MaxRequestWorkers調整
5. データベースチューニング
sudo mysql -u root -p→SHOW VARIABLES LIKE 'innodb_buffer_pool_size';物理メモリの 50〜70% 設定- スロークエリログ有効化、定期解析
6. バックアップ自動化
# 日次バックアップスクリプト例 (cron 登録)
#!/bin/bash
DATE=$(date +%F)
mysqldump -u root -p'PASSWORD' --all-databases | gzip > /backup/db_$DATE.sql.gz
tar -czf /backup/www_$DATE.tar.gz /var/www/html
# 古いバックアップ削除 (30日以上)
find /backup -name "*.gz" -mtime +30 -delete
7. 監視・ログ
- Netdata / Prometheus+Grafana / Zabbix エージェント導入
journalctl -u apache2 -f,/var/log/apache2/access.log/error.log監視
代替スタック: Nginx + PHP-FPM (LEMP) — 高負荷・低メモリ環境向け
sudo apt install nginx php-fpm mariadb-server -y
# nginx 設定: /etc/nginx/sites-available/default で fastcgi_pass unix:/run/php/php8.2-fpm.sock;
sudo systemctl enable nginx php8.2-fpm mariadb --now
Nginx は静的ファイル高速配信・低メモリ・高並列に優位。Pi 4/5 (4GB/8GB) なら Apache も十分実用的。
結論
Raspberry Pi で LAMP/LEMP スタックを構築し、自宅/オフィス/VPN経由でアクセス可能な Web サーバを運用する手順を網羅しました。「動く」から「安心して運用できる」へは、HTTPS化・ファイアウォール・Fail2Ban・バックアップ・監視の 5 点セット実装が鍵です。Zero W なら消費電力数Wで 24/365 運用可能。IoT ゲートウェイ、ホームオートメーション ダッシュボード、個人ブログ、開発用ステージング等、用途は無限大です。
サーバ構築・セキュリティ診断・パフォーマンスチューニングでお困りなら、専門エンジニアがサポートします。お気軽にお問い合わせください。
産業技術
- Python、SQLite、LabVIEWによるRaspberry Pi高精度温度プロファイリング
- Raspberry PiでTMP006赤外線温度センサーを使う – Pythonライブラリとセットアップガイド
- Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
- Raspberry Pi 3とPubNubでリモート気象監視
- TI SensorTagをNode-RED経由でBlynkと統合 – Raspberry Pi Zero編
- Raspberry PiでPIRモーションセンサーとLEDを制御
- Raspberry PiでGPIO経由のボタン押下を読み取り - ステップバイステップガイド
- Raspberry PiとTwilioで実現するトイレ占有センサー:音声通話とSMSで通知
- Raspberry Piダッシュボードで家庭の温度を監視する
- LIRCなしでRaspberry PiにIRリモコンを接続 - Python UARTアプローチ
- MCP3008 ADCでRaspberry Piにアナログセンサーを読み取る