1.目標
ローカルPC(Windows 11 Home)のDocker Desktopで、WordPressを動かしています。
これをGitHubに登録し、AWSのCodePipelineでデプロイして、ECS Fagateで実行します。
※1. コンテンツは外部公開せず、あくまでも個人的な実験のために作成する(基本的にドメインを買ったりDNS登録したりしない)
※2. DBはRDS、ファイルはS3に保存する
これは四苦八苦しながら、目標達成まで頑張る初心者の作業記録です。
なお、ChatGPTをフル活用して、作業をガイドしてもらいます。
さあどうなるか……?!
2.WordPressをセッティング
まず前提として、以下のようなdocker-compose.ymlでスタートします。
services:
db:
image: mysql:8.0
container_name: "wordpress-db"
volumes:
- ./db-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
image: wordpress:6.6-php8.1
container_name: "wordpress-wp"
volumes:
- ./wp-data:/var/www/html
ports:
- "8082:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
当初は最新のMySQL8.4で実施しようとしましたが、mysql_native_password認証がデフォルトで削除されたため、WordPressから接続する際の設定が少し面倒でした(2024年11月時点。おそらく今後のWordPressのバージョンアップで対応されるはず)。
そのため、確実に作業できるMySQL8.0とWordPress6.6を選択しました。
目標はS3にアップロードすることなので、一旦ローカルでセッティングしてS3対応プラグイン「WP Offload Media Lite」をインストール・有効化します。
3.AWS S3バケット作成
詳細な設定について、記載ない項目については全てデフォルトのまま進めています。
①AWS Management ConsoleでS3バケットを作成します。
・バケット名:my-wordpress-bucket-xxxx
・「パブリックアクセスをすべてブロック」を有効(デフォルトでバケットは非公開に設定)
②IAMの画面に遷移し、ユーザーとポリシーを作成します。
・ユーザー名:wordpress-local-access ※ポリシーを直接アタッチする
→アクセスキーを作成(ユースケース:コマンドラインインターフェイス (CLI))
アクセスキーIDとシークレットキーをメモします。
・ポリシー名:wordpress-local-access-policy(内容は以下)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::my-wordpress-bucket-xxxx"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::my-wordpress-bucket-xxxx/*"
}
]
}
おっと。ここでAWS Cliをインストールしていなかったことに気付きました。
以下からインストールします。
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
AWS Cliにて、S3バケットに接続できることを確認します。
これはローカルのdockerからアクセスできることを前もって確認するためです。
PS C:\Users\testuser> aws --version
aws-cli/2.22.1 Python/3.12.6 Windows/11 exe/AMD64
PS C:\Users\testuser> aws configure
AWS Access Key ID [None]: xxxx(前段でメモしたもの)
AWS Secret Access Key [None]: xxxx(前段でメモしたもの)
Default region name [None]: ap-northeast-1
Default output format [None]: json
PS C:\Users\testuser> aws s3 ls s3://my-wordpress-bucket-xxxx --region ap-northeast-1
4.WordPressからS3接続
前段でインストールした「WP Offload Media Lite」の設定をしていきます。
WordPressの管理画面にログインし、プラグイン>WP Offload Media Lite>Settingに遷移します。
①「Storage Provider」として「Amazon S3」を選択
②「2. Connection Method」は「Define access keys in wp-config.php」を選択
③ wp-config.phpを編集し、追記。私はローカルのディスクをマウントしているので、直接編集します。
/* Add any custom values between this line and the "stop editing" line. */
define( 'AS3CF_SETTINGS', serialize( array(
'provider' => 'aws',
'access-key-id' => 'xxxx(前段でメモしたもの)',
'secret-access-key' => 'xxxx(前段でメモしたもの)',
) ) );
/* That's all, stop editing! Happy publishing. */
上書きした瞬間、反映されたらしく、画面が勝手に次のページに移行しました。
おかげで画面スクリーンショットを撮り忘れました。
これで画像ファイルなどが自動でS3にアップロードされるようになりました。
5.次のステップ
ChatGPT先生は以下のように教えてくれました。
1.ローカルでWordPressを起動し、プラグイン設定を完了。
2.設定済みの環境をDockerイメージとして保存。
3.RDS移行とともに、ECS(Fargate)にデプロイ。
4.デプロイ後にS3設定が有効な状態で運用開始。
今は上記の1が完了したところです。
長くなりそうなので、2以降は別ページに記載します。
はたして無事に目標を達成できるのか?! 乞うご期待w
★続きのページは以下
https://qiita.com/twilightdragonfly/items/3c62c90e66d83cf9c906