エロサイトの作り方

2013年11月から勉強しながらエロサイトを作っています。

Ansibleで環境構築(3) - ベストプラクティス構成にする

AnsibleにはBest PracticesなDirectory Layoutがあるらしく、その構成を作ってみます。

とりあえず空のファイルとディレクトリを作る

$ touch ansible.cfg
$ touch production stage

$ touch site.xml
$ touch common.yml blog.yml

$ mkdir group_vars
$ mkdir host_vars

$ mkdir -p roles/common roles/blog

$ cd roles/common
$ mkdir defaults files handlers meta tasks vars
$ touch tasks/main.yml

$ cd ../blog
$ mkdir defaults files handlers meta tasks vars
$ touch tasks/main.yml

$ cd ../../
$ tree
.
├── ansible.cfg
├── blog.yml
├── common.yml
├── group_vars
├── host_vars
├── production
├── roles
│   ├── blog
│   │   ├── defaults
│   │   ├── files
│   │   ├── handlers
│   │   ├── meta
│   │   ├── tasks
│   │   │   └── main.yml
│   │   └── vars
│   └── common
│       ├── defaults
│       ├── files
│       ├── handlers
│       ├── meta
│       ├── tasks
│       │   └── main.yml
│       └── vars
├── site.xml
└── stage

ファイル大杉...

全体設定

./ansible.cfg

[defaults]
hostfile = stage

ansible-playbookでInventory Fileを毎回指定するのが面倒なので、検証用環境であるstageが選ばれるようにします。

また、本番環境の時だけ-i productionを明示的に指定することになるので、操作ミスも減るかと思います。

検証環境の設定

./stage

[blog]
192.168.33.10 ansible_ssh_user=vagrant

検証環境はVagrantなので、それ用の接続情報にします。

本番環境の設定

./production

[blog]
vps ansible_ssh_user=admin

本番環境はGMO VPSなので、それ用の接続情報にします。

なお、vps.ssh/configに名前で登録してあります。

Playbookの設定

./site.yml

---
- include: common.yml
- include: blog.yml

エントリーポイントになるPlaybook。

common.ymlblog.ymlを読み込むだけ。

./common.yml

---
- hosts: all
  sudo: yes
  gather_facts: no
  roles: 
    - common

common.ymlには全てのサーバー(hosts)を対象にするタスクをcommonというロールにまとめておきます。

roles: - commonとすることで、./roles/common/tasks/main.ymlincludeしてくれます。

ちなみに、gather_factsはサーバーの環境情報を取得するものですが、重いので使うまではoffにします。

./blog.yml

---
- hosts: blog
  sudo: yes
  gather_facts: no
  roles: 
    - blog

common.ymlとほぼ一緒で、こちらは./roles/blog/tasks/main.ymlincludeします。

commonロールのタスク設定

./roles/common/tasks/main.yml

---
- apt: pkg=git update_cache=yes state=latest

とりあえず、前回作ったgitをインストールするモジュールを指定してみます。

blogロールのタスク設定

./roles/blog/tasks/main.yml

---
- debug: msg="TODO blog task"

あとで書くということでTODOにしておく。

実行してみる

$ ansible-playbook site.yml

PLAY [all] ********************************************************************

TASK: [common | apt pkg=git update_cache=yes state=latest] ********************
changed: [vagrant]

PLAY [blog] *******************************************************************

TASK: [blog | debug msg=TODO blog install] ************************************
ok: [vagrant] => {
    "item": "",
    "msg": "TODO blog task"
}

PLAY RECAP ********************************************************************
vagrant                    : ok=2    changed=1    unreachable=0    failed=0

できました。

次回からは、中身をごりごり埋めていきます(予定)