Ansible でインストール (phpMyAdmin)

今までの投稿で Ansible を使って以下を導入してきました。

* [Ansible でインストール (Apache 2.2)](http://qiita.com/KisaragiZin/items/7ef56668fab8e7943658)
* [Ansible でインストール (php 5.6)]()
* [Ansible でインストール (MySQL 5.6)](http://qiita.com/KisaragiZin/items/e241f189c83580f92e9c)

今回はこれらを組み合わせて phpMyAdmin をインストールします。
phpMyAdmin は MySQL を Web ブラウザから管理することが出来るツールになります。
Web ブラウザからアクセス出来る為、CUI 操作が不慣れな方でも DB の閲覧・管理が容易となります。
※開発環境ということで簡易な設定にしております。利用する際はセキュリティを考慮した設定を必ず行ってください。

## 環境

* CentOS 6.7
* ansible 2.0

※開発環境利用の為、iptables / SELinux については事前に無効化しております。
※yum で "Developer tools" グループを インストールし、必要なコマンドは適宜導入しています。

## Playbook の記述

Playbook は Role 構造で記述します。
Role 作成方法については [こちら](http://qiita.com/KisaragiZin/items/02465058e3b930cc094e) を参照してください。

構成は以下の通りです。

```bash:
.
├── group_vars                         # 各タスクで使用する変数定義
│   ├── dbservers
│   └── webservers
├── hosts
├── roles
│   ├── db
│   │   ├── tasks
│   │   │   ├── main.yml
│   │   │   └── install_mysqld_5_6.yml # MySQL インストール
│   │   └── templates
│   │       └── .my.cnf.j2             # MySQL 接続用設定テンプレートファイル
│   └── web
│       ├── handlers
│       │   └── main.yml               # httpd handler の定義
│       └── tasks
│           ├── main.yml
│           ├── install_apr.yml        # apr-devel インストール
│           ├── install_apr_util.yml   # apr-util-devel インストール
│           ├── install_distcache.yml  # distcache インストール
│           ├── install_httpd_2_2.yml  # httpd インストール
│           ├── install_php_5_6.yml    # php インストール
│           └── install_phpMyAdmin.yml # phpMyAdmin インストール
└── site.yml                           # インストール対象を設定
```

以下のファイルについては 上記で紹介した投稿内容を参照してください。

* group_vars/dbservers
* group_vars/webservers
* db/tasks/main.yml
* db/tasks/install_mysqld_5_6.yml
* db/templates/.my.cnf.j2
* web/handlers/main.yml
* web/tasks/install_apr.yml
* web/tasks/install_apr_util.yml
* web/tasks/install_apr_distcache.yml
* web/tasks/install_httpd_2_2.yml
* web/tasks/install_php_5_6.yml

**hosts**

インストール対象ホストの設定です。
今回は Web も DB もlocalhost (実行サーバ自身) にインストールします。

```ini:hosts
[webservers]
localhost

[dbservers]
localhost
```

**site.yml**

メイン Playbook です。
web / db の役割を持ったサーバにそれぞれのロール手順を実施するよう記述します。
site.yml は慣例として全てのロールを実施するように記述されます。
その為、各サーバグループと対応したロールについて記述した yaml ファイルを include するだけとなります。


```bash:
site.yml        # webservers.yml / dbservers.yml を include
webservers.yml  # webservers と web role の関連を記述
dbservers.yml   # dbservers  と db  role の関連を記述
```


今回はファイルを分けずにまとめて site.yml に記述しています。

```yaml:site.yml
---

- name: install and configure the web
  hosts: webservers
  remote_user: root

  roles:
    - web

- name: install and configure the db
  hosts: dbservers
  remote_user: root

  roles:
    - db
```

**group_vars/webservers**

webservers で利用する phpMyAdmin の設定を追記しています。
webservers の内容については上記の Apache/php の記事を参照してください。

```yaml:group_vars/webservers
# webservers Variables

・・・
中略
・・・

phpMyAdmin:
  # ダウンロードURL
  url: https://files.phpmyadmin.net/phpMyAdmin/4.5.5.1/phpMyAdmin-4.5.5.1-all-languages.tar.gz
  # phpMyAdmin パッケージファイル名
  package_filename: phpMyAdmin-4.5.5.1-all-languages
  # 作業ディレクトリ
  work_dir: /usr/local/src
  # 配置ディレクトリ
  deploy_dir: /var/www/html
  # phpMyAdmin ホームディレクトリ
  home_dir: /var/www/html/phpMyAdmin
  # phpMyAdmin 設定ファイル変更箇所
  config_changes:
    - regexp: "^(.*blowfish_secret.*) = .*"
      line: "\\1 = 'passphrase';"
```

※blowfish_secret の設定は適宜パスフレーズを変更してください。

**web/tasks/main.yml**

main.yml では各タスクの読み込みを行っています。

```yaml:tasks/main.yml
---
- include: install_apr.yml
- include: install_apr_util.yml
- include: install_distcache.yml
- include: install_httpd_2_2.yml
- include: install_php_5_6.yml
- include: install_phpMyAdmin.yml
```

**install_phpMyAdmin.yml**

phpMyAdmin のインストール Playbook です。
phpMyAdmin のパッケージファイルをダウンロード、解凍、配置をして、設定ファイルの編集を行っています。

```yaml:install_php_5_6.yml
---
# install phpMyAdmin

- name: phpMyAdmin をダウンロード
  get_url:
    url: "{{ phpMyAdmin.url }}"
    dest: "{{ phpMyAdmin.work_dir }}"
    validate_certs: no

- name: ダウンロードした phpMyAdmin ファイルを解凍
  unarchive:
    src: "{{ phpMyAdmin.work_dir }}/{{ phpMyAdmin.package_filename }}.tar.gz"
    dest: "{{ phpMyAdmin.deploy_dir}}"
    owner: root
    group: root
    copy: no
    creates: "{{ phpMyAdmin.home_dir }}"

- name: phpMyAdmin ディレクトリの配置
  shell: "mv {{ phpMyAdmin.deploy_dir }}/{{ phpMyAdmin.package_filename}} {{ phpMyAdmin.home_dir }}"
  args:
    creates: "{{ phpMyAdmin.home_dir }}"

- name: phpMyAdmin の設定ファイルを配置
  shell: "cp -p {{ phpMyAdmin.home_dir }}/config{.sample,}.inc.php"
  args:
    creates: "{{ phpMyAdmin.home_dir }}/config.inc.php"

- name: phpMyAdmin 設定ファイル編集
  lineinfile:
    dest: "{{ phpMyAdmin.home_dir }}/config.inc.php"
    backrefs: yes
    regexp: "{{ item.regexp }}"
    line: "{{ item.line }}"
  with_items: "{{ phpMyAdmin.config_changes }}"
  notify: restart httpd
```

以上、タスクの記述となります。

## Playbook の実行

作成した Playbook を実行しましょう。

```bash:
$ ansible-playbook -i hosts webservers.yml
・・・
PLAY RECAP *********************************************************************
localhost                  : ok=55   changed=45   unreachable=0    failed=0
# 確認の為、再実行
$ ansible-playbook -i hosts webservers.yml
・・・
PLAY RECAP *********************************************************************
localhost                  : ok=50   changed=1    unreachable=0    failed=0
```

正常に実行されたでしょうか。

以下にアクセスして動作確認を行いましょう。
`http://対象サーバIPアドレス またはホスト名/phpMyAdmin/`

![phpmyadmin.jpg](https://qiita-image-store.s3.amazonaws.com/0/49473/4f132c98-7de6-d291-08fe-71ca6340a0a3.jpeg)



今回は複数のロールを利用しました。
役割ごとに複数のサーバを構築する際には必須となります。
ロールやサーバの定義やディレクトリ構造については熟考が必要となります。