Type【コマンド一発】AnsibleでPSGI-MTサーバをAWSに構築するこんにちわ。昨日飲み過ぎたonagataniです。AdventCalenderの8日目です。この記事は情報が古くなっています。githubで最新のドキュメントを公開していますので以下のリンク先をご覧下さい。TypeのサーバをEC2上に構築するAnsible-Playbookを紹介します。本番環境を想定して作っているので是非ご利用下さい。既存のMTライセンスがそのまま使えるApacheやmod_phpなどNginxやphp-fpmに慣れていない人にも優しい構成AWS用の設定もやってくれますバックアップ設定も含めて全部やってくれます(スナップショット・MySQLDump)プロダクション環境でも利用可能(自己責任)ある程度チューニング済みPSGIなのでMTも高速ssh用のユーザとSFTP専用のユーザを複数作成可能MT-AMIを使えよ!という声が聞こえて来そうですが、ライセンスが余ってる人やオンプレからの移行などの場合に便利ではないでしょうか。MT-AMIのApache版は有償しかないですが、パッケージ版は個人利用の場合にはライセンス無償なのでお財布にも優しいですね。ちなみに対象インスタンスはどれでも大丈夫ですが一応t2.midiumとしておきます。自宅にMacしかないのでMacについて説明しますが、AnsibleはどのOSでもPythonが動けば動くはずです。AmazonLinuxとCentOS、MacOSについてはplaybookの動作確認済みですMacのterminalを開き以下のようにpipコマンドで導入して下さいhttp://docs.ansible.com/ansible/intro_installation.html#latest-releases-via-pipなお、自分のmac(10.9.5)ではhomebrewでインストールされるAnsibleのバージョンが1.9.3でした。1.9.3はバグがあるためhomebrewは使用せずにpipでAnsibleを導入しましたが、皆さんの環境も1.9.3の場合はpipでインストールする事をおすすめします。今回使用するplaybookではSSH(SFTP)接続のユーザを最低2ユーザ作成します。サーバの管理者用とコンテンツ管理用(SFTPオンリー)になります。以下のコマンドをmacのターミナルで実行してSSH(SFTP)接続時の鍵を事前に作成します。以下に例を記載しておきます。次にSSH(SFTP)接続時のパスフレーズを聞かれますので任意で入力します(パスフレーズを紛失すると使えなくなりますのでメモして下さい)。SSH・SFTP用に2つ作成して下さい。EC2の準備AmazonLinuxで起動させます。Role(ec2とS3の権限が必要です)を設定して下さい。S3バケットの用意S3のデータベースのDumpを保存するバケットを作成して下さい。バックアップローテーションはS3のライフサイクル機能を利用して下さい。EC2スナップショット今回作成するサーバではcronで毎日定時にスナップショットを取得するように設定されますが。起動したインスタンスに以下のタグをつけて下さい。※スナップショットやMySQLDumpが必要なければrootユーザのcronをコメントアウトして下さい。※スナップショット取得スクリプトはこちらを参考に修正したものを利用しています。playbookの取得githubからplaybookのソースを取得します。gitcloneするかzipをダウンロードして解凍して下さい。git@github.com:onagatani/ansible-playbook-AmazonLinuxMovableType.githttps://github.com/onagatani/ansible-playbook-AmazonLinuxMovableType/archive/master.zip解凍しましたらansible-playbook-AmazonLinuxMovableTypeフォルダにターミナルで移動して下さいドメイン等の設定Ansibleではプロビジョニングされる対象サーバの設定はyamlで変数として設定します。以下の各ファイルの該当箇所を作成したいサーバ用に修正して下さい。サーバのホスト名になります。サーバからの通知メールの送付先になります。サーバに設定するドメイン名になります。sudo可能なSSHユーザを追加します。SFTP専用ユーザを追加します。1アカウント以上作成して下さいSSHのパスフレーズを記載しますの箇所には事前準備で用意したSSH鍵のパスフレーズをハッシュ化したものを記載します(サーバ内でのsshユーザのパスワードとパスフレーズを共通にします)。ハッシュ化するコマンドは以下です。'SSH(SFTP)ユーザのパスフレーズ'コマンドを実行するとハッシュ化されたパスフレーズが出力されるのでgroup_vars/allファイルの該当箇所に記載して下さい。事前準備で実行したssh-keygenコマンドにて、ユーザ名.pubというファイルが生成されているのでこれを以下の場所に移動させます。移動先:roles/sshd/files/public_keys/移動時にはファイル名をユーザ名.pubからユーザ名に変更して下さい。MT本体の設置roles/movabletype/files/以下にMTのzipファイルを設置して下さい。プラグインの設置roles/movabletype/files/mt-plugins及びmt-static以下に設置したディレクトリやファイルはそのままサーバのplugins及びmt-static以下にコピーされます。今回はサンプルとしてPageButeを添付してみました。準備が完了したのでプロビジョニングを実行します。"mysql_root_password=mysqlに設定するルートパスワード(任意)"mysqlのルートパスワードが漏れると大変なのでymlでは管理しないようにしています。終了後は一度サーバをリスタートする事をお勧めします。再起動後にブラウザからアクセスするとMTの管理画面に無事にアクセスできると思います。Restartを使用してMTを再起動して下さい。運用でサーバに変更を加える場合もあるかと思いますが、playbookを再度適用してしまうとデグレードの原因になりますのでplaybook側を正として運用しサーバ側への変更はansibleで行うようにすると良いかと思います。いえ、なかなかそうもいかないと思いますのでapacheのconfは極力触らずにAnsibleの管理外であるコンテンツ側(.htaccess)で対応すると良いと思います。MT設定ドキュメントルートなどは以下になります。/service/movabletype以上で終了になります。発行するコマンドは1回ですが、事前の準備等がありAWSやLunuxにある程度精通していないと使えない感じかもしれません。希望があればAWS+MT+Ansibleでサーバ構築ハンズオンでもやりたいなぁと思います。面倒な人は僕に直接相談下さい。お酒飲ませてくれたら助けます。>プロフィールonagatani@onagatani札幌在住のインフラ・サーバサイドエンジニアです。スープカレーと活イカが好物です。