Vagrant + CentOS + Nginx + MySQL + WordPress


題名のとおりです。
ansibleのplaybookを作る前に、どんな手順だっけと思ってまとめました。

## ゴール

Vagrant で CentOSを作って、Nginx + MySQL環境にWordPressを構築する

下記構成でwordpressを動作させる

|対象|ソフトウェア|
|:--|--:|
|OS|CentOS|
|Webサーバー|nginx|
|Database|MySQL|
|Other | PHP|

## やらないこと

- セキュリティ関連の設定

本来必要なことですが、セキュリティの設定を除き手順の明瞭性を上げたいと思います。

## 環境・前提条件

- vagrant
- virtualbox

## 手順

### 仮想環境の用意

```
$mkdir vagrant_wordpress
$cd vagrant_wordpress
$vagrant init boxname
$vi Vagrantfile << vagrantファイルを編集する（privateネットを利用可能にする）
$vagrant up
```

メモ

sshがつながらないので下記をしておくこと
```
vagrant ssh
chmod 600 .ssh/authorized_keys
```

### webサーバー

#### リポジトリの追加

リポジトリ追加しておきます

```
sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

```

#### インストール

```
$ sudo yum install -y nginx
$sudo service nginx start
$sudo chkconfig nginx on
```

インストールして、Nginxを起動します。
合わせてサーバー再起動時にNginxが起動するようにchkconfigで設定をします。

#### 簡単な動作テスト

Vagrantfileに記述されているIPアドレスにアクセスしてみる。
ホストOS側のブラウザで、nginxのトップページが出ればOK。

#### 書き換える

wordpressを、/var/www/wp/wordpressに配置する予定です。

```console
$sudo vi /etc/nginx/conf.d/default.conf
```


```/etc/nginx/conf.d/default.conf
# ...
location / {
        root   /var/www/html/wp/wordpress; # DocumentRootを変更
        index  index.html index.htm index.php;
    }
# ...              
```

書き換えたら再起動

### iptables

```
$sudo service iptables stop
$sudo chkconfig iptables off
```

ifconfigで調べたipにローカルからアクセスする。

### mysql

#### インストール

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

メモ

- mysqlはmysqlのクライアント
- mysql-serverはmysqlのデーモン。サービス名はmysqld

#### mysqlの起動

* OSに自動起動するよういにしておく。

```
sudo service mysqld start
sudo chkconfig mysqld on
```

#### 初期設定

下記をします。

1. mysqlにログインするユーザのパスワード設定
1. wp用のDBを作成

```mysql
mysql -u root

@mysql
update mysql.user set password=password('new_password_for_root') where user = 'root';
flush privileges;
exit

```

flush privileges;で設定変更を反映させています。
もし、うまく行かなければmysqlクライアントを終了したあとで、mysqldを再起動させればOKです。

```
sudo service mysqld restart
```

再度mysqlを実行して、passwordを聞かれればOKです。

```
$mysql -u root -p
Enter password:
```

#### wordpress用のDBを作成する

```mysql

mysql -u root -p 
Enter password: '先程設定したパスワード'

mysql> create database wordpress; 
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on wp.* to wp@localhost identified by 'wordpress_user_password';
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye
```

### PHP

環境やPHPのversonによって必要なパッケージが異なるようですが、下記を入れます。

```
sudo yum -y install php php-mysql php-fpm
```

PHPはほとんど使ったことがないのですが、ライブラリがたくさんあるのですね…

|パッケージ|解説|
|--:|:--|
| php-mysql    |PHPからMySQLに接続するためのライブラリ|             
| php          |php本体
| php-fpm      |FastCGI Process Manager。PHPのFastCGI実装|
| php-mbstring |PHPの日本語環境の設定

#### 確認

versionが確認できればOK

```
$php --version
PHP 5.3.3 (cli) (built: Aug 11 2016 20:33:53)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
```

#### 設定変更

したほうが良い気がするけど、とりあえずまずはしない。

### php-fpm設定

いるかいらんかよくわからんが…

```console
$sudo vi /etc/php-fpm.d/www.conf
```

```www.conf
user = apache # apache を nginx　へ変更
group = apache # apache を nginx　へ変更
```

設定を変更したら起動します。

```
$ sudo service php-fpm start
Starting php-fpm: [  OK  ]
```

ついでに起動時に実行されるようにしておく。

```
$sudo chkconfig php-fpm on
```

### wordpress

#### 取得

```
$cd /var/www/html
$sudo mkdir wp
$cd wp
$sudo wget https://ja.wordpress.org/wordpress-4.6-ja.tar.gz 
```

#### 解凍

```
$sudo tar xvzf  wordpress-4.6-ja.tar.gz
```

* /var/www/html/wp/wordpress となっていればOK

### 各種設定

### word権限の変更

```
$cd /var/www/html
$chown -R nginx:nginx wp/wordpress
```

#### nginxとphp-fpmの連携

```
$sudo touch /etc/nginx/conf.d/wordpress.conf
```

```
$sudo vi /etc/nginx/conf.d/wordpress.conf
```

```/etc/nginx/conf.d/wordpress.conf
server {
        listen 80;
        server_name 195.168.59.16;
        index index.php ;
        root /var/www/html/wp/wordpress ;
        location ~* /wp-config.php {
             deny all;
        }
        location ~ \.php$ {
             root           /var/www/html/wp/wordpress ;
             fastcgi_pass   127.0.0.1:9000;
             fastcgi_index  index.php;
             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
             include        fastcgi_params;
        }
    }

```

``/etc/nginx/nginx.conf``に``include /etc/nginx/conf.d/*.conf;``の設定がされているので作成したwordpressの設定は自動的に読み込まれます。

### 動作確認

## まとめ

セキュリティの設定はしていませんが、とりあえずwordpressの構築ができました。
上記も慣れてくれば5分〜10分程度でも完了できるようになりますが、こういった手順はレシピにまとめたいですね。
というわけで、今後は上記をansibleのplaybookにまとめて見たいと思います。