はじめに
目的
本資料は、ローカル開発から本番環境まで幅広い方法でWebサーバーを立ち上げる手順を分かりやすくまとめています。言語別の簡易サーバー起動(Node.js、PHP、Pythonなど)、Dockerでのコンテナ化、Ubuntuでの本番構築、Javaによる簡易サーバー、そしてNode.jsアプリの運用まで網羅します。
対象読者
- Webサービスを自分で立ち上げたい方
- 開発環境から本番移行を学びたいエンジニア
- サーバー構築の基礎を確かめたい学生や初心者
基本的なコマンド操作の知識があると進めやすいです。
本資料の構成
各章は実践的な手順と、よくあるつまずきポイントを含みます。最初にローカルで試し、段階を追って本番環境へ移す流れを想定しています。
使い方
- 手順を順番に実行すれば構築できます。まずはローカル章で簡単なサーバーを起動してみてください。
- 設定変更やデータは必ずバックアップを取りながら進めてください。
以降の章で具体的なコマンドや設定例を丁寧に説明します。安心して読み進めてください。
ローカル開発環境でのWebサーバー構築
概要
ローカルで手軽にWebサーバーを立ち上げる方法を紹介します。静的ファイルの確認や簡単なAPIテストに向きます。OSは問わず使える手段を中心に説明します。
Node.js(http-server / npx serve)
- http-server(グローバル):
npm install -g http-server
http-server ./ -p 8080
- npxで一時起動(インストール不要):
npx serve . -l 5000
どちらも静的ファイルを即座に配信します。ブラウザで http://localhost:8080 や http://localhost:5000 を開いて確認します。
PHP組み込みWebサーバー
- 簡単に起動できます(PHP 5.4以上):
php -S localhost:8000 -t public
PHPスクリプトの動作確認や簡易APIのテストに便利です。
Python(http.server)
- Python 3:
python3 -m http.server 8000
- カレントディレクトリをそのまま配信します。軽い確認用途に最適です。
VSCode: Live Server拡張
- 拡張機能「Live Server」をインストールし、エディタ上で「Go Live」やファイルを右クリックで起動します。
- 自動リロード機能があり、編集→即表示の流れが速くなります。既定は http://127.0.0.1:5500 です。
補足と注意点
- これらは開発用途向けです。本番運用には向きません。ポート競合やファイアウォールに注意してください。
- SSLや認証が必要な場合は、別途設定や本番用サーバーを検討してください。
Dockerを使用したWebサーバー構築
概要
DockerでApache(httpd)をコンテナ化して、環境依存を減らしたWebサーバーを作ります。ホストのディレクトリをコンテナにマウントし、ポート8080で公開する実例を紹介します。
前提
- Dockerがインストール済み
- ホストのカレントディレクトリに公開したいファイル(例: index.html)があること
手順(簡単な例)
- イメージを取得
docker pull httpd:latest
- コンテナを起動(ポート8080、ホストの現在地をマウント)
docker run -d --name my-httpd -p 8080:80 -v "$(pwd)":/usr/local/apache2/htdocs/:ro httpd:latest
オプション説明: -d(デタッチ)、–name(コンテナ名)、-p(ポートマッピング)、-v(ボリューム)、:ro(読み取り専用)
Dockerfileでのカスタマイズ
ホスト上のファイルをイメージに組み込みたい場合:
FROM httpd:2.4
COPY ./public/ /usr/local/apache2/htdocs/
ビルド: docker build -t my-httpd . その後マウント不要でコンテナを起動できます。
ボリュームと権限
ホストのファイル権限が原因で表示できないことがあります。読み取り専用マウントを使うと安全です。必要なら docker cp でコンテナ内へコピーします。
停止・削除
docker stop my-httpd
docker rm my-httpd
運用のヒント
ローカル検証ではマウントが便利です。運用環境ではファイルをイメージに組み込み、リバースプロキシやTLSの前段構成で公開することをお勧めします。
Ubuntu環境での本番Webサーバー構築
前提
Ubuntuの最小インストールを行い、パッケージを最新化します。
sudo apt update && sudo apt upgrade -y
SSHサーバー設定
リモート操作用にOpenSSHを導入します。新規ユーザーを作り公開鍵認証を設定すると安全です。
sudo apt install -y openssh-server
adduser deployuser
mkdir -p /home/deployuser/.ssh
authorized_keys に公開鍵を配置
chown -R deployuser:deployuser /home/deployuser/.ssh
Apacheの導入と自動起動
Apacheをインストールし起動、起動自動化します。
sudo apt install -y apache2
sudo systemctl start apache2
sudo systemctl enable apache2
複数サイト運用(VirtualHost)
サイトごとに/etc/apache2/sites-availableに設定を作ります。例: /etc/apache2/sites-available/example.conf
設定後は a2ensite example && systemctl reload apache2 で有効化します。
SSL/TLS(Let’s Encrypt)
Certbotで無料証明書を取得し自動更新できます。
sudo apt install -y certbot python3-certbot-apache
sudo certbot –apache
Nginxを使う場合の例
Nginxをリバースプロキシにしてアプリを裏で動かす構成が一般的です。
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
}
}
セキュリティと運用
UFWで80/443/22だけ許可し、fail2banでSSH保護、定期バックアップとログ監視を必ず行ってください。
ufw allow OpenSSH; ufw allow “Apache Full”; ufw enable
Javaを使用した簡易Webサーバー構築
概要
Java標準の小さなHTTPサーバーを使い、簡単なWebサーバーを立てる方法を説明します。server.createContext()でURLごとの処理を登録し、server.start()で起動します。テストや学習用に向きます。
準備
- JDK(8以上)を用意します。
- ポート番号(例: 8080)は空いているものを使います。
サンプルコード
import com.sun.net.httpserver.*;
import java.net.InetSocketAddress;
public class SimpleServer {
public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
server.createContext("/", exchange -> {
String response = "Hello from Java SimpleServer";
exchange.sendResponseHeaders(200, response.getBytes().length);
try (var os = exchange.getResponseBody()) {
os.write(response.getBytes());
}
});
server.setExecutor(null); // デフォルトのスレッドプール
server.start();
System.out.println("Server started on port 8080");
}
}
実行と確認
- javac SimpleServer.javaでコンパイルします。
- java SimpleServerで起動します。
- ブラウザかcurlでhttp://localhost:8080/にアクセスして応答を確認します。
注意点
- このサーバーは学習・テスト向けです。本番では性能やセキュリティの面で不十分です。
- ポートやファイアウォールの設定に注意してください。
- 複雑なルーティングや静的ファイル配信は別ライブラリ(例: JettyやSpring Boot)を検討してください。
Node.jsアプリケーションサーバーの運用
本章では、本番環境でのNode.jsアプリケーション運用の基本構成をやさしく解説します。構成は「Node.jsの導入」「プロセスマネージャによる起動」「Nginxを使ったリバースプロキシ」「ログと監視」「セキュリティと簡易デプロイ」です。
Node.jsのインストール
Ubuntuなら公式リポジトリかNodeSourceを利用します。例: sudo apt install -y nodejs npm。バージョン管理が必要ならnvmを使うと便利です。
pm2での起動管理
pm2を使うとプロセス監視と自動再起動が簡単です。インストール: npm i -g pm2。起動例: pm2 start app.js –name myapp。サーバ起動時に自動復旧するには pm2 startup systemd と pm2 save を実行します。
Nginxをリバースプロキシに設定
Nginxをフロントに置き、ポート80/443を受け、アプリはlocalhost:3000で動かします。serverブロックで proxy_pass http://127.0.0.1:3000; を設定し、SSLはLet’s Encrypt(certbot)で取得します。
ログと監視
pm2 logsでアプリログを確認します。Nginxのaccess/errorログも併せて監視します。pm2 monitや外部サービス(例:Prometheusや監視ツール)で稼働状況を見守ると安心です。
セキュリティと自動デプロイ
アプリは非rootユーザーで動かし、必要なポートだけ開けます。自動デプロイはGitのフックやCI/CD(例:GitHub Actions)でビルド→pm2 reloadの流れにすると運用が楽になります。
環境別の選択肢
ローカル開発環境
開発中は起動が速く、設定が少ないツールが便利です。例:Pythonの “python -m http.server” や簡易の静的サーバー、Node.jsのhttp-server。パフォーマンスや高可用性を気にせず、素早く動作確認できます。設定は最小限にし、ソースコードの差分確認やホットリロードを優先します。
検証(ステージング)環境
本番に近い構成で動作確認したい場合はDockerや仮想マシンを使います。Docker ComposeでWebサーバーとDBを一緒に立てると、環境差による問題を減らせます。設定の再現性とテストの自動化を重視してください。
本番環境
安定性とセキュリティが最優先です。UbuntuやCentOS上でNginxやApacheを使用し、TLS、ログ管理、監視、バックアップを導入します。トラフィック増加に備えロードバランサやキャッシュ(CDN)を組み合わせると効果的です。
選び方チェックリスト
- 目的:開発、検証、公開のどれか
- 耐久性:短期か長期か
- スケール:将来的な負荷予測
- 運用コスト:手作業か自動化か
これらを基準に、環境ごとに適切なツールを選んでください。












