Amazon S3にWordPressの画像ファイルを配置する

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領域に保存された画像ファイルが表示されるようになりました。