はじめに
Ubuntuは安定性と使いやすさを兼ね備えたDebian系のLinuxです。Webサーバー構築では、設定が分かりやすいApacheと高速で軽量なNginxがよく使われます。本章では、本資料の目的と読み方、対象となる読者を簡潔に説明します。
目的
この資料は、初心者がUbuntu上でWebサーバーを立ち上げ、公開まで進められるように手順と注意点を丁寧に解説することを目的とします。実務的なコマンドと設定例を交えて進めます。
対象読者
- 自分でWebサイトを公開したい個人
- 学習用にWebサーバーを触ってみたい方
- 基本的なパソコン操作(ファイル操作やターミナルの入力)ができる方
本資料の構成(全10章)
第1章: はじめに
第2章: 構築に必要な準備
第3章: Ubuntuのインストール
第4章: SSHアクセスの設定
第5章: Webサーバーソフトウェアの選定とインストール
第6章: Webコンテンツ設置とパーミッション
第7章: セキュリティ設定
第8章: トラブルシューティングと運用
第9章: 応用:DockerによるWebサーバー構築
第10章: まとめ
進め方のポイント
- 実機に直接作業する前に、仮想環境(VirtualBoxなど)やVPSで試してください。
- 重要な操作はバックアップを取ってから行ってください。
- コマンドは管理者権限(sudo)を使う場面があります。使い方を理解してから実行してください。
この後の章で、インストールからセキュリティ対策まで順を追って説明します。安心して読み進めてください。
構築に必要な準備
目的と全体像
ここでは、Ubuntu上にWebサーバーを構築する前に揃えるものと事前作業を説明します。準備を整えることで、後の手順がスムーズになります。
必須項目
- ハードウェア/仮想マシン:UbuntuがインストールできるPCまたはVM。最小構成は2コアCPU、2〜4GBメモリ、20GB以上のディスクを推奨します。クラウド利用ならLTSイメージを選びます。
- OS:Ubuntuの最新LTS版を推奨します(aptでパッケージ管理可能)。
- ネット接続:インターネットへの接続が必要です。パッケージ取得や時刻同期に使います。
- 管理用アカウント:sudo権限のあるユーザーを用意してください。rootで直接作業するより安全です。
あると便利な項目
- SSH鍵認証:パスワードより安全です。事前に鍵ペアを作成しておくと便利です。
- 固定IP/ドメイン:外部公開する場合は固定IPまたはDNS設定を用意します。
- スナップショット/バックアップ:VMのスナップショットやバックアップを準備しておくと安心です。
初期確認と簡単な作業例
1) OSは最新に:sudo apt update && sudo apt upgrade
2) 管理ユーザー作成例:sudo adduser ユーザー名 && sudo usermod -aG sudo ユーザー名
3) 時刻同期:sudo timedatectl set-ntp on
チェックリスト
- [ ] Ubuntu LTSイメージを用意
- [ ] ネット接続確認
- [ ] sudoユーザー作成済み
- [ ] SSH鍵(公開鍵)準備
- [ ] バックアップ手段確保
これらを整えてから次章のUbuntuインストールへ進んでください。
Ubuntuのインストール
概要
この章では、公式サイトからISOを入手してインストールメディアを作り、サーバー用途でUbuntuを導入する手順を説明します。インストール中にネットワークやユーザー設定、OpenSSHなどのパッケージを選べます。
ISOダウンロードと検証
公式サイトでLTS(長期サポート)版を選びます。ダウンロード後はSHA256などのハッシュで整合性を確認してください。検証により破損や改ざんを避けられます。
インストールメディアの作成
- Windows: Rufusを使い、ISOで書き込みます(ISOモード推奨)。
- macOS/Linux: balenaEtcherやddコマンドを使えます。例: sudo dd if=ubuntu-20.04-live-server-amd64.iso of=/dev/sdX bs=4M status=progress && sync(/dev/sdXは実際のデバイス名に置換)。書き込み先を間違えないよう注意してください。
インストール手順(サーバー用途)
USBから起動して「Install Ubuntu Server」を選びます。言語・キーボードを設定後、パッケージ選択画面で「OpenSSH server」や「標準ユーティリティ」をチェックしておくと便利です。ディスクは自動で全部使うか手動でパーティションを設定できます。用途に応じてLVMや暗号化も選べます。
ネットワークとユーザー設定
インストール中にDHCPか静的IPを設定します。静的にする場合はIPアドレス、ゲートウェイ、DNSを入力します。管理用ユーザーを作成し、強いパスワードを設定してください。公開鍵認証を後で使うなら、初期ユーザーを作っておくとスムーズです。
インストール後の確認
初回起動後にログインして、ネットワーク(ip a)、SSH(systemctl status ssh)、パッケージ更新(sudo apt update && sudo apt upgrade -y)を確認します。時間帯やNTPの設定も見ておくと安心です。
注意点
インストール先ディスクを誤って選ぶとデータを失います。重要なデータは必ずバックアップしてください。
SSHアクセスの設定
SSHの有効化とインストール
遠隔管理にSSHを使います。まずパッケージを更新してOpenSSHサーバーを入れます。
sudo apt update && sudo apt install -y openssh-server
sudo systemctl enable --now ssh
sudo systemctl status ssh
上のコマンドでサービスを起動し自動起動を有効にします。状態確認で “active (running)” を確認してください。
ファイアウォールの設定(UFW)
UFWを使う場面が多いです。標準ポート22を開ける例:
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status
別ポートを使う場合は、sshdの設定変更後にそのポートを開けてください。変更前に現在のSSH接続を切らないよう注意します。
SSH鍵認証の設定(推奨)
パスワード認証より鍵認証が安全です。クライアントで鍵を作成し、公開鍵をサーバーに登録します。
ssh-keygen -t ed25519
ssh-copy-id user@your_server
手動で登録する場合は ~/.ssh/authorized_keys に公開鍵を追記します。
SSH設定の基本と注意点
設定ファイルは /etc/ssh/sshd_config です。設定変更前に必ずバックアップを取りましょう。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
安全にするための例:PasswordAuthentication no、PermitRootLogin no。変更後は
sudo systemctl restart ssh
sudo journalctl -u ssh -e
で再起動とログ確認を行います。接続できなくなった場合に備え、別の管理手段(コンソールアクセス等)を用意してください。
Webサーバーソフトウェアの選定とインストール
概要
用途に合わせてApacheかNginxを選びます。Apacheは設定が分かりやすく初心者向け、Nginxは軽量で高負荷向けに強みがあります。ここでは両方のインストール手順と基本設定を紹介します。
Apacheのインストールと確認
- インストール: sudo apt install apache2
- 自動起動と起動: sudo systemctl enable –now apache2
- 動作確認: ブラウザで http://サーバーIP を表示し、Apacheのページが出れば成功
- 設定ファイル: /etc/apache2/ 配下。仮想ホストは /etc/apache2/sites-available/ に置き、sudo a2ensite example.conf で有効化し、sudo systemctl reload apache2 で反映します。
Nginxのインストールと確認
- インストール: sudo apt install nginx
- 自動起動と起動: sudo systemctl enable –now nginx
- 動作確認: ブラウザで http://サーバーIP を表示
- 設定ファイル: /etc/nginx/ 配下。バーチャルホストは /etc/nginx/sites-available/ に作成し、/etc/nginx/sites-enabled/ へシンボリックリンクで有効化(sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/)、設定をテスト: sudo nginx -t、反映: sudo systemctl reload nginx
複数ドメイン運用
どちらも仮想ホスト(サイト単位の設定)で複数ドメインを扱えます。ドキュメントルートを分け、必要に応じてSSLやリダイレクトを設定してください。
Webコンテンツ設置とパーミッション
ドキュメントルートにファイルを置く
ドキュメントルートは通常 /var/www/html や /var/www/example.com のようになります。静的なHTMLや画像、Webアプリケーション(例:WordPress)のファイルをこの配下に配置します。開発環境からはSFTPやrsync、CI/CDでアップロードすると安全です。
所有者とグループの設定
Webサーバーは通常「www-data」(Debian系)や「wwwrun」(一部の系)というユーザーで動作します。基本はWebサーバーとデプロイ用ユーザーで所有者・グループを分けます。
例:
sudo chown -R www-data:www-data /var/www/example.com
またはデプロイユーザーを使う場合:
sudo chown -R deploy:www-data /var/www/example.com
sudo chmod g+s /var/www/example.com # 新規ファイルのグループを継承
推奨パーミッション
- ディレクトリ: 755(所有者に書込、他は読み実行)
- ファイル: 644(所有者に書込、他は読み)
コマンド例:
sudo find /var/www/example.com -type d -exec chmod 755 {} \;
sudo find /var/www/example.com -type f -exec chmod 644 {} \;
アップロードやキャッシュを書き込む必要があるディレクトリだけグループ書込を許可します(例:uploads, cache):
sudo chmod -R 775 /var/www/example.com/wp-content/uploads
スクリプトと機密ファイル
CGIや実行スクリプトは必要な場合のみ実行権限を付けます(例: 750)。機密情報が書かれたファイル(設定ファイル)は 640 にして、Webサーバーと管理者のみが読めるようにします。例: sudo chmod 640 /var/www/example.com/wp-config.php
注意点
- 777は絶対に避けてください。セキュリティリスクが高まります。
- デプロイ作業は一貫したユーザーで行い、所有者や権限を揃えてください。
- 必要に応じてバックアップを取り、変更は段階的に反映してください。
セキュリティ設定
1) 基本方針
外部からの不要な接続を遮断し、公開するサービスだけを許可します。まずは最小権限で始める考え方が重要です。
2) UFWでHTTP/HTTPSのみ開放
UFWを使うと簡単にポート制御できます。例:
– sudo ufw allow 80/tcp
(HTTP)
– sudo ufw allow 443/tcp
(HTTPS)
– sudo ufw enable
で有効化します。
管理用SSHが必要な場合はsudo ufw allow 22/tcp
を追加してください。
3) 不要なサービスの停止
使っていないサービスは無効にします。確認と停止例:
– サービス一覧: systemctl list-unit-files --type=service
– 停止: sudo systemctl stop サービス名
– 無効化: sudo systemctl disable サービス名
4) SSL/TLS(HTTPS)化
Let’s EncryptのCertbotを使うと無料で証明書が取得できます。手順の概略:
1. Certbotをインストール
2. sudo certbot --apache
または sudo certbot --nginx
を実行
3. 自動更新を確認(certbot renew --dry-run
)
5) Webサーバー設定の強化
- 不要なモジュールを切る(例: Apacheの
a2dismod
)。 - ディレクティブで公開範囲を絞る(
Require ip
やallow/deny
)。 - TLS設定は強い暗号とプロトコルに限定します(例: TLS1.2以上、強いCipher)。
6) 運用上の注意
- 定期的にソフトウェアを更新します。
- ログを監視して異常を早期発見します。
- バックアップと復旧手順を用意します。
これらを順に実施すると、安全性の高いWeb環境を作れます。
トラブルシューティングと運用
ログの基本確認
まずログを確認します。Apacheは/var/log/apache2/error.log、Nginxは/var/log/nginx/error.logが主です。リアルタイムで見るなら「tail -f /var/log/nginx/error.log」を使います。特定キーワードはgrepで絞れます(例: grep “database” error.log)。systemd管理のサービスは「journalctl -u nginx -b」で起動以降のログを確認できます。
サービスと設定の確認
設定変更後は設定テストを実行します。Nginxは「nginx -t」、Apacheは「apachectl -t」です。問題なければ「systemctl restart nginx」などで再起動し、状態は「systemctl status nginx」で確認します。
よくあるエラーと対処法
- パーミッションエラー(403): ドキュメントルートとファイルの所有者・権限を確認します。例: chown -R www-data:www-data /var/www/html
- ポート競合: 「ss -ltnp」や「lsof -i :80」で確認し、不要プロセスを停止します。
- 設定ミス: テストコマンドで指摘箇所を修正します。
- 502/504(バックエンド不通): アプリケーションが動作しているか、ソケットやポートを確認します。
- SSL証明書エラー: パスや有効期限を確認し、必要なら更新します。
運用のポイント
- ログローテーションを設定し、容量対策をします。
- 重要な構成はバックアップを取ります。
- 自動再起動をsystemdで設定すると短時間の障害に強くなります(Restart=on-failure)。
- 定期的にソフトウェアを更新し、セキュリティパッチを適用します。
トラブル時の簡易チェックリスト
- ログを確認する
- 設定テストを行う(nginx -t / apachectl -t)
- サービス状態を確認する(systemctl status)
- ポート・プロセスを確認する(ss/lsof)
- 権限・所有者を確認する
- 必要なら再起動/ロールバックする
上記を順に実行すれば、多くの問題を短時間で解決できます。初心者の方はログの内容をそのまま控えて検索すると、解決策が見つかりやすいです。
応用:DockerによるWebサーバー構築
はじめに
Dockerを使うと、Webサーバーの環境をコンテナ単位で管理できます。環境差の問題を減らし、移行や複製が簡単になります。
利点と利用シーン
- 環境をコード化(イメージ化)して再現性を高めます。例: 開発→検証→本番の差を縮めます。
- 複数サービス(DBやキャッシュ)と分離して運用できます。
前提条件
Dockerとdocker-composeがインストール済みであることを想定します。基本的なコマンド(build, up, logs)が使えると便利です。
簡単な構成例(Apache)
DockerfileでApacheを使う例:
– ベースイメージ: ubuntuやhttpd公式
– コンテンツを/var/www/htmlに配置
docker-compose.ymlでポートを公開し、ボリュームでコンテンツを永続化します。
ボリュームと設定管理
コンテンツやログはホストのボリュームに置くとデータを残せます。設定ファイルはコンフィグディレクトリをバインドしてください。
ネットワークと公開
docker-composeのportsでホストとコンテナのポートを結びます。複数コンテナを連携する場合は内部ネットワークを使い、不要なポートは公開しないでください。
起動と運用の基本手順
- Dockerfileを作成しイメージをビルド
- docker-compose up -dで起動
- logsで動作確認、必要ならコンテナに入って設定を調整
移行とバックアップのポイント
イメージをレジストリにプッシュして別環境へ移行できます。ボリュームは別途バックアップを取り、設定はバージョン管理してください。
トラブル時のヒント
- ポート競合はssやlsofで確認
- 権限エラーはボリュームのマウントユーザーを確認
- ログを見て設定ミスを特定
以上の手順でDockerを使えば、Webサーバーの構築と移行がより簡単になります。
まとめ
本書を通して、UbuntuでのWebサーバー構築の基本から応用までを丁寧に解説しました。初心者でも次の流れを押さえれば、自分専用のWebサイトを安全に公開できます。
- 準備:サーバーのスペックやドメインを決めておきます(例:小規模なら1〜2GB RAM)。
- OSインストール:Ubuntuを導入し、初期ユーザーと更新を行います。
- SSH設定:パスワード認証を止め、公開鍵認証を使うと安全です。
- Webサーバー:ApacheやNginxを選び、設定ファイルでバーチャルホストを作ります。
- コンテンツ管理:公開ディレクトリの権限を適切に設定し、静的ファイルや動的サイトを置きます。
- セキュリティ:ファイアウォール、Fail2ban、SSL(Let’s Encrypt)で基本対策をします。
- 運用:ログ確認、定期更新、バックアップを習慣にします。Dockerでの運用は環境を分離でき、移行が楽になります。
実践のコツ:小さな変更を頻繁に試し、動作確認とバックアップを忘れないでください。まずはシンプルに始め、慣れたら機能を増やすと失敗が少なくなります。
これで本書は終わりです。安全に注意して、楽しく学んでください。