Ansible＋VagrantでLAMP環境を構築

vagrantとAnsibleでローカル環境構築しようとする時に見て頂ければと思います
というのも自分が忘れそうになるので技術メモとして残したいという理由でもあります

**■開発環境**
MacOS

**■使用バージョン**
vagrant バージョン1.7.2
ansible バージョン1.9.1

**■ansibleをインストール**
インストール方法はいろいろありますが
今回はhomebrewを利用してansibleをインストールします
homebrewを事前にインストールしておく必要があります

```
$ brew install ansible
```

インストールができているか確認

```
$ brew ansible　--version
ansible 1.9.1
```

とりあえずインストールは完了

**■作業場所のディレクトリを作成**

```
$ mkdir mycentos
```


- boxの追加

今回はcentos6.5にしています
[http://www.vagrantbox.es/](http://www.vagrantbox.es/)

```
$ cd mycentos
$ vagrant box add centos65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
```

成功すればboxが追加したのが分かります

```
$ vagrant box list
centos65        (virtualbox, 0)
```

- vagrantfileの作成

```
$ vagrant init centos65

``` 

- vagrantfileを編集

```
$ vim vagrantfile 
 
#ホストOSからゲストOSに接続させる為のIPを設定
config.vm.network "private_network", ip: "192.168.33.99"
```

今回はvagrant upした時にansibleを走らせますので
vagrantfileにansibleの設定も書いてあげます

```
config.vm.provision "ansible" do |ansible|
   ansible.playbook = "playbook.yml"
   ansible.inventory_path = "hosts"　#デフォルトは/etc/ansible/hostsを見に行く
   ansible.limit = 'all'
end
```

ansible.playbookにplaybookのパスを設定
ansible.inventory_pathにinventryfileのパスを設定

vagrantの仕様でvagrant upした時、初回のみprovisionが走るようです
もし再度走らせたい場合は

```
$ vagrant provision
```

■Ansibleの設定

- inventryfile

今回は作業ディレクトリにhostsファイルを作成して、これを参照するようにします

```
[web]
192.168.33.99 ansible_ssh_private_key_file=.vagrant/machines/default/virtualbox/private_key ansible_ssh_user=vagrant
 
# ゲストOSのIPを指定させる
# sshのprivate_key設定
```

ssh private_keyを指定してやらないとansible実行時にエラーが出ます
参考サイト
[http://mawatari.jp/archives/solution-of-vagrant-ssh-connection-error
](http://mawatari.jp/archives/solution-of-vagrant-ssh-connection-error)

- playbook

ここにインストールしたいミドルウェアや各種設定などを書いてやる

```
---
 - hosts: web
   sudo: yes
   tasks:
    - yum: name=vim state=latest
    - name: install apache
      yum: name=httpd state=present
    - name: start apache and enabled
      service: name=httpd state=started enabled=yes
    - name: set epel repository
      shell: rpm -Uvh --force http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    - name: set remi repository
      command: sudo rpm -Uvh --force http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
    - name: install php packages
      yum: name={{item}} enablerepo=remi,epel state=present
      with_items:
       - php
       - php-pear
       - php-devel
       - php-mbstring
       - php-pdo
       - php-mysql
       - php-gd
       - php-xdebug
      notify:
       - restart apache
    - name: install mysql
      yum: name={{ item }} enablerepo=remi,epel state=installed
      with_items:
       - mysql-server
       - MySQL-python
      notify:
        - start mysql
   handlers:
    - name: restart apache
      service: name=httpd state=restarted enabled=yes #enabled=yes 自動起動
    - name: start mysql
      service: name=mysqld state=started enabled=yes
    #- name: mysql set password
    #  command: mysqladmin -u root password "{{ mysql_root_pw }}"
```

ちなみにplaybookではmysqlのユーザ作成やバーチャルホストの設定などもできます

playbookの設定が終わりましたらvagrant upします

```
$ vagrant up
 
Bringing machine 'default' up with 'virtualbox' provider...
==&gt; default: Importing base box 'chef/centos-6.5'...
.....以下略
 
↓↓↓↓↓↓↓ここからplaybookの実行↓↓↓↓↓↓↓
 
PLAY [web] ********************************************************************
 
GATHERING FACTS ***************************************************************
ok: [192.168.33.99]
 
TASK: [yum name=vim state=latest] *********************************************
changed: [192.168.33.99]
 
TASK: [install apache] ********************************************************
changed: [192.168.33.99]
 
TASK: [start apache and enabled] **********************************************
changed: [192.168.33.99]
 
TASK: [set epel repository] ***************************************************
changed: [192.168.33.99]
 
TASK: [set remi repository] ***************************************************
changed: [192.168.33.99]
 
TASK: [install php packages] **************************************************
changed: [192.168.33.99] =&gt; (item=php,php-pear,php-devel,php-mbstring,php-pdo,php-mysql,php-gd,php-xdebug)
 
TASK: [install mysql] *********************************************************
changed: [192.168.33.99] =&gt; (item=mysql-server,MySQL-python)
 
NOTIFIED: [restart apache] ****************************************************
changed: [192.168.33.99]
 
NOTIFIED: [start mysql] *******************************************************
changed: [192.168.33.99]
 
PLAY RECAP ********************************************************************
192.168.33.99              : ok=10   changed=9    unreachable=0    failed=0
```

```
$ php --version
PHP 5.5.26 (cli) (built: Jun 10 2015 15:29:20)
...以下略
```
問題なくPHPがインストールされています

```
$ mysqld --version
mysqld  Ver 5.6.24 for Linux on x86_64 (MySQL Community Server (GPL))
```
Mysqlも無事インストール

こんな感じでplaybookに設定してやればあとはAnsibleさんがやってくれます

参考にして頂けましたら幸いです