AWS で WordPress を RDS とか s3fs とか使って動かしてみる

前回は WordPress にアップロードされた画像などのファイルを AWS SDK for PHP の S3 ストリームラッパーを使って無理やり S3 に保存しましたが、

s3fs-fuse を使えばもっと簡単そうなのでやってみました。

下記の手順は前回と変わらないので省略します。

前回の手順では S3 Budket の作成で Permissions の bucket policy でアップロードされたファイルが自動的に公開されるようにしていましたが、s3fs ならマウントオプション (default_acl) で指定できるので Permissions の設定は必要ありません(もしかしたら AWS SDK for PHP のストリームラッパーでもできたのかも?)。

s3fs-fuse のインストール

s3fs-fuse をインストールします。

まずはビルドに必要なパッケージをインストールします。

yum install kernel-devel libxml2-devel libcurl-devel gcc-c++ fuse fuse-devel openssl-devel git automake

ソースを取得してビルドします。

git clone https://github.com/s3fs-fuse/s3fs-fuse.git
cd s3fs-fuse/
./autogen.sh
./configure
make
sudo make install

マウントポイントを作成します。

mkdir -p /s3fs/wordpress/

fstab に追記します。

cat <<EOS>> /etc/fstab
/usr/local/bin/s3fs#example-wordpress /s3fs/wordpress fuse\
 _netdev,rw,allow_other,uid=$(id -u apache),gid=$(id -g apache),default_acl=public_read,iam_role=wp-role 0 0
EOS
cat /etc/fstab

マウントします。

mount -a

WordPress のインストール

WordPress をダウンロードして /var/www/html に展開します。

cd /usr/local/src/
wget http://ja.wordpress.org/wordpress-3.9.2-ja.zip
unzip wordpress-3.9.2-ja.zip
rm -fr /var/www/html/
mv wordpress /var/www/html/

wp-config.php を作ります。DB のホスト名には RDS の Endpoint のホスト名を指定します。

cd /var/www/html
mv wp-config-sample.php wp-config.php

sed wp-config.php -e "
  /^define('DB_NAME'/c     define('DB_NAME', 'wordpress');
  /^define('DB_USER'/c     define('DB_USER', 'wordpress');
  /^define('DB_PASSWORD'/c define('DB_PASSWORD', 'wordpress');
  /^define('DB_HOST'/c     define('DB_HOST', 'wordpress.xxxxxxxx.ap-northeast-1.rds.amazonaws.com');
" -i

curl https://api.wordpress.org/secret-key/1.1/salt/ > /tmp/secret

sed wp-config.php -e "
  /^define('AUTH_KEY'/r /tmp/secret
  /^define('AUTH_KEY'/d
  /^define('SECURE_AUTH_KEY'/d
  /^define('LOGGED_IN_KEY'/d
  /^define('NONCE_KEY'/d
  /^define('AUTH_SALT'/d
  /^define('SECURE_AUTH_SALT'/d
  /^define('LOGGED_IN_SALT'/d
  /^define('NONCE_SALT'/d
" -i

cat wp-config.php

ブザウザで http://aws.example.net/ にアクセスして WordPress のインストールウィザードに必要項目を入力してインストールを完了します。

この後、アップロードファイルの保存先の設定をするので、まだ記事の投稿は行いません。

WordPress のアップロード先設定

WordPress の次の URL を開きます。

  • http://aws.example.net/wp-admin/options.php

upload_url_path を探して、次の通りに入力して保存します。

upload_url_path  http://example-wordpress.s3-ap-northeast-1.amazonaws.com

WordPress のアップロード先ディレクトリにシンボリックリンクを作ります。

ln -sf /s3fs/wordpress /var/www/html/wp-content/uploads

動作確認

WordPress に画像をアップロードしてみます。上手くアップロードできれば成功です。

参考にした記事

参考にした記事だと IAM ロールを使うときは rc.local でマウントしていたけれど、fstab で _netdev を指定することでマウントのタイミングを遅らせるようにしてみました。