とりあえず動かすとこまでの「Ansible入門」:nginx, php-fpm, mysql編

Chefよりも手軽に使えるということでAnsibleを試してみました。

今回は、nginx、php-fpm、mysqlを入れて、さらにmysqlでデータベースとユーザーを作成するところまでをやってみます。とりあえずの使用感を知りたかったので、Ansibleの環境はlocalhostです。

Ansibleを使うには

CentOS6でAnsibleを使うには、yumでansibleをインストールするだけでOKです。インストールしたらサーバー構築の手順書であるPlaybookを書いて、実行すればOKです。

簡単な流れは以下の通り。

・Ansibleをyumでインストール ・Playbookでサーバー構築の設定を書く ・Playbookを実行

1. Ansibleのインストー

$ yum clean all
$ yum -y update
$ yum -y install ansible
$ cd /etc/ansible/

構成は以下のようになってます。

$ ls 
    ansible.cfg  hosts  roles

ansible.cfgはansibleの設定ファイル。hostsはansibleの対象となるサーバーや、グループなどを設定できます。

今回はlocalhostのみが対象でさくっとお試しなので、特に設定することはありません。

2. Playbookを作成

rolesディレクトリや好きなディレクトリに移動してplaybookを作ります。

使えるコマンド(モジュール)は、公式のModule Indexに記載があります。

$ cd roles
- hosts: 127.0.0.1
  connection: local
  sudo: yes
  tasks:
    - name: add nginx repository
      yum: name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present

    - name: add remi repository
      yum: name=http://rpms.famillecollet.com/enterprise/remi-release-6.rpm state=present

    - name: add epel repository
      yum: name=http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm state=present

    - name: install nginx
      yum: name=nginx state=present
 
    - name: install php packages
      yum: name={{ item }} state=present enablerepo=remi
      with_items:
        - php
        - php-cli
        - php-devel
        - php-mbstring
        - php-gd
        - php-pear
        - php-xml
        - php-fpm

    - name: install mysql packages
      yum: name={{ item }} state=present enablerepo=remi
      with_items:
        - mysql.x86_64
        - mysql-server.x86_64
        - php-mysql

    - name: be sure php-fpm is running and enabled
      service: name=php-fpm state=running enabled=yes

    - name: be sure mysqld is running and enabled
      service: name=mysqld state=running enabled=yes

    - name: be sure nginx is running and enabled
      service: name=nginx state=running enabled=yes

    - name: install MySQL-python
      yum: name=MySQL-python state=present

    - name: add root user of mysqld
      mysql_user:
        name: root
        host: localhost
        password: samplepassword

    - name: create n edit ~/.my.cnf
      lineinfile:
        dest: ~/.my.cnf
        line: "[client]\nuser=root\npassword=samplepassword"
        create: yes

    - name: create new database
      mysql_db:
        name: wordpress
        state: present

    - name: add new user
      mysql_user:
        name: wordpress
        password: wordpress
        priv: "wordpress.*:ALL"
        host: localhost
        state: present

3. Ansibleを実行

Playbookの実行にはansible-playbookコマンドを使います。–syntax-checkなどをつけることで、構文チェックなどができます。

# 構文チェック
$ ansible-playbook playbook.yml --syntax-check
# タスクを確認
$ ansible-playbook playbook.yml --list-tasks
# 仮実行
$ ansible-playbook playbook.yml --check
# 実行
$ ansible-playbook playbook.yml

使ってみた感想としては、手軽に使えてYAMLで記述できるので見通しもよく扱いやすい印象。

その反面、ほかの人も指摘していますが複雑な処理は苦手そうといったイメージ。