前回は 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 を指定することでマウントのタイミングを遅らせるようにしてみました。