さくらVPSローカル接続、NFSでマウントしたディレクトリにMovableTypeで静的HTMLを出力してみた
前回の記事(さくらのVPSを2台ローカル接続してphpMyAdminでMySQLに接続)からの続き。
1台目(sv-a 192.168.1.1)にインストールしたMovableTypeから、2台目(sv-b 192.168.1.2)に静的なHTMLを直接出力してみる。
2台目にNFSサーバーを設定し、1台目に2台目の公開ディレクトリをマウントする。MovableType のウェブサイトパスを、マウントしたディレクトリに設定して2台目の公開ディレクトリへ出力しようという算段。
sv-b://var/www/ →(マウント)→ sv-a://mnt/sv-b/ ← MT出力
NFSのインストール
公開用のHTMLファイルなどを保存する場所は、2台目(sv-b)に置きたいので以下の通りの設定とする。
- NFSサーバー : sv-b 192.168.1.2
- NFSクライアント : sv-a 192.168.1.1
NFSサーバー側(sv-b 192.168.1.2)
iptables を編集して eth1 経由で192.168.1.1 から来るNFSのパケットがファイアーウォールを通れるようにする。*1
[root@sv-b ~]# vim /etc/sysconfig/iptables (以下の行を適切な場所に追加) -A RH-Firewall-1-INPUT -i eth1 -s 192.168.1.1 -p tcp --dport 2049 -j ACCEPT -A RH-Firewall-1-INPUT -i eth1 -s 192.168.1.1 -p udp --dport 2049 -j ACCEPT -A RH-Firewall-1-INPUT -i eth1 -s 192.168.1.1 -p tcp --dport 111 -j ACCEPT -A RH-Firewall-1-INPUT -i eth1 -s 192.168.1.1 -p udp --dport 111 -j ACCEPT -A RH-Firewall-1-INPUT -i eth1 -s 192.168.1.1 -p tcp --dport 892 -j ACCEPT -A RH-Firewall-1-INPUT -i eth1 -s 192.168.1.1 -p udp --dport 892 -j ACCEPT [root@sv-b ~]# /etc/rc.d/init.d/iptables restart
nfs を yum でインストールして設定
[root@sv-b ~]# yum install nfs-utils rpcbind [root@sv-b ~]# vim /etc/sysconfig/nfs # 設定ファイルの中程の以下の記述のコメントをはずす MOUNTD_PORT=892 [root@sv-b ~]# vim /etc/idmapd.conf # 5行目のコメントを外して適当な名前をいれる Domain = local.sv.jp [root@sv-b ~]# vim /etc/exports # エクスポートするディレクトリを設定 /var/www 192.168.1.1(rw,no_root_squash) # 設定の反映 [root@sv-b ~]# exportfs -ra # 確認 [root@sv-b ~]# exportfs -v # 起動 [root@sv-b ~]# service rpcbind start [root@sv-b ~]# service nfslock start [root@sv-b ~]# service nfs start # 確認 [root@sv-b ~]# rpcinfo -p # 自動起動の設定 [root@sv-b ~]# chkconfig rpcbind on [root@sv-b ~]# chkconfig nfslock on [root@sv-b ~]# chkconfig nfs on
NFSクライアント側(sv-a 192.168.1.1)
# インスト [root@sv-a ~]# yum install nfs-utils rpcbind [root@sv-a ~]# vim /etc/idmapd.conf # 5行目のコメントを外してサーバーと同じ名前をいれる Domain = local.sv.jp [root@sv-a ~]# /etc/init.d/rpcbind start # 確認 [root@sv-a ~]# rpcinfo -p # 自動起動の設定 [root@sv-a ~]# chkconfig rpcbind on [root@sv-a ~]# chkconfig netfs on # マウント用ディレクトリ作成 [root@sv-a ~]# mkdir /mnt/sv-b [root@sv-a ~]# chmod 777 /mnt/sv-b # マウント(-o soft を入れておくと、相手先が起動してない時にエラーのみ返してハングしない) [root@sv-a ~]# mount -t nfs -o soft 192.168.1.2:/var/www /mnt/sv-b # 自動マウントの設定 [root@sv-a ~]# vim /etc/fstab 192.168.1.2:/var/www /mnt/sv-b nfs rw,soft 0 0 # 接続テスト [root@sv-a ~]# echo 'test' > /mnt/sv-b/test.html [root@sv-a ~]# ls -l /mnt/sv-b # ファイルを書き込んでみて、リスト表示した際にユーザー:グループがnobodyになっていないことを確認 # アンマウントの方法 [root@sv-a ~]# umount /mnt/sv-b
3台目以降の公開ディレクトリもマウントすることを想定して、マウント用ディレクトリの下に、sv-bマウント用のディレクトリを作成してマウントした。
なお、両方のサーバーに共通していないユーザーで書き込まれたファイルは、マウントした側から見ると、nobody として表示される。
MovableTypeでの接続テスト
ウェブサイトの設定画面で、ウェブサイトパスを変更。
権限などがうまく設定できていないと、変更を保存する際にエラーメッセージが出て変更できない。
/mnt/sv-b/html など、適切なパスを設定し再構築。
念のためファイルが正しく書き出されたことを、両方のサーバーでそれぞれ確認する。
終わりに
この方法で、1台のサーバーにインストールした MovableType を利用して、複数台のサーバーへ静的なHTML生成が可能となる。
このままでは、ダイナミックパブリッシングや検索機能を利用することはできないが、静的なサイトを複数サーバーで管理したり、ステージングサーバーと公開サーバーを分けて運用する場合などで便利な方法だ。
*1:ローカルループバックでローカル接続をフィルタしないという方法のほうがスマートな気もするが、両サーバーともウェブに公開しているので、ここではなんとなく個別設定で穴を開けた。あまり深く考えてないです。