自分の技術興味から、WordPressのメディアファイルをS3へ移行してみました。
当サイトはまだまだアクセス数が伸びているわけではありませんので、今すぐ必要はありません。
できることを検証して、最終的には設定を元に戻したいと思います。
S3にメディアファイルを保存するメリット
サーバーが1台ではなく複数台構成になった場合、サーバー内のデータを同期する必要があります。
メディアファイルは、デフォルトでwp-content/uploads/
というPATHに保存されます。このファイルを全サーバで同じにしなければなりません。
S3にメディアファイルを保存する設定方法
WP Offload Media Lite. プラグインの導入
WP Offload Media Lite. プラグインを導入します。
- 管理画面の左メニューより[プラグイン]→[新規追加] をクリックします。
- [WP Offload Media Lite]を検索します。
- [WP Offload Media] プラグインの横にある [今すぐインストール] をクリックします。
- プラグインのインストールが完了したら、[Activate] をクリックします。
- 管理画面の左メニューより[設定]→[Offload Media Lite] をクリックします。
- [Offload Media Lite] ページで、ストレージプロバイダーとして [Amazon S3] を選択し、[Define access keys in wp-config.php] を選択します。
IAMユーザーの作成
WP Offload Media LiteプラグインがS3にアクセスするためのアクセス権を設定します。
- AWSコンソールから[IAM]に遷移します。
- 左メニューの [ユーザー] をクリックします。
- [ユーザーを追加]をクリックします。
- [ユーザー名] テキストボックスに、
wp_offload_media_plugin_user
を入力し、[アクセスの種類]で[プログラムによるアクセス]を選択し、[次のステップ:アクセス権限] をクリックします。 - [既存のポリシーを直接アタッチ] を選択して
S3
で検索し、[AmazonS3FullAccess]のチェックボックス選択して、[次のステップ:タグ]をクリックします。 - [次のステップ:確認]をクリックします。
- ページに表示されるユーザーの詳細を確認し、[ユーザーの作成] をクリックします。
- ユーザーのアクセスキー ID とシークレットアクセスキーをメモします。
wp-config.phpの設定
さきほどのアクセス権をwp-config.phpファイルに直接設定します。
- WordPressサーバーにSSHアクセスします。
- 次のコマンドを実行します。
cd /opt/bitnami/apps/wordpress/htdocs/
cp -p wp-config.php{,_bak}
sudo vim wp-config.php
----------------------
define( 'AS3CF_SETTINGS', serialize( array(
'provider' => 'aws',
'access-key-id' => 'さきほど作成したAccessKeyID',
'secret-access-key' => 'さきほど作成したSecretAccessKey',
) ) );
/* That's all, stop editing! Happy publishing. */
(このテキストの上に追記します。)
S3バケットの作成方法
S3バケットをawscliから作成します。
awscliよりcredentialの設定は済んでいるものとします。
## バケットの作成
$ aws s3api create-bucket --bucket [バケット名] --create-bucket-configuration LocationConstraint="ap-northeast-1" --region ap-northeast-1
## バージョニング無効化
$ aws s3api put-bucket-versioning --bucket [バケット名] --versioning-configuration Status=Suspended
## 暗号有効化
$ aws s3api put-bucket-encryption --bucket [バケット名] \
--server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}'
## ブロックパブリックアクセスの無効化
$ aws s3api put-public-access-block --bucket [バケット名] \
--public-access-block-configuration "BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=false,RestrictPublicBuckets=false"
S3の画面でバケットが作成されていることを確認します。
保存するべきバケットの設定
WordPress管理画面の[Offload Media]ページに戻ってバケット名の設定を行います。
- [Offload Media] ページを更新します。
- Amazon S3 プロバイダーが設定されていることを確認し[Bucket]に作成したバケット名を入力して、[Save Bucket Setting]をクリックします。
今までのUploadファイルを移行する方法
WP Offload Media Liteプラグインの有料版を購入すれば、スムーズに移行できるようです。
無料版のままやることも可能です。
手順としては。
- サーバーに保存済みのファイルをすべて、S3にコピーする。
- DB内のデータを再作成する。作成方法は以下のサイトを参照ください。
まとめ
以上、S3でメディアファイルのアップロードを実現點せました。
また、既存ファイルの移行も可能となりました。
しかし、S3のファイル場所がSEO的によろしくないというようです。(WP Offload Media Liteプラグインにメッセージが表示されてます。)
Yikes! That’s not a very SEO-friendly URL. We strongly recommend you configure a CDN to point at your bucket and configure a subdomain of m-totsu.com to point at your CDN.(うわぁ!これはSEOに適したURLではありません。バケットを指すようにCDNを構成し、CDNを指すようにm-totsu.comのサブドメインを構成することを強くお勧めします)
解消するCloudfrontの設定にも挑戦してみましたが、結果まだうまくいってません。
こちらも時間があるときに再度挑戦してみようと思います。
ちなみにこのプラグインを無効にすれば、wp-content/uploads/
にファイルが戻ることを確認しました。
コメント