Ansibleで WEB・DBサーバをこさえてみる


## 最初に成果物

https://bitbucket.org/ponsuke/ansible-sample

```
ansible-sample
├── hosts
├── playbooks
│   ├── include
│   │   ├── apache-install-playbook.yml
│   │   ├── common-playbook.yml
│   │   ├── nginx-install-playbook.yml
│   │   ├── php-install-playbook.yml
│   │   ├── postfix-install-playbook.yml
│   │   └── wordpress-install-playbook.yml
│   ├── webserver-playbook.yml
│   └── dbserver-playbook.yml
│
└── templates
    └── apache-vhosts.conf.j2
```

### WEBサーバをインストールする場合

```bash
ansible-playbook -vvv -u work_user -i hosts --private-key='~/.ssh/id_rsa_vagrant' ./webserver-playbook.yml
```

### DBサーバをインストールする場合
```bash
ansible-playbook -vvv -u work_user -i hosts --private-key='~/.ssh/id_rsa_vagrant' ./dbserver-playbook.yml
```

## テスト環境の構築

環境は、WEBサーバとDBサーバの2つを用意する。

- WEBサーバ(IP:192.168.33.100)
- DBサーバ (IP:192.168.33.101)

作業を行うユーザについて

- work_user で sudo で作業する。

以下を参考に環境の構築を行う。

* Vagrantメモ (http://qiita.com/ponsuke/items/c5a7bc045acff17f6daf)
* SSH 秘密鍵・公開鍵の作り方 (http://qiita.com/ponsuke/items/a89d973cb8a42cfec79c)
* sudoをパスワード入力なしで使用する方法  (http://qiita.com/ponsuke/items/9460e3e8140cf6af5932)
* ansibleをローカル環境にインストールする。(pip install ansible)

# 以下、自動化した作業

## ミドルウェア・パッケージのインストール

### WEBサーバ・DBサーバ共通

ansible-sample/playbooks/include/common-playbook.yml

- yumパッケージのアップデートを行う

```bash
$ sudo yum -y update
```

- pcre のインストール

```bash
$ sudo yum -y install pcre
```

- pcre-devel のインストール

```bash
$ sudo yum -y install pcre-devel
```

- iptables のインストール

```bash
$ sudo yum -y install iptables
```

- openssl のインストール

```bash
$ sudo yum -y install openssl
```

- openssl-devel のインストール

```bash
$ sudo yum -y install openssl-devel
```

- emacs のインストール

```bash
$ sudo yum -y install emacs
```

- wget のインストール

```bash
$ sudo yum -y install wget
```

- gitをインストールする

```bash
$ sudo  yum install git
```

- MySQLサーバをインストールする

```bash
$ sudo yum -y install mysql mysql-devel
```

- python2.7 をインストールする

```bash
$ cd /usr/local/src
$ sudo wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tar.xz
$ sudo tar -xvf Python-2.7.8.tar.xz
$ cd Python-2.7.8
$ sudo ./configure
$ sudo make
$ sudo make install
```

- easy_install をインストールする

```bash
$ sudo wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo /usr/local/bin/python2.7
```

- pip をインストールする

```bash
$ sudo /usr/local/bin/easy_install pip
```

- virtualenvをインストールする

```bash
sudo /usr/local/bin/pip install virtualenv
```

- 内部エンコードの設定


### DBサーバ(IP:192.168.33.101)

- MySQL Port:3306を開ける

```bash
$ sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --sport 3306 -j ACCEPT
$ sudo /etc/init.d/iptables restart
```

- MySQLサーバをインストールする

```bash
$ sudo yum -y install mysql-server
```

- MySQLサーバ起動

```bash
$ sudo /etc/init.d/mysqld start
```

- mysqlの root ユーザのパスワードを設定する。

```bash
/usr/bin/mysqladmin -u root password 'new-password'
```

- /etc/my.conf の編集

- mysqlの 運用ユーザ、パスワード、権限(ひとまず全権限を付ける)を設定する

```mysql
CREATE USER 'work_mysql_user' IDENTIFIED BY 'new_password';
GRANT ALL ON *.* TO work_mysql_user;
```

### WEBサーバ(IP:192.168.33.100)

- apache をインストールする 場合

#### ansible-sample/playbooks/include/apache-install-playbook.yml

```bash
$ sudo yum install httpd httpd-devel
```

- VirtualHostの設定

ファイルに設定を含めているが、これはfabric側(デプロイ)ですべきなのかなぁ。。。

- apache 起動

```bash
$ sudo /etc/init.d/httpd restart
```

- nginx をインストールする

#### ansible-sample/playbooks/include/nginx-install-playbook.yml

```bash
$ sudo wget https://www.openssl.org/source/openssl-1.0.2.tar.gz
$ sudo tar -xvf openssl-1.0.2.tar.gz
$ sudo wget http://zlib.net/zlib-1.2.8.tar.gz
$ sudo tar -xvf zlib-1.2.8.tar.gz
$ cd /usr/local/src
$ sudo wget http://nginx.org/download/nginx-1.7.9.tar.gz
$ sudo tar -xvf nginx-1.7.9.tar.gz
$ cd nginx-1.7.9
$ sudo ./configure \
--with-openssl=/usr/local/src/openssl-1.0.2 \
--with-zlib=/usr/local/src/zlib-1.2.8 \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_spdy_module \
--with-pcre
$ sudo make
$ sudo make install
```

- Port:80、444を開ける

```bash
$ sudo iptables -A INPUT -p tcp --dport  80 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --sport  80 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --sport 443 -j ACCEPT
$ sudo /etc/init.d/iptables restart
```

### 以下、やってない！

- supervisor のインストール

```bash
$ sudo /usr/local/bin/pip install supervisor

> Installing /usr/local/lib/python2.7/site-packages/supervisor-3.1.2-py2.7-nspkg.pth
> Installing echo_supervisord_conf script to /usr/local/bin
> Installing pidproxy script to /usr/local/bin
> Installing supervisorctl script to /usr/local/bin
> Installing supervisord script to /usr/local/bin
```

参考
http://d.hatena.ne.jp/anatoo/20120310/1331321778

- supervisor の起動

```bash
sudo /usr/local/bin/supervisord -c /etc/supervisord.conf
```