AWSの複数インスタンス間でWordPressのファイルを同期して冗長化(Lsyncd & Rsync)
何度もハマって、丸一日溶かしたのですが、最終的できたのはこの方法。
Nginx + lsyncd で WordPress を負荷分散させる | dogmap.jp
やりたい事
- AWSでWordPressの開発環境と本番環境を運用したい。
- 問題となるのは本番環境では、wp-content/uploadsやwp-content/pluginが 日々更新され、差分がでてくる。
- WP内の特定フォルダを指定して「本番環境→開発環境」へ同期したい。
構成
全体のイメージ
日々の更新を開発環境へ反映
wp-content/uploadsとwp-content/plugin ※今回やるのはこれ
開発環境 <---- (Lsyncd & Rsync) <---- 本番環境
開発環境 <---- (Lsyncd & Rsync) <---- 本番環境
テーマ開発をで管理して本番へデプロイ
wp-content/themes
開発環境 ----> (GitHub) ----> 本番環境
本番環境(サーバー1)
Lsyncd をインストール
sudo yum -y install rsync xinetd
設定ファイルで注意をしたいのはsync.targetに記載する接続先。 AWS EC2のPrivateIPを入れること。ElasticIPじゃないよ。(当たり前なのかもしれないですが)
settings{ statusFile = "/tmp/lsyncd.stat", statusInterval = 1, logfile = "/var/log/lsyncd/lsyncd.log", } sync { default.rsync, source = "/var/www/vhosts/i-xxxxxxxx/wp-content/test/", target = "[開発環境(サーバー2)]::test", }
開発環境(サーバー2)
xinetd をインストール。(rsyncはAWSの場合は既に入っているはず)
sudo yum -y install xinetd
設定ファイルで注意をしたいのはhosts allowの設定もAWS EC2のPrivateIPを入れること。 また、ここで指定した名前[test]がLsyncd側でtarget指定する名前になります。
log file = /var/log/rsyncd.log [test] path = /var/www/vhosts/i-xxxxxxxx/wp-content/test hosts allow = [本番環境(サーバー1)] hosts deny = * list = true uid = root gid = root read only = false