CentOS7でのwordpress導入メモ

CentOS7にwordpressを入れることがあったのでメモ

nginx + php-fpm + mysqlで、fastcgi cacheの設定もします。
mysqlのインストールは今回はスキップして、別ホストのデータベースを利用しています。

## phpインストール
php-fpmと関連モジュールのインストール

```zsh
$ sudo yum -y install php-mysql php php-gd php-mbstring php-fpm
```

## php-fpmの設定
`/etc/php-fpm.d/www.conf`を編集  
使用するポート、許可するクライント、ユーザ名、グループ名の設定
最大プロセス数を10、起動時プロセス数5、アイドル状態のプロセス数の最小値3、
アイドル状態のプロセス数の最大値8、500リクエスト受け取るとプロセス再起動
(TCP/IPではなく、Unix Socketを使ってもいいかも)

```
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
user = nginx
group = nginx
pm.max_children = 10
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 8
pm.max_requests = 500
```

## nginxユーザの追加

```zsh
$ cat /etc/passwd|grep nginx
```
でnginxユーザがあるかどうかチェック  
あればこの項目はスキップ

```zsh
$ sudo addgroup nginx
$ sudo useradd -s /usr/sbin/nologin -g nginx -d /var/www -c nginx nginx
```

## サービスの起動、自動起動設定
```zsh
$ sudo systemctl start php-fpm.service
$ sudo systemctl enable php-fpm.service
$ sudo systemctl list-unit-files |grep php-fpm
```

## データベースの設定
DBサーバーにて、`wordpress_user`というユーザを作成、`wordpress_db`というデータベースを作成
ホストの部分は自分の環境に合わせて変更してください。

```zsh
$ ssh db
$ mysql -u root -p
> CREATE USER 'wordpress_user'@'192.168.1.%' IDENTIFIED BY 'ぱすわーど';
> CREATE DATABASE wordpress_db;
> GRANT ALL ON wordpress_db.* TO wordpress_user;
> FLUSH PRIVILEGES;
> quit
$ exit
```

## nginxのインストール
Nginxリポジトリとnginxをインストールする

```zsh
$ sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
$ sudo yum -y install nginx
```

## nginxの設定
`/etc/nginx/nginx.conf`を編集
ユーザー、グループを`nginx`に、`worker_processes`を2に、アップロードサイズを10MBに
(ここも自分の環境とかに合わせて任意で)

```
user  nginx nginx;
worker_processes  2;
client_max_body_size 10M;
```

## wordpress用のnginxの設定
`/etc/nginx/conf.d/wordpress.conf`を作成
ポート、ホスト名、パス、ログ、PHPの設定
ファイルが存在しないURIの場合は、index.phpへ転送

```
server {
    listen       80;
    server_name  www.example.com;
    root         /var/www/html/wp;
    index        index.php
    access_log   /var/log/nginx/wordpress.access.log warn;
    error_log    /var/log/nginx/wordpress.error.log warn;
    try_files $uri $uri/ /index.php?q=$uri&$args;

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
        include        fastcgi_params;
    }
}
```

## nginx起動
apache停止

```zsh
$ sudo systemctl stop httpd.service
$ sudo systemctl disable httpd.service
```

nginx起動

```zsh
$ sudo systemctl start nginx.service
$ sudo systemctl enable nginx.service
$ sudo systemctl list-unit-files |grep nginx
```

## firewall設定
`--permanent`を付けないと再起動時に元に戻るので注意

```zsh
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --reload
```

## wordpressの配置
`/var/www/html/wp`にwordpressのフォルダを設置
この工程は省略

フォルダの所有者、パーミッションを変更

```zsh
$ sudo chown -R nginx: /var/www/html/wp
$ cd /var/www/html/wp
$ sudo find . -type f -exec chmod 644 {} +
$ sudo find . -type d -exec chmod 755 {} +
```

`semanage`をインストールし、SELinuxでの書き込み権限付与

```zsh
$ sudo yum -y install policycoreutils-python
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/wp(/.*)?"
$ sudo restorecon -R -v /var/www/html/wp
```


## httpd_can_network_connectを有効に
これが無効だとデータベースに接続できない

```zsh
$ sudo setsebool -P httpd_can_network_connect 1
$ getsebool httpd_can_network_connect
```

## キャッシュの設定
`/etc/nginx/nginx.conf`のhttpの中に以下を追記

```
fastcgi_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=wp-key:15m inactive=7d max_size=1000m;
```

`/etc/nginx/conf.d/wordpress.conf`の`try_files`の下辺りに追記

```
# fastcgi cacheのフラグ
set $do_not_cache 0;

# POST中の場合
if ($request_method != "GET") {
set $do_not_cache 1;
}
# WordPressにログイン中、コメント中、記事作成中
if ($http_cookie ~ ^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$) {
set $do_not_cache 1;
}
# モバイル系の場合
if ($http_x_wap_profile ~ ^[a-z0-9\"]+) {
set $do_not_cache 1;
}
# -- Mobile ?
if ($http_profile ~ ^[a-z0-9\"]+) {
set $do_not_cache 1;
}
# -- Kei-tai ?
if ($http_user_agent ~ ^.*(2.0\ MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800).*) {
set $do_not_cache 1;
}
# -- Mobile ?
if ($http_user_agent ~ ^(w3c\ |w3c-|acs-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-|dang|doco|eric|hipt|htc_|inno|ipaq|ipod|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-|lg/u|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sams|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|wap-|wapa|wapi|wapp|wapr|webc|winw|winw|xda\ |xda-).*) {
set $do_not_cache 1;
}
# -- Kei-tai ?
if ($http_user_agent ~ ^(DoCoMo/|J-PHONE/|J-EMULATOR/|Vodafone/|MOT(EMULATOR)?-|SoftBank/|[VS]emulator/|KDDI-|UP\.Browser/|emobile/|Huawei/|IAC/|Nokia|mixi-mobile-converter/)) {
set $do_not_cache 1;
}
# -- Kei-tai ?
if ($http_user_agent ~ (DDIPOCKET\;|WILLCOM\;|Opera\ Mini|Opera\ Mobi|PalmOS|Windows\ CE\;|PDA\;\ SL-|PlayStation\ Portable\;|SONY/COM|Nitro|Nintendo)) {
set $do_not_cache 1;
}
```

`/etc/nginx/conf.d/wordpress.conf`の`include fastcgi_params;`の下辺りに追記

```
fastcgi_cache wp-key;
fastcgi_cache_key    $scheme://$host$request_uri;
fastcgi_cache_valid 200 10m;
fastcgi_cache_valid 404 1m;
fastcgi_no_cache $do_not_cache;
fastcgi_cache_bypass $do_not_cache;
```

フォルダの作成、権限の変更

```zsh
$ sudo mkdir -p /var/cache/nginx/cache
$ sudo chown -R nginx:nginx /var/cache/nginx/cache
```

nginx反映

```zsh
$ sudo systemctl start nginx.service
```

## 参考
* http://server-setting.info/centos/nginx-wordpress-centos7.html
* http://blog.kubox.info/2011/07/nginxphp-fpm.html
* http://uzumakiponpu.blog.fc2.com/blog-entry-25.html
* http://runble1.com/nginx-fastcgicache-setting/
* http://ufuso.jp/wp/?p=13612