なお、今回の一撃シェルスクリプトが実行する処理は次のとおりです。
- OSインストール直後の各種設定
- ドキュメントルート作成とMovable Typeダウンロード
- MySQLインストールとDB作成
- perlモジュールとnginxインストール
- perl-fastcgi initスクリプト作成
- デーモンの自動起動設定、パッケージのアップデート、再起動
どのようなサーバーを構築するか
まず、Webサーバーとしてnginx、データベースとしてMySQLのコミュニティ版のrpmパッケージをインストールします。MySQLを使うのは、Movable TypeではデータベースにMySQLの利用が推奨されているためです。
なお、本稿執筆時点でCentOS 6標準のリポジトリにあるMySQLはv5.1ですが、コミュニティ版のリポジトリからv5.6をインストールすることができます。また、nginx単体ではCGIを動かせないので、perl-FCGIパッケージをインストールし、これをデーモンとして動かします。
一撃シェルスクリプトの設計ルールと今回の実装方針
一撃シェルスクリプトは、私が定義した次のルールに則って作成されています。
OSインストール直後に一撃シェルスクリプトを配置して動かすものとする
一撃シェルスクリプトが毎回同じように動作することを保証するために必要な前提です。
実行回数は1回のみで、人が張り付く必要のない設計とする
スクリプトの初回起動時以外に人が張り付かないようにするために、作業用PCからインストール対象のサーバーへMovable Typeをアップロードするのではなく、サーバー自身がMovable Typeを取得するようにしました。サーバーにopenssh-clientsパッケージをインストール[1]した後、手元のPCからMovable TypeのzipファイルをSCP(Secure Copy)でアップロードする仕様にしてしまうと、スクリプト起動から終了までの途中に少なくとも1回、人が張り付く必要が生じるからです。
また、前回の一撃シェルスクリプトで重視していないことでも触れていますが、何がなんでも1本のスクリプトファイルで完結することは目指しません。(インターネットにつながっていることが前提ですが)設定ファイルが複数または多岐にわたる場合には、GitHubなどから雛形ファイルをダウンロードし、各々のホストで整形加工することもよしとしています。
今回の一撃シェルスクリプトでは、perl-FCGIをデーモンとして動かすためのスクリプトを2本生成するのですが、一撃シェルスクリプトに直接ヒアドキュメントで書いてしまうと、非常に冗長で保守性が下がってしまいます。このため、別ファイルとして用意するか、外部Webサイトからダウンロードするかの選択肢となりますが、せっかくWebに公開されているリソースがあるので、これを活用したいと思います。
[1] CentOS 6.6をminimalでインストールするとopensshクライアントがインストールされていないため、一撃シェルスクリプトの中でインストールします。
対話式の入力は可能な限り回避する
一撃シェルスクリプトの定義では明言していませんが、シェルスクリプト実行時の引数は可能な限り少ないほうがよく、できれば引数なしか1つだけが理想です。もちろん、引数を少なくするためにシェルスクリプト内のハードコードが増えたりしては本末転倒ですが、人は間違う生き物ですから、可能な限り人の手が介在しないことが望ましいのです。このため、今回の一撃シェルスクリプトは引数にMovable TypeのダウンロードURLのみを与えるようにしています(使い方は後述)。
もう1つ、MySQLのrootユーザーにパスワードを付与するのですが、こちらは引数として与えずに、my.cnfの雛形ファイルをアップロードして対応することにします。
今回インストールするMovable Typeについて
Movable Typeは単にブログツールというだけでなく、Webサイト単位でWebページやファイルの管理、更新履歴の保存といったCMS機能を提供するパブリッシングプラットフォームです(Movable Typeの公式サイトより引用)。
今回は個人ブログの開設を目的に構築しているので、個人無償ライセンスでMovable Typeをインストールします。ライセンスについての詳細は「Movable Typeのライセンス 」をお読みください。また、「必要インストール環境と、ブラウザ動作環境]」もご一読をお勧めします。
一撃シェルスクリプトの他に用意するもの
今回のCMS構築には、以下のものも必要です。
メールアドレス
Movable Typeを個人ライセンスでダウンロードするには、パッケージのダウンロードURLをメールで受け取る必要があるため、外部から受信可能なメールアドレスを1つ用意します。
MySQLのパスワードを記述したファイル
MySQLのパスワードを自身で決め、以下のようにmy.cnfの元となる「root.my.cnf」というファイルをアップロードします。
[client] user=root password="P@sSw0Rd"
なお、今回の一撃シェルスクリプトでは、root.my.cnfのアップロードを忘れても、ランダムにパスワードを生成して/root/.my.cnfファイルをアップロードするようにしています。サーバーの構築が終わり、WebブラウザからMovable Typeの「おまかせインストーラ」でデータベースの設定を行う際に、/root/.my.cnfを開いてMySQLのパスワードを確認することも可能です。
次ページから、今回の一撃シェルスクリプトのコードを見ていきます[2]。ただし、見ていくのは次の処理を行うコードとし、前回と共通のコードは解説を省略します。
- OSインストール直後の各種設定①:ダウンロードURLを変数に格納
- OSインストール直後の各種設定②:unzipコマンドのインストール
- ドキュメントルートの作成とMovable Typeのダウンロード
- MySQLのインストールとDBの作成
- epelリポジトリとrpmforgeリポジトリのインストール
- perlモジュールとnginxのインストール
- perl-fastcgiのinitスクリプトの作成
[2] 今回の一撃シェルスクリプト(ファイル名:ICHIGEKI)は、本記事のタイトル下にある[ダウンロード]をクリックすると入手できます。