goofysを使ってAWSのEC2にS3バケットをマウントして、WordPressの画像置き場にする(kusanagi環境)
S3はストレージ利用だけでなく、Webから呼び出すホスティング領域としても使えます。でもいちいちCLIやブラウザからファイルをアップしなくてはいけない、となると面倒ですね。
今回は、以下のことを実現するために、EC2のサーバからS3をマウントして、Linux上で通常のディレクトリと同様に運用する環境を構築しました。
↓やりたいこと↓
WordPressを冗長化して、画像のアップロードディレクトリをs3にする
WordPressのサイトを2台構成にするにあたって、アップロードした画像をどうするか、DBをどうするか、という問題があります。このうち、「DBはRDSを使う」で解決できるんですが、画像をどうするか、と。rsyncするとかlsyncするという手もありますが、画像のバックアップ性や費用のことを考えると、S3を画像置き場にするというのが魅力的。
1.goとfuseをインストールする
goofysが使うものなのでインストールします。
2.AWS CLIの設定
AWSのcredentials設定をします。
AWS Access Key ID [None]: ********************
AWS Secret Access Key [None]: ****************************************
Default region name [None]: ap-northeast-1
Default output format [None]:
2.goofysをインストールする
まずPATHを作成する。好きなとこでいいです。
$ echo $GOPATH
/usr/local/dacelo/go
GOROOTも設定する、という手順もネットでは見かけますが、指定しなければデフォルトのPATHが使われるんで特にしなくていいです。
そしてインストール。
https://github.com/kahing/goofys
を見てみて、ちゃんとgoofysのgithubがあることを確認してください。
$ go install github.com/kahing/goofys
getもinstallも、「あれ?固まったかな?」と不安になるくらいの時間、戻ってきません。インストールが完了しても、プロンプトが戻ってくるだけで何もエコーがないので不安になりますが、きっと大丈夫。
3.バケットを作成する
好きな名前でバケットを作ります。コマンドラインで作っても、管理コンソールから作ってもどちらでもいいです。
make_bucket: s3://dacelo-s3-mnt/
どっちで作るにしても、できたら、lsで確認しましょう。
4.バケットをマウントする
今回は、/mnt/にマウントするべく、まず普通にディレクトリとして作ります。
あとでWordPressが使うので、所有権をhttpdにしときます。(これはmount時に指定すれば、ここではなんでもいいのかも知れない。未検証)
httpdのUID、GIDを調べてメモっておきます。
uid=1001(httpd) gid=1001(www) groups=1001(www)
さあ、いよいよマウントします。さっきメモった、httpdのGIDとUIDをセットします。
広告
これでhttpd:wwwとしてマウントされます。
5.WordPressから画像をアップロードできるようにする。
これでWordPressから画像をアップロードすると、s3の中に[uploads]というディレクトリが作成され、中に画像が保存されていきます。やった!
6.再起動しても大丈夫なようにする
何らかの事情でサーバが再起動すると、マウントが外れてしまってエラいことになるので、fstabに登録しておきます。
以下を/etc/fstab の末尾に追記。
それから忘れちゃいけないのが、root用にもawsのcredentialsが必要ということ。
sudoで設定しようとするとrootのホームディレクトリにならないので、suしてからrootとして設定する。
# aws configure
AWS Access Key ID [None]: ********************
AWS Secret Access Key [None]: ****************************************
Default region name [None]: ap-northeast-1
Default output format [None]:
入力する情報は同じです。
7.テストする
df -h すると、マウント状況が確認できます。
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/xvda1 30G 5.3G 25G 18% /
devtmpfs 472M 0 472M 0% /dev
tmpfs 495M 0 495M 0% /dev/shm
tmpfs 495M 13M 482M 3% /run
tmpfs 495M 0 495M 0% /sys/fs/cgroup
dacelo-s3-mnt 1.0P 0 1.0P 0% /mnt/s3/kids-img-mnt-root
1ペタか、凄ぇな。初めて見る単位。
サーバを再起動しても自動マウントされるかどうかも、試しておきましょう。
トラブルシューティング
2019/06/06 17:23:41.814913 main.FATAL Unable to mount file system, see syslog for details
こんなエラーが出てマウントに失敗したら、/var/log/messages を見ると詳細が出ています。
allow_other オプションが有効になってなかった
僕が遭遇した事例はこれ。どのユーザーからもアップできるように、allow_otherのオプションをつけてマウントしようとしたんですが。
/usr/local/gps/go/bin/goofys[29797]: main.FATAL Mounting file system: Mount: mount: running fusermount: exit status 1#012#012stderr:#012fusermount: option allow_other only allowed if ‘user_allow_other’ is set in /etc/fuse.conf
ということなので、/etc/fuse.confを修正します。
#user_allow_other
となっているので、2行目のコメントアウト#を外して有効化したらOKでした。。