FuelPHP + Ansible で超ラクラク開発/運用 - FuelPHPのインストール編

開発者でも簡単にインフラ構築できる時代が来ました。Ansibleという強力な環境構築ツールを利用すれば簡単に環境構築ができます。

環境構築のツールはそのほかchef, puppet, dockerなど様々ですが、なぜAnsibleを選択したのかは以前筆者が書いた以下の記事を参考にしてください。

Qiita ソフトウェアエンジニアからみた環境構築自動化ツールの比較、感想

PHPのフレームワークも近年人気を増しているLalavel, 定番CakePHP, 超高速PhalconなどありますがなぜFuelPHPを選んだかというと機能が豊富なことと日本語の情報がたくさんあるからです。単純に好みです。

これからFuelPHP + Ansibleを使った開発のノーハウを次のような順で紹介しようと思っています。

  • パート1:FuelPHPのインストール編
  • パート2:メンテナンスモード切り替え編
  • パート3:デプロイ編
  • パート4:開発/本番環境の運用時の構成、注意点

以下の開発環境をベースに説明させていただきます。また、Ansibleの概念を知っている人向けです。

  • MacOS X 10.10.2
  • ansible 1.7.2
  • FuelPHP 1.7

※ ansibleのインストール手順はGoogle検索するとたくさん出てきますので割愛させていただきます。

AnsibleでFuelPHPをインストールするPlaybookを実行するためには~/role/ロール名/配下にその手順をyaml形式で書く必要があります。以下、~/role/ロール名/task/main.ymlの処理内容です。

- name: ①Copy the code from repository
git: repo={{ repository }} dest={{ root_dir }} accept_hostkey=yes
sudo: no

- name: ②comporser self-update
shell: php composer.phar self-update chdir={{ root_dir }}

- name: ③comporser update
shell: php composer.phar update chdir={{ root_dir }}

- name: ④set fuel_env.
shell: env FUEL_ENV=production php oil -v chdir={{ root_dir }}

- name: ⑤create link.
file: path={{document_root_path}} src={{fuel_public_dir_path}} state=link

- name: ⑥db migrantion.
shell: FUEL_ENV=production php oil refine migrate chdir={{ fuel_dir_path }}

処理内で使用される {{ }} 中は変数名が入ります。 変数の定義は/role/ロール名/vars/main.ymlに記述します。上記の内容ですと

# fuelPHPのgithubリポジトリ名
repository: git@github.com:fuel/fuel.git

# ソース本体が格納されるDIR
root_dir: /var/www/

# FuelPHPのDIR名
fuel_dir_path: /var/www/test

# FuelPHPの公開DIR名
fuel_public_dir_path: /var/www/test/public

# ドキュメントルートのDIR名
document_root_path: /var/www/html/public

処理順に説明すると ① githubからFuelPHPソースをダウンロードする。 ② comporser自体をアップデート ③ comporserでFuelPHPのcore部分をインストール ④ FUEL_ENVの環境変数にproductionと設定(本番指定) ⑤ ドキュメントルートにFuelPHPのpublicディレクトリ配下をシンボリックリンクを貼る ⑥ FuelPHPのマイグレーションでテーブルを自動生成する

ここまでがAnsibleでFuelPHPをインストールするためのRole内容でした。 次、Playbookを実行する処理を書いてみます。

~/fuelphp.ymlにPlaybookで実行するRole名を指定します。

- name: install FuelPHP.
hosts: ec2_web01
sudo: yes
remote_user: root
roles:
- ロール名

次、Inventoryファイルを作成します。 hostというファイルにAnsibleを実行したいサーバーのIPを設定します。

[ec2_web01]
00.00.000.000

最後、Playbookを実行するだけ。

ansible-playbook -i host fuelphp.yml

ここまでFuelPHP開発に必要なインストール手順をAnsibleコードで実装してみました。このようにミドルウェアのインストール手順、環境構築の手順などを見える化することにより、チームメンバー間の情報共有が楽になったり構築の手間が省けたりするのが最近流行りのimmutable infrastructureの思想かと思います。 Ansibleを積極的に採用して開発効率を上げましょう!

次回はAnsible+FuelPHPを利用した超簡単、スピーディーなメンテナンスモード切り替え編を紹介しますのでよろしくお願い致します。