1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初心者がローカルのdockerをAWSにアップして動かすまで(その1)

Last updated at Posted at 2024-11-20

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」をインストール・有効化します。
image.png
image.png
image.png

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からアクセスできることを前もって確認するためです。

PowerShell
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. */

上書きした瞬間、反映されたらしく、画面が勝手に次のページに移行しました。
おかげで画面スクリーンショットを撮り忘れました。
image.png
これで画像ファイルなどが自動でS3にアップロードされるようになりました。

5.次のステップ

ChatGPT先生は以下のように教えてくれました。
1.ローカルでWordPressを起動し、プラグイン設定を完了。
2.設定済みの環境をDockerイメージとして保存。
3.RDS移行とともに、ECS(Fargate)にデプロイ。
4.デプロイ後にS3設定が有効な状態で運用開始。

今は上記の1が完了したところです。
長くなりそうなので、2以降は別ページに記載します。
はたして無事に目標を達成できるのか?! 乞うご期待w

★続きのページは以下
https://qiita.com/twilightdragonfly/items/3c62c90e66d83cf9c906

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?