今回は初投稿として全3回の連載で、「AWSとDockerを使って、独自ドメイン・HTTPS対応のWordPressブログを構築する手順」を解説していきます。
ブログを始めるだけなら一般的なレンタルサーバーが簡単ですが、あえてAWSを使って一から構築することで、サーバー構築・ネットワーク・コンテナ技術・セキュリティ設計といった、実務で使える「インフラエンジニアの基礎スキル」をハンズオン形式で学べます。
連載の第1回目となる本記事では、すべての土台となるAWS EC2の立ち上げから、Docker Composeを使ったWordPressとデータベースの起動までをステップバイステップで行います。
AWSのアカウントさえあれば、初心者の方でもこの記事の手順通りに実装するだけで、インターネット上に自分だけのWebサイトを立ち上げることができます。
1. 今回使用する主要技術の概要
- AWS (EC2 / VPC) 世界最大のクラウドサービスです。今回はAWS上に仮想ネットワーク(VPC)を作り、その中に「EC2」という仮想サーバーを立ち上げてWebサイトの土台にします
- Docker / Docker Compose EC2サーバーの中に「コンテナ」という独立した箱を作り、WordPress本体やデータベース(MySQL)を動かします。コマンド一発で環境を作ったり壊したりできる、現代のインフラ構築には欠かせない技術です。
- HTTPSプロトコル(Nginx + Let’s Encrypt) ブログを商用レベルにするため、通信を暗号化します。今回は「Nginx」という受付サーバーをDocker上に配置し、「Let’s Encrypt」を使って無料で自動的にSSL証明書を更新する仕組みを作ります。
- 生成AIチャットボット(Amazon Bedrockを使用) ブログの読者の質問に答えるAIチャットボットを実装します。生成AI Claude Sonet 4.6を、AWS LambdaとAPI Gatewayを経由して呼び出します。さらにクラウド破産を防ぐため、AWS WAFというファイアウォールを設置して安全に公開します。
2. AWSコンポネント構成図
今回は、AWS上に以下のようなセキュアで高度なアーキテクチャを構築しました。

具体的には以下のようになります。
【インターネット(読者)】
│
├── (1) ブログへのアクセス (HTTPS/443)
│ ▼
│ [ AWS Cloud ]
│ │
│ └── [ EC2 ]
│ │
│ ├── Nginx (リバースプロキシ/SSL暗号化)
│ ├── WordPress
│ └── MySQL
│
└── (2) AIチャットボットへの質問
▼
[ AWS WAF ] (連続アクセス・スパム攻撃を遮断)
▼
[ Amazon API Gateway ]
▼
[ AWS Lambda ] (Python)
▼
[ Amazon Bedrock ] (生成AI: Claudeが回答を作成)1つの画面の裏側で、「Webサイトを表示するインフラの流れ」と「AIが質問に答えるサーバーレスの流れ」の2つが連携する構成になっています。
つぎにこのアーキテクチャにおける、「EC2インスタンスの立ち上げ」を行っていきます。
3. AWS EC2インスタンスの立ち上げ
今回は、AWSの「無料利用枠」の対象となるスペックを選んで構築するため、初めての方でもコストを気にせず進めることができます。
3.1. EC2ダッシュボードからの起動
まずはAWSマネジメントコンソールにログインし、画面上部の検索バーで「EC2」と検索してダッシュボードを開きます。 左メニューの「インスタンス」から、オレンジ色の「インスタンスを起動」ボタンをクリックして設定画面に入ります。
- 「名前」の欄に
「WordPress-Server」などの分かりやすい名前を入力します。
3.2. OSとインスタンスサイズの選択
次に、サーバーの中身(OSとスペック)を決めていきます。
- アプリケーションおよび OS イメージ (Amazon マシンイメージ – AMI): 「Amazon Linux 2023 AMI」を選択します。Amazon LinuxはAWSがクラウド向けに最適化して提供している軽量なOSで、動作が速くセキュリティも高いため、インフラ構築の定番です。

- インスタンスタイプ: 「t2.micro」(または t3.micro)を選択します。個人ブログの立ち上げであれば、メモリ1GBのこのサイズで十分に動作します。

3.3. キーペアの作成とダウンロード
サーバーに安全にログインするための「キーペア」を作成します。
- キーペア : 「新しいキーペアの作成」をクリックし、「
my-aws-key」などの名前をつけて作成します。 作成すると、ご自身のPCに「.pem」という拡張子のファイルがダウンロードされます。このファイルは二度とダウンロードできないので無くさないように大切に保管してください。

3.4. ネットワークとセキュリティグループの設定
ここがサーバー構築において最も重要です。外部からサーバーにアクセスできるように設定をします。 「ネットワーク設定」タブの「編集」をクリックして、以下の設定を行ってください。
- VPC/サブネット: デフォルトの設定を選択します
- パブリック IP の自動割り当て: 「有効化」にします。(インターネット上の住所が割り当て、インターネットからのアクセスを可能にします)
- ファイアウォール : 「セキュリティグループを作成する」を選び、以下の2つのインバウンドルールを設定します。
1つ目:タイプ
SSH/ ソースAnywhere-IPv4(0.0.0.0/0)2つ目:タイプ
HTTP/ ソースAnywhere-IPv4(0.0.0.0/0)
💡 【解説】なぜ2つのポートを開けるのか?
- SSH(ポート22番)は、管理者がサーバー内からコマンドを叩くための「管理者用の勝手口」です。
- HTTP(ポート80番)は、世界中のユーザーがブラウザからブログを見に来るための「一般客用の正面玄関」です。これを設定しないと、WordPressを立ち上げても誰も画面を見ることができません。
最後に、画面右下の「インスタンスを起動」をクリックします。 「成功」画面が出た後、インスタンス一覧に戻り、状態が「実行中」になっていることを確認します。
4. EC2へのSSH接続とDockerのインストール
EC2インスタンスが無事に立ち上がったら、次はサーバー内から、Webサイトを動かすためのエンジンである「Docker」をインストールしていきます。 今回はAWSのブラウザ上で動くターミナル「AWS CloudShell」を使ったssh接続を行います。
4.1. CloudShellからEC2へSSH接続する
AWSマネジメントコンソールの画面左下にある「CloudShell」のアイコン(>_ のようなマーク)をクリックして開きます。
【1. 鍵ファイルのアップロード】 EC2を作成した時にダウンロードした鍵ファイル「.pem」をCloudShellに持ち込みます。 CloudShellの右上にある「アクション」をクリックし、「ファイルのアップロード」から .pem ファイルを選択してアップロードします。
【2. 鍵の権限変更と接続】 アップロードが完了したら、以下のコマンドを順番に実行します。(※ <パブリックIPアドレス> の部分は、先ほど作成したEC2のIPアドレスに書き換えてください)。
# 鍵ファイルの権限を「自分だけが読める」ように厳しく変更する
chmod 400 my-aws-key.pem
# SSHコマンドでEC2インスタンスの中に接続する
ssh -i "my-aws-key.pem" ec2-user@<パブリックIPアドレス>実行後、「Are you sure you want to continue connecting?」 と聞かれたら yes と入力してEnterを押します。 画面の左端が [ec2-user@ip-172-31... ~]$ のような表示に変われば、ssh接続完了です。
4.2. OSの最新化とDockerのインストール
EC2の中に入ったら、まずはサーバーのシステムを最新の状態にし、コンテナの核となる「Docker」本体をインストールします。
# OS(パッケージ)を最新の状態にする
sudo dnf update -y
# Dockerをインストールし、起動する
sudo dnf install docker -y
sudo systemctl start docker
# サーバー再起動時にも自動でDockerが起動するように設定する
sudo systemctl enable docker次に、毎回 sudoと打たなくてもDockerを操作できるように、ユーザーの権限を変更します。
# ec2-userをdockerグループに追加する
sudo usermod -aG docker ec2-user⚠️ 【重要】設定の反映 上記の権限変更をシステムに認識させるため、一度 exit と入力してEC2からログアウトし、再度 ssh -i ... のコマンドを打って入り直してください。これを忘れると次の手順でエラーになります。
4.3. Docker Composeのインストール
最後に、複数のコンテナ(WordPressとデータベース)を同時に連携させて動かすためのツール、「Docker Compose」をインストールします。
# Docker Composeの実行ファイルをインターネットからダウンロードする
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# ダウンロードしたファイルに実行権限を付与する
sudo chmod +x /usr/local/bin/docker-composeこれでEC2インスタンスが、いつでもDockerコンテナを動かせる状態になりました。
5. docker-compose.ymlの作成とコンテナ起動
Dockerの準備が整ったら、WordPressを動かします。 Dockerでは、「どのようなサーバーを、どう連携させて動かすか」をすべてコードで定義します。これを「Infrastructure as Code(IaC)」と呼びます。
今回は「WordPress」と記事データを保存するデータベースである「MySQL」の2つのコンテナを連動させるための設計図(docker-compose.yml)を作成します。
5.1. 作業用ディレクトリと設計図の作成
EC2の中で、今回作業するための専用フォルダを作り、nano というテキストエディタで設定ファイルを開きます。
# 作業用フォルダを作って移動する
mkdir my-wordpress
cd my-wordpress
# nanoエディタで新しいファイルを作成して開く
nano docker-compose.yml5.2. docker-compose.ymlの記述
真っ黒なエディタ画面が開いたら、以下のコードをコピーして貼り付けてください。
(※今回は初期構築テストのため、パスワード等はサンプルを入れています。後ほど本番運用する際に変更してください)
yamlCopyversion: '3'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: somesecurepassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpresspassword
volumes:
- db_data:/var/lib/mysql
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpresspassword
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:💡 【解説】エディタ内の記述内容に関して
image: Docker Hubから、公式のmysql:8.0とwordpress:latestをダウンロードする指示です。ports: "80:80": インターネットからのHTTP通信(80番ポート)を、WordPressコンテナの80番に繋ぐ設定です。volumes: コンテナを再起動してもブログのデータが消えないように、EC2本体の安全な場所にデータを保存する設定です。
貼り付けが終わったら、キーボードで Ctrl + O → Enter → Ctrl + X の順に押して元の画面に戻ります。
5.3. コンテナの起動
以下のコマンドを実行して、設計図通りにコンテナを起動させます。
# バックグラウンドでコンテナを起動する
docker-compose up -d画面に Pulling db... のような文字が流れ、必要なデータが自動でダウンロードされます。 数分待って、Started という緑色の文字が出れば起動は完了です。また、 docker-compose ps コマンドで、2つのコンテナの「State」が 起動中になっていることを確認できます。
5.4. IPアドレスによるアクセス確認
自分のWebサイトがインターネット上に起動されたかを確認します。
- AWSコンソール画面に戻り、今回作成したEC2インスタンスを選択します。
- 画面下部の詳細タブにある 「パブリック IPv4 アドレス」 の数字(例:
13.111.22.33)をコピーします。 - ご自身のパソコンのブラウザのURL欄に、コピーした数字をそのまま貼り付けてEnterを押します。
画面に WordPressのロゴ と、「言語の選択画面」 が表示されたら完了です。
第1回まとめ
お疲れ様です。今回はAWS上に自分専用のWordPress環境を立ち上げました。
しかし、今の状態はIPアドレスを直接打ち込まなければならず、通信も暗号化されていないためブラウザに「保護されていません」と警告が出てしまいます。
▼ 次のステップ(第二回)では、IPアドレスを固定し、独自ドメインの設定と無料の自動HTTPS化を行います。

コメント
初コメ
にコメ