Allied ArchitectsAllied ArchitectsEngineer Blog

Ansible入門〜LAMP環境構築〜 (Advent Calendar 6日目)

2014/12/6 インフラ

この記事は Ansible Advent Calendar 2014 – Qiita の6日目の記事です。

お久しぶりです。Perfumeエンジニアの@massa142です。
(明日はWOWOWでのPerfume Nightです。このために今日WOWOWに加入しました(`・ω・´)キリッ)

仕事で新規開発をすることになってその開発環境を構築するのに、Vagrant × Ansibleの組み合わせがとても便利&お手軽だったので、ここでAnsibleについて紹介していこうと思います。

Ansibleってなに?

AnsibleとはPython製の構成管理ソフトウェアです。
詳しくは今年1年間でAnsible界隈ではどのような変化が起こったのか。の記事をご覧になって下さい。
公式ドキュメントはこちら

こういったプロビジョニングツールとしては他にchefなども有名ですが、個人的に以下のポイントがAnsibleの好きなところです。

・サーバ側に何もインストールする必要なし
・ディレクトリ構造がシンプル
・yaml形式で簡単

前提

今回ansibleを使って構築していく環境はこんな感じです。
・CentOS:6.4 x86_64
・PHP:5.3
・MySQL:5.6

また今回作成してgithubにあげたものは、こちらです。

参考にしたサイト

今回PHPの環境構築用のplaybookを作成していくうえで、Phansibleというサイトを参考にしました。

設定項目をポチポチしていくだけで整ったVagrantfileとansibleのファイルがDLできる、とてもありがたいサイトです。

Vagrantfileの解説

まずはVagrantfileはこんな感じです。

Vagrant.configure("2") do |config|

  config.vm.box = "CentOS_6_4_64"

  config.vm.network :private_network, ip: "192.168.33.40"
  config.ssh.forward_agent = true

  #############################################################
  # Ansible provisioning (you need to have ansible installed)
  #############################################################

  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "ansible/playbook.yml"  //ansibleでやっていく処理の定義ファイル
    ansible.inventory_path = "ansible/inventories/dev"  //host先リストの定義ファイル
    ansible.limit = 'all'  //host先を限定して実行するか?
  end

  config.vm.synced_folder "./", "/vagrant", type: "nfs"
end

ここでprovisionをansibleで行うことを宣言しています。
※今回はinventoryファイルにhost先のアドレスとして、192.168.33.40を設定しています。

playbookの解説

さっきのVagrantfileで設定していたplaybook.ymlはこんな感じ。

---
- hosts: all
  sudo: true
  vars:
    timezone: Asia/Tokyo
  vars_files:
    - vars/packages.yml
  roles:
    - init
    - apache
    - php
    - mysql
    - composer

ここのrolesで定義しているのが、上から順に実行されていきます。
(各々、roles/配下のディレクトリに対応してます。)
また、vars/packages.ymlでインストールしたいSystem PackagesとPHP Packagesを管理してます。

---
    sys_packages: ["git"]
    php_packages: ["php-cli","php-pear","php-common","php-gd","php-mbstring","php-pecl-xdebug","php-pdo","php-mysql","php-snmp","php-devel","php-process"]

それでは、次にrolesのなかのphpとmysqlを取り上げて見ていきます。

PHPのインストール

PHPのインストールを行っているtaskのファイルはこんな感じです。

- name: Install php
  sudo: yes
  yum: name=php state=present

- name: Install php package
  sudo: yes
  yum: name={{ item }} state=present
  with_items: php_packages  //上記で定義しておいたPHP Packagesのリスト

- name: Configure php.ini
  template: src=php.ini.tpl dest=/etc/php.ini 

とても直感的でわかりやすいかなと思います。

php.iniの設定ではtemplateという機能を利用しています。
roles/php/templates/php.ini.tplのファイルをテンプレートとして、host先に/etc/php.iniを生成してくれています。

MySQLのインストール

MySQLに関しては、Ansible Galaxyから落としてきたRoleを利用してます。
Ansible Galaxyとは色々なRoleが公開されいるサイトです。
好みのRoleを調べて、

$ ansible-galaxy install

コマンドでインストールしてみて下さい。

今回は以下のRoleを使わせてもらってます。
https://galaxy.ansible.com/list#/roles/435
ここのREADMEにも説明がありますが、デフォルトの設定を変更して利用する際は、vars/配下にファイルを作ってよしなにやってみて下さい。以下、READMEからの引用です。

mysql_root_password: super-secure-password
mysql_databases:
  - name: example_db
    encoding: latin1
    collation: latin1_general_ci
mysql_users:
  - name: example_user
    host: "%"
    password: similarly-secure-password
    priv: "example_db.*:ALL

こんな感じで、DBの名前やrootのパスワードなどを設定して下さい。

まとめ

以上、Ansibleの使い方の基本的なところをさらっと見てみました。

はじめの方にも書きましたが、Ansibleはとてもシンプルで使い勝手が良いツールです。またPython製とありますが、記述は基本yaml形式なのでPythonのことが何もわからなくても利用可能です。

社内ではchef使いのほうが優勢ですが、もっとAnsibleの良さが広く伝わっていけばいいな…|ω・)チラッ

最後に

この記事は以下の2つのAdvent Calendar 6日目の記事を兼ねています。
Ansible Advent Calendar 2014 – Qiita
Allied ArchitectsEngineer Blog Advent Calendar 2014 – Adventar

弊社で行っているAdvent Calendarの明日はごえもんの番です。

新井 正貴
  • 新井 正貴
  • Software Developer
  • こんにちは。アライドには2013年に新卒で入社しました。 Perfume × ラクロス × エンジニア といった感じです。お手柔らかにお願いしますm(_ _)m

RELATION ENTRY

D3.js入門〜Perfumeシングル売上チャートを作ってみた

D3.js入門〜Perfumeシングル売...

2014/09/29 D3.js

お久しぶりです。Perfumeエンジニアの新井です。 先週の9/21(日)にPerfumeがメジャーデビュー10周年&結成15周年の記念日を迎えました。 その記念日に、最終日を迎えたPerfume 5th Tour 2014『ぐるんぐるん』の詳しい様子は、こちらのライブレポートを御覧ください...

続きを読む

nanapi勉強会 vol2 (shell tips会)に行ってきた

nanapi勉強会 vol2 (shel...

2014/06/3 zsh

お久しぶりです。Perfumeエンジニアの新井です。 先日、9月にあるPerfumeのアリーナツアーのチケットが無事当選したので、夏休みを利用して行ってきますm(_ _)m さて、今回はさしぶりにPerfumeネタから遠ざかって、 先週の木曜日に行ってきた『nanapi勉強会 vol2 -...

続きを読む

新井 正貴さんの記事一覧へ

ページTOPへ