最近のMovable Typeでの活用方法や取り組みや、3rd Focusで取り扱っているプラグインの活用方法をご紹介していきます。
前回の記事から2年も経過してしまいました。お久しぶりですonagataniことナガタニです。
今回は3rdfocusの人気製品である「SmartSync Pack」のサーバ配信機能の利用方法とApacheから実行するrsync+sshについて説明したいと思います。
Movable Type SmartSync Pack(以下MTSSP)は3rdfocusで扱っている人気プラグインとMTのライセンスを同梱したパックになっています。
これらの機能を利用する事で大きめのサイトでも構築できる構成となっています。
今回は問い合わせの多いサーバー配信機能の設定方法についてまとめてみようと思います。
なお、MTSSPはレンタルサーバ(例:さくらのレンタルサーバなど)でも動作する事をQAチームで検証しておりますが、レンタルサーバでは制約も多いためVPSやクラウドなどの利用をオススメしております。とはいえご自身でサーバのセキュリティアップデートや設定が行えない方も多いかと思います。そういった場合は3rdfocusのマネージド・サービスもご検討ください。
Movable Type SmartSync Platform|エンタープライズ向けのCMS Platform|3rd Focus Movable Typeの便利なプラグイン、テーマ、解説書
MTは静的にコンテンツを公開しているので、出力されたhtmlなどのファイルを設置すればMTが設置されていないサーバでもコンテンツを公開する事が可能です。
以下2つの構成がとられる事が多いかと思います。
MTSSPではコンテンツ配信時にCDNキャッシュクリアの機能は実装しておりますが、S3などのクラウドストレージへのコンテンツ配信は現状β版になっています(近日リリース予定です)ので、今回はCMS/WEBサーバの2台構成の場合を想定して説明していきます。
そもそもですが、サーバ間でファイルを送信する方法としていくつかの方法があります。
MTSSPで対応しているのはFTP(S)とrsync(d)での配信になりますが、今回は追加ソフトウェアの設定が必要ないrsyncでの配信について説明します。
レンタルサーバではsuEXECによってApacheなどはユーザ権限で動作していますが、VPSやクラウドではsuEXECはあまり利用されないかと思います(他人とサーバを共用しないため)。
そのためMTやApacheは通常apacheユーザとして起動することになりますので、apacheユーザがssh経由でrsyncを実行できる必要があります。
CMSサーバからWEBサーバへsshするためのユーザを作成しパスワードを設定します。
rsyncが使えないサーバがあるので念の為インストールします既にコンテンツ配信用のsshユーザが存在する場合は必要ありません。ユーザ名は仮でcontentsとしています。
# useradd contents
# passwd contents
# yum install rsync
この作業はCMSサーバ、WEBサーバ両方で実施してください。
CMSサーバからWEBサーバへのsshでパスワード認証を行うと、MTSSPでは動作しませんので公開鍵認証+パスフレーズ無しでのログインを可能にします。
以下の作業はCMSサーバで実施してください。
# su contents
一旦contentsユーザへスイッチします。
$ cd ~
contentsユーザのhomeに移動します。
$ ssh-keygen -t rsa -b 4096 -C "contents"
この後のプロンプトには全て何も入力しないでEnterで実行してください。パスフレーズなしの鍵が作成されます。
.sshディレクトリ以下に以下のファイルが生成されていると思います。
id_rsa.pubは公開鍵となるのでssh先のWEBサーバに設置する必要があります。
WEBサーバ側のcontentsユーザで以下のように設置してください。
# su contents
一旦contentsユーザへスイッチします。
$ cd ~
webサーバでcontentsユーザのhomeに移動します
$ mkdir .ssh
公開鍵を設置するためのディレクトリを作成します。
$ vim .ssh/authorized_keys
authorized_keysのファイル内にCMSサーバで作成したid_rsa.pubの中身を貼り付けるか、ファイルを転送します。(中身は改行無しになっています)
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
権限を調整します。これでcontentsユーザの秘密鍵でCMSサーバからWEBサーバにsshが可能になりました。
実際にCMSサーバからWEBサーバへsshしてみます。(WEBサーバのIPアドレスは仮です)
# ssh -i /home/contents/.ssh/id_rsa contents@192.168.1.2
どうでしょうか。パスフレーズ無しでWEBサーバへログインできたかと思います。
contentsユーザでのsshは確認できましたが、この状態だとapacheからcontentsユーザでのsshができないので、apacheがsshできるように調整します。rootで設定します。
# mkdir /usr/share/httpd/.ssh
# cp /home/contents/.ssh/id_rsa /usr/share/httpd/.ssh/contents.pem
# chmod 700 /usr/share/httpd/.ssh/
# chmod 600 /usr/share/httpd/.ssh/contents.pem
# chown -R apache.apache /usr/share/httpd/.ssh
apcheがアクセスできる場所に秘密鍵を設置し、known_hostsが追加できるように調整しています。試しにapacheからcontentsユーザでssh可能かテストします。
# sudo -u apache -H ssh -i /usr/share/httpd/.ssh/contents.pem contents@192.168.1.2
初回ssh時は、known_hostsへのfingerprint登録を聞かれますのでyesと答えて登録します。無事にwebサーバへsshできましたでしょうか。
念の為セキュリティ対策として以下のような感じで.ssh内へのアクセスは制限した方がよいでしょう。
RewriteCond %{REQUEST_URI} !^/\.well-known/
RewriteRule /\..+$ - [R=404,L]
現在のapacheは/usr/share/httpd内は参照していないようですが、念の為の設定になります。とはいえ、この設定があると基本的にドットから始まるURI(ファイル)は見れなくなるのでセキュリティ上安心かと思います。
以下のコマンドをwebサーバで実施します。
# chown contents.contents /var/www/html
WEBサーバの公開領域(ドキュメントルート)のパスを/var/ww/htmlとしていますので適宜修正ください。
以上の作業で準備が整いました。それではMTSSPの設定に入ります。(長かった)
細かい設定方法はマニュアルがあるので参照頂くとして、今回は簡単にrsyncで配信設定を行います
サーバ配信メニューから「サーバ配信」を選択し、新しいサーバ配信設定を作成します。
サーバー配信設定の設定名を入力し、通知先メールアドレスも入力します。
contents@192.168.1.2:/var/ww/html/
-rlOtcv -e 'ssh -i /usr/share/httpd/.ssh/contents.pem' --delete --exclude='mt-config.cgi' --exclude='mt-preview-*' --exclude=.git'
--deleteは転送元に存在しないファイルを転送先で消す機能になります。--excludeは配信除外設定になります。今回はmt-configやmt-previewを指定しています。※mt-configを指定しているのは万が一にも間違って送信される事を防ぐためです
実際の配信についてはマニュアルを確認頂いたほうが良いのですが、「サーバ配信」や「サーバ配信(個別)」から実行してみてください。数分後にrun-periodic-tasks経由で実行されます。
MTSSP(apache)からssh経由のrsyncを実行する方法についてまとめてみましたが如何でしたでしょうか。
apacheユーザでのknown_hostsへのfingerprintの追加で躓く方が多いかと思いますので参考にして頂ければ幸いです。
CMSサーバ・WEBサーバの構築方法についても今後まとめようと思いますが CMSサーバの構築についてはCOLSISの記事が参考になるかと思います。
さくらのVPSに手軽にセキュアで高速なMovable Type用サーバをAnsibleで自動で構築する方法