SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ツールがなくてもサーバー構築でたじろがない! 一撃シェルスクリプト道場

Nginx+PerlのCGI環境にMovable Typeをインストールする一撃シェルスクリプト

ツールがなくてもサーバー構築でだじろがない! 一撃シェルスクリプト道場 第2回

  • このエントリーをはてなブックマークに追加

ダウンロード ICHIGEKI (6.9 KB)

 今回の一撃シェルスクリプトは、OSインストール直後のサーバーに対し、サーバーの構成管理とCMS(コンテンツ管理システム)の「Movable Type」のセットアップと起動をオートメーション化するものです。サーバーは前回と同様、CentOS 6.6をminimalでインストールしたものとします。CMSは起動したことがWebブラウザで確認できて楽しいので、皆さんもぜひチャレンジしてみてください。

  • このエントリーをはてなブックマークに追加

 なお、今回の一撃シェルスクリプトが実行する処理は次のとおりです。

  1. OSインストール直後の各種設定
  2. ドキュメントルート作成とMovable Typeダウンロード
  3. MySQLインストールとDB作成
  4. perlモジュールとnginxインストール
  5. perl-fastcgi initスクリプト作成
  6. デーモンの自動起動設定、パッケージのアップデート、再起動

どのようなサーバーを構築するか

 まず、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)は、本記事のタイトル下にある[ダウンロード]をクリックすると入手できます。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
OSインストール直後の各種設定

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ツールがなくてもサーバー構築でたじろがない! 一撃シェルスクリプト道場連載記事一覧

もっと読む

この記事の著者

濱田 康貴(ハマダ ヤスタカ)

サーバーエンジニアとして主にLinuxのWEBサーバーを設計、構築、運用を行っています。運用ツールの相棒としてシェルスクリプトやワンライナーは心強いパートナーと信じて疑わず、ブログでTIPSを公開しています。2009年5月のUSP友の会活動開始より参画し、現副会長。最近では、USP友の会で「一撃サーバー構築シェルスクリプト勉強会」を開催しているほか、日本で唯一のシェルスクリプト総合誌『シェルスクリプトマガジン』(毎月25日発売)で、隔月(偶数月号)連載「教えて先輩 サーバー運用お助けTips」を執筆しています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8517 2015/04/15 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング