WordPressでAWS S3に画像ファイルを配置して表示させる
AWS S3にWordPressの画像データを移動させて使用する方法です。WP Offload S3 Liteなどのプラグインを使う方法もありますが、今回はプラグインを使わず、S3をファイルシステムとしてEC2からマウントして使用する方法をご紹介します。
AWS-CLIの環境設定を行います。
$ aws configure
AWS Access Key ID [None]: <Access Key ID>
AWS Secret Access Key [None]: <Secret Access Key ID>
Default region name [None]: ap-northeast-1
Default output format [None]: text
wp-content/uploads/の中身をs3にコピーします。
$ aws s3 cp wp-content/uploads/ s3:///wp-content/uploads/ --recursive
s3fs-fuseに必要なパッケージをインストールします。
$ sudo yum -y install gcc-c++ fuse fuse-devel libcurl-devel libxml2-devel openssl-devel
s3fs-fuseをインストールします。
$ git clone https://github.com/s3fs-fuse/s3fs-fuse.git
$ cd s3fs-fuse/
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
マウントポイントを作成してs3領域をマウントします。マウントするユーザーはnginxのユーザーIDとグループIDにしました。
$ sudo mkdir /mnt/s3fs
$ echo "<Access Key ID>:<Secret Access Key>" | sudo tee -a /etc/passwd-s3fs
$ sudo chmod 640 /etc/passwd-s3fs
$ sudo /usr/local/bin/s3fs <Bucket Name> <Mount Point> -o rw,allow_other,uid=$(id -u nginx),gid=$(id -g nginx),default_acl=public-read
$ echo "/usr/bin/s3fs#<Bucket Name> <Mount Point> fuse rw,allow_other,uid=$(id -u nginx),gid=$(id -u nginx),default_acl=public-read 0 0" | sudo tee -a /etc/fstab
/wp-admin/options.php をブラウザで開いて、次の項目を変更します。
upload_url_path http://<Bucket Name>.s3-ap-northeast-1.amazonaws.com/wp-content/uploads
s3fsでマウントした領域へのシンボリックリンクを張ります。
$ ln -sf /s3fs/<Bucket Name>/wp-content/uploads /var/www/html/wp-content/
これでS3領域に保存された画像ファイルが表示されるようになりました。