コーヒーアンドキーボード

コーヒーとキーボードにまみれて生活してます。一応専門はデジタルマーケ。

AWSの複数インスタンス間でWordPressのファイルを同期して冗長化(Lsyncd & Rsync)

何度もハマって、丸一日溶かしたのですが、最終的できたのはこの方法。

Nginx + lsyncd で WordPress を負荷分散させる | dogmap.jp

やりたい事

  • AWSWordPressの開発環境と本番環境を運用したい。
  • 問題となるのは本番環境では、wp-content/uploadsやwp-content/pluginが 日々更新され、差分がでてくる。
  • WP内の特定フォルダを指定して「本番環境→開発環境」へ同期したい。

構成

全体のイメージ

日々の更新を開発環境へ反映

wp-content/uploadsとwp-content/plugin ※今回やるのはこれ

開発環境 <---- (Lsyncd & Rsync) <---- 本番環境

MySQL

開発環境 <---- (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 をインストール。(rsyncAWSの場合は既に入っているはず)

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