構築するWordPress環境の全体像を確認する
今回の構成では、AWS LightsailのインスタンスをDocker実行用のサーバーとして利用します。Docker ComposeでWordPressとMySQLを別々のコンテナとして定義し、WordPressからMySQLへ接続します。
利用者からのアクセスはWordPressコンテナで受け付け、データベース接続はCompose内部のネットワークで行います。MySQLのポートをインターネットへ直接公開しない構成が基本です。
AWS LightsailにDocker実行環境を用意する
まず、想定するアクセス数や処理負荷に応じてLightsailのインスタンスプランを検討します。作成後はSSHなどでインスタンスへ接続し、選択したOSイメージに合わせてDockerとDocker Composeを導入します。
Dockerの導入方法やComposeの提供形態はOSによって異なるため、採用時点の公式ドキュメントを確認してください。LightsailにはLinuxベースのDockerコンテナを扱う機能もありますが、本記事ではインスタンス上でComposeを実行する構成を対象にします。
Docker ComposeでWordPressとMySQLを定義する
Composeファイルでは、WordPressとMySQLをそれぞれサービスとして定義します。WordPress公式イメージでは、データベースのホスト名、ユーザー名、パスワード、データベース名などの環境変数を指定できます。
services:
wordpress:
image: wordpress
restart: always
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: change-this-password
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: change-this-password
MYSQL_RANDOM_ROOT_PASSWORD: "1"
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
# 期待される挙動:
# WordPressとMySQLの2サービスが作成され、
# WordPressからdbというサービス名でMySQLへ接続します。上記は構成例です。イメージのタグや必要な環境変数は、採用時点の公式イメージ情報に合わせて確定してください。パスワードなどの機密情報はComposeファイルへ直接記述せず、環境変数ファイルやシークレットなどの管理方法を検討します。Docker Composeでは.envファイルなどを利用できますが、パスワード管理には注意が必要です。
データを永続化する設定を行う
コンテナを削除・再作成してもデータを失わないよう、WordPressのファイルとMySQLのデータをボリュームへ保存します。例では、WordPress本体やアップロードファイルをwordpressボリュームへ、データベースをdbボリュームへ保存しています。
本番利用では、ボリュームの保存場所だけでなく、バックアップの取得方法、復元手順、インスタンス障害時の復旧方法まで事前に確認します。管理の容易さ、バックアップ方法、障害時の復旧性を比較して保存方式を選びます。
コンテナを起動してWordPressの初期設定を行う
# Composeファイルを確認してから実行します
docker compose up -d
docker compose ps
docker compose logs wordpress
# 期待される挙動:
# wordpressとdbのサービスが起動し、
# インスタンスのパブリックIPへブラウザでアクセスすると
# WordPressの初期設定画面が表示されます。アクセスできない場合は、Lightsailのファイアウォールで許可したポートと、Composeの公開ポートが一致しているか確認します。Lightsailのファイアウォールは、パブリックIPアドレス経由でインスタンスへ接続できる受信トラフィックを制御します。
初期設定画面では、サイト名、管理者アカウント、言語などを設定します。管理者パスワードには推測されにくい値を使用してください。
公開前にセキュリティと運用設定を確認する
- Lightsailのファイアウォールでは、必要なHTTP・HTTPS・SSHなどだけを許可する。
- MySQLの3306番ポートを外部公開せず、WordPressからのみ接続できる構成にする。
- データベースとWordPress管理者の認証情報にサンプル値や初期値を使わない。
- WordPress、Dockerイメージ、OSの更新方法と適用タイミングを決める。
- 本番利用では、独自ドメイン、HTTPS、バックアップ、監視も追加で検討する。
起動後の確認とトラブルシューティングを行う
問題が起きた場合は、次の順序で確認すると切り分けやすくなります。まずLightsailインスタンスの稼働状態とファイアウォール、次にComposeサービスの状態とコンテナログを確認します。その後、WordPressのデータベース接続設定、公開ポート、コンテナ内の待ち受け、サービス名による名前解決を確認します。
データが消えたように見える場合は、ボリュームが正しくマウントされているか、別のComposeプロジェクトを操作していないか、バックアップから復元できるかを確認します。