はじめに
本書の目的
この文書は、VirtualBox上でWebサーバー(ApacheやNginx)を構築する手順をわかりやすく示します。仮想マシンの作成からOSのインストール、ネットワーク設定、Webサーバーの導入と起動、ファイアウォール設定、アクセス確認までを一通り扱います。開発や検証環境として使うことを想定しています。
対象読者
PCの基本操作ができ、ソフトのインストール経験がある方を想定します。サーバー運用の専門家でなくても、手順に沿えば構築できるよう丁寧に説明します。
本章で伝えたいこと
まず全体の流れと到達点を把握してください。各章で必要な準備や操作を順に示します。迷ったらスナップショットを取り、設定を戻せるようにしてください。
注意点
この手順は開発・検証向けです。本番運用は想定しません。ホストPCのリソース配分やネットワーク設定は慎重に行ってください。
仮想Webサーバー構築の概要
概要
VirtualBoxなどの仮想化ソフトで自分のPC上に仮想マシン(VM)を作り、その中にLinuxを入れてApacheやNginxを動かす手法は、開発やテストでとても有用です。本番運用を目的とせず、ローカルや社内で動作確認や検証を行う場面でよく使われます。
利点
- 環境を簡単に再現できます。設定やソフトのバージョンを固定して動作確認ができます。
- ホスト環境に影響を与えずに実験できます。失敗しても元に戻せます。
- スナップショットで状態を保存し、短時間で復元できます。
主な利用例
- Webアプリの動作確認やデバッグ
- 新しいソフトや設定の試験導入
- 教育や社内のハンズオン
全体の流れ(簡易)
- VirtualBoxなどをインストール
- 新規VMを作成してLinuxをインストール
- SSHやネットワークを設定
- Apache/Nginxをインストールして公開
ネットワークのポイント
- NATは外部とのやり取りを簡単にしますが、ホストからのアクセス設定が必要です。
- ブリッジ接続は社内ネットワーク内で他の端末から直接アクセスできます。
注意点
- セキュリティ設定やファイアウォールは必ず確認してください。ローカル用でも不用意に公開しないようにします。
- 本番向けの負荷や可用性は期待しないでください。
構築準備:必要なソフト・環境
対象ホストOS
- Windows、macOS、LinuxのいずれでもVirtualBoxが使えます。まずホストPCの空き容量とメモリを確認してください。
必要なソフト
- Oracle VirtualBox本体を公式サイトからダウンロードしてインストールします。拡張機能(Extension Pack)はUSBパススルーやRDPが必要な場合に追加してください。
仮想化の有効化
- BIOS/UEFIで「Intel VT-x」や「AMD-V」を有効にします。無効だとゲストOSが正常に動きません。
ゲストOS(ISO)の準備
- AlmaLinux、Ubuntu、CentOSなど用途に合わせてISOイメージを公式サイトから取得します。ダウンロード後はハッシュ値(SHA256など)で整合性を確認すると安全です。
仮想マシン作成時の目安
- メモリ:1GB(軽めのテスト)〜2GB(余裕あり)。
- ディスク:8GB(最小)〜20GB(ゆとり)。
- CPU:1〜2コアで十分。パフォーマンスが必要なら増やしてください。
ネットワークと共有設定の確認
- ネットワークは「NAT」「ブリッジ」「ホストオンリー」などを用途に応じて選びます。ローカルからアクセスするならブリッジかホストオンリーを検討してください。
- 共有フォルダーはファイルのやり取りに便利です。ゲスト追加機能(Guest Additions)を入れると利用できます。
その他の注意点
- スナップショットを使うと設定ミスから戻れます。初期状態で一つ作成しておくと安心です。
仮想マシンのネットワーク設定
概要
仮想マシンをネットワークにつなぐ方法は主に二つあります。NATアダプターはゲストOSがインターネットに出られるようにして、ホストから特定ポートでアクセスできるようにポートフォワーディングを設定します。ブリッジアダプターはゲストをホストと同じLANに参加させ、直接IPでアクセスできます。
NATアダプターとポートフォワーディング
- 用途:ゲストが外に出られる一方、外部から直接アクセスさせたくない通常の使い方に向きます。\
- 例:ホストの8080番→ゲストの80番(HTTP)。ホストのブラウザでhttp://localhost:8080にアクセスするとゲストのWebサーバーに届きます。
設定手順(VirtualBoxの例)
- 仮想マシンの設定を開く→「ネットワーク」。
- アダプター1を「NAT」に設定。
- 詳細→「ポートフォワーディング」を開き、新規ルールを追加。ホストポートに8080、ゲストポートに80、プロトコルはTCPを指定。
VMwareではVirtual Network EditorやNAT設定で同様にポート転送を行います。
ブリッジアダプター
- 用途:ゲストをルーター/スイッチにつながるPCと同じネットワークに参加させたい場合に使います。
- 設定:ネットワークアダプターを「ブリッジ」に切り替えるだけで、DHCPからIPが振られます。割り当てられたIPを使って直接アクセスできます。
IP確認と接続テスト
- Linuxゲスト:ip addr または ifconfig、Windowsゲスト:ipconfigでIPを確認。
- ホストからはブラウザやcurlでテスト。ポートフォワーディング時はhttp://localhost:8080、ブリッジ時はhttp://<ゲストのIP>。
セキュリティの注意
- ポート開放は最小限にし、不要になったら削除してください。ゲスト側とホスト側のファイアウォールも適切に設定してください。
ゲストOSのインストールと初期設定
1. ISOイメージからの起動
ダウンロードしたISO(例:Ubuntu 20.04、CentOS 7)を仮想マシンに割り当て、光学ドライブから起動します。画面の指示に従い、言語・タイムゾーン・キーボードを選びます。インストールタイプは最小構成(Minimal)を選ぶと後の管理が楽です。
2. パーティションとユーザー作成
自動パーティションを利用すれば初心者でも簡単です。インストール時に管理者(root)パスワードと通常ユーザーを作成します。通常ユーザーにsudo権限を付与して運用することを推奨します。
3. 初回起動後の基本設定
・パッケージを最新に更新(Ubuntu: sudo apt update && sudo apt upgrade、CentOS: sudo yum update)。
・ホスト名を設定(sudo hostnamectl set-hostname your-hostname)。
・タイムゾーンと時刻同期を確認(timedatectl)。
4. SSHの設定(リモート接続)
SSHを有効にして、まずはパスワードで接続確認します。公開鍵認証へ移行する手順:ローカルでssh-keygenにより鍵を作成し、ssh-copy-idで公開鍵をサーバーに登録します。/etc/ssh/sshd_configでPasswordAuthenticationをnoに変更し、rootLoginをprohibit-passwordまたはnoに設定してからsshdを再起動します。
5. セキュリティの初期対策
・不要なサービスは停止・無効化します。・ファイアウォール(ufwやfirewalld)は次章で説明しますが、最低限SSHポートのみ許可するようにしてください。・自動アップデートを検討すると安全性が向上します。
Webサーバー(Apache/Nginx)のインストール
概要
仮想マシン上でWebサーバーを動かすには、ApacheかNginxを導入します。ここでは代表例としてCentOSでのApache、UbuntuやAlmaLinuxでのNginxの手順を示します。コマンド例と確認方法を分かりやすく記載します。
Apache(CentOSの場合)
- ゲストOSにログインします。
- パッケージを更新してインストールします。例:
sudo yum update -y
sudo yum install httpd -y
- サービス状態を確認・起動・自動起動設定:
sudo systemctl status httpd
sudo systemctl start httpd
sudo systemctl enable httpd
- ドキュメントルートは通常/var/www/htmlです。ファイルを配置してブラウザで確認します。
Nginx(Ubuntu/AlmaLinuxなど)
Ubuntuの例:
sudo apt update
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
AlmaLinux(dnf)の例:
sudo dnf install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
動作確認と補足
- サービスが起動していれば、ブラウザでゲストOSのIPにアクセスするとデフォルトページが表示されます。
- 仮想マシン側やホストのファイアウォールで80/443が開いている必要があります。
- SELinuxが有効な環境では権限でアクセスが阻止されることがあります。必要ならコンテキストを調整してください。
以上で基本的なインストールと起動の手順は完了です。さらに設定したい項目があれば次章で扱います。
ファイアウォールとポート開放
目的
Webサーバーへ外部からアクセスできるように、ゲストOS側のファイアウォールでHTTP(80番)やHTTPS(443番)など必要なポートを開放します。不要なポートは閉じたままにして、最低限の開放に留めます。
事前確認
1) 現在のルール確認: 実行中のファイアウォールと設定状況を確認します(例: ufw status, firewall-cmd –list-all, Windowsのファイアウォール設定)。
2) サーバーのIPアドレスを確認します。
Ubuntu(ufw)の例
1) ufwを有効化: sudo ufw enable
2) HTTP開放: sudo ufw allow 80/tcp
3) HTTPS開放: sudo ufw allow 443/tcp
4) 状態確認: sudo ufw status
CentOS/RHEL(firewalld)の例
1) 永続的に開放(例: http): sudo firewall-cmd –permanent –add-service=http
2) 反映: sudo firewall-cmd –reload
3) 確認: sudo firewall-cmd –list-all
Windowsの例
1) 「Windows Defender ファイアウォール」→「詳細設定」で受信のルールを追加します。
2) プログラムやポート(TCP 80/443)を許可します。
テスト方法
1) ゲスト内でサーバーが動作中か確認(例: curl http://localhost)
2) ホストや別端末からブラウザやcurlでアクセスして応答を確認します。ポートが閉じている場合はタイムアウトや接続拒否になります。
セキュリティ上の注意点
- 必要なポートだけ開放してください。
- 管理用端末だけ許可するなどIP制限を活用してください。
- ログを確認して不審なアクセスがないか監視してください。
ホストPCや外部からのWebサーバーアクセス確認
目的
ホストPCや別端末から仮想マシン上のWebサーバーに正常にアクセスできるかを確かめます。動作確認はシンプルな表示(デフォルトページやテスト用index.html)で十分です。
確認手順(手順は順に実行してください)
- ブラウザでアクセス
- ホスト上のポート転送設定がある場合: http://localhost:8080 を開きます。
- ゲストの直接IPを使う場合: http://<ゲストのIPアドレス>(例: http://192.168.56.101)を開きます。
- サービス状態の確認(ゲスト内)
- Apache: sudo systemctl status apache2
- Nginx: sudo systemctl status nginx
- コマンドで確認(ホスト)
- curl http://localhost:8080
- telnet 80(ポートが開いているか簡易確認)
よく見るポイント
- 仮想マシンのネットワークモード(NAT/ブリッジ/ホストオンリー)を確認します。ホスト以外からアクセスするならブリッジが便利です。
- ホスト側とゲスト側のファイアウォールでポートがブロックされていないか確認します。
- ブラウザのキャッシュをクリアしてから再読み込みしてください。
トラブル時の簡単対処
- ページが表示されない:サービスが起動しているか、Webサーバーのログ(/var/log/)を確認します。
- ポートに到達できない:仮想ソフトのポート転送設定やルーターのポート開放を見直します。
- IPが不明:ゲストで ip addr や ifconfig を実行してIPを確認します。
これらを順に確認すると、ホストや外部端末からの接続確認がスムーズに進みます。
より高度な設定・運用
バーチャルホスト(複数サイト)
1台のWebサーバーで複数のサイトを運用できます。設定ファイルでドメインごとにルートディレクトリとログを分けるだけで済みます。具体例として、example.comとtest.comを別々に割り当てるイメージで設定します。
SSL(HTTPS)対応
Let’s Encryptの無料証明書を使うと手軽にHTTPS化できます。証明書の発行と自動更新を設定すると、運用の手間を減らせます。固定IPやDNS設定が正しいことをまず確認してください。
WordPressやデータベースの導入
WordPressはPHPとMySQL(またはMariaDB)を用意すれば動きます。データベースはサイトごとにユーザーと権限を分けると安全です。アップロード先やパーミッションも確認してください。
メールサーバーやFTP
メールは構築が複雑なので、外部サービスを使う選択肢もあります。FTPはSFTP(SSH経由)を使うと安全です。必要に応じて専用サーバーで分離すると運用が楽になります。
監視・バックアップ・更新
稼働監視は簡単なヘルスチェック(HTTP応答の確認)から始めます。定期的なバックアップとOS・ソフトの自動更新を設定すると障害復旧が早くなります。
パフォーマンスとセキュリティ
キャッシュや静的ファイルの配信で負荷を下げられます。不要なサービスは止め、ログを定期的に確認してください。権限管理と最新パッチ適用を習慣にしましょう。
必要に応じて個別の設定例やコマンドを説明しますので、使いたい構成を教えてください。
よくあるトラブル・注意点
トラブルシューティングの手順
- 基本確認:VMが起動しているか、ゲストOSにログインできるかをまず確認します。次にWebサーバー(例: systemctl status nginx)の状態を確認します。
- ネットワーク確認:ホスト→ゲストでcurl http://localhost:80、ゲスト内でss -ltnpやnetstat -tulnを実行してポートがリッスンしているかを確かめます。
- 外部接続確認:ホストPCやスマホのブラウザ、telnet ホストIP 80で接続確認します。ルーター経由ならポートフォワーディング設定も確認します。
よくある原因と対処法
- ポートフォワーディング設定ミス:ルーターやハイパーバイザー側のNATルールを見直します。外部ポートと内部ポートの対応を合わせます。
- ファイアウォールの未設定:UFWやfirewalld、iptablesでポートがブロックされることが多いです。sudo ufw allow 80やsudo firewall-cmd –add-port=80/tcpで開放します。
- ネットワークモード誤り:NATとブリッジの違いで到達性が変わります。用途に合わせて切り替えます。
セキュリティの基本対策
- 不要なポートは開けない。必要なポートのみ許可します。
- rootログイン禁止:/etc/ssh/sshd_configでPermitRootLogin noに設定し、公開鍵認証を使います。
- fail2ban導入やSSH鍵認証、定期的なアップデートを行います。
ログと追加確認箇所
- Webログ:/var/log/nginx/や/var/log/apache2/を確認します。
- システムログ:journalctl -u sshdや/var/log/messagesでエラーを探します。
- SELinux/AppArmorが有効ならポリシーでブロックしていないか確認します。
運用上の注意
- 重大作業前はスナップショットやバックアップを作成します。
- 外部からのアクセス確認は別ネットワーク(スマホのモバイル回線等)で行うと確実です。
- 定期的にログや開放ポートを点検し、異常があれば早めに対処してください。