vagrantにwordpressの環境を構築する

vagrantにcentos7+nginx+PHP7+mariadbの環境でwordpressを導入する

nginxの本を買って、試してみたが
centos6の記述だったり、初心者にはどのディレクトリにあるファイルのことを言っているのかわからなかったり、真似して一通りやってみたらphpのインストール書いてねーぞってなったり大変だった。。
とりあえず、以下の画像のページがvagrantで表示できるまでの記事。

![スクリーンショット 2018-07-05 21.53.43.png](https://qiita-image-store.s3.amazonaws.com/0/262626/f51044c8-6a4d-c17a-5ee7-5a14b867a259.png)

----

購入したnginxの本は次の２冊
・[nginx実践ガイド](https://amzn.to/2KywIsD) 2017年2月16日
・[nginx実践入門](https://amzn.to/2zfi18s) 2016年1月16日

正直、この本だけで構築するのは無理そうだったが、
理解を深めるって点では、「nginx実践ガイド」は１年前くらいに出た本だから、まぁいいんじゃないでしょうか（雑）


----
##構築の仕方は次のような感じです。
（セキュリティなどの設定はまたおいおい。学習、入門などにどうぞ。）

作業用ディレクトリで以下のコマンドを実行する

    vagrant init centos/7

Vagrantfileが生成される

    vim Vagrantfile 

Vagrantfile内(config.vm.networkの行)のコメントアウトを外す

    # Create a private network, which allows host-only access to the machine
    # using a specific IP.
    # config.vm.network "private_network", ip: "192.168.33.10"
    config.vm.network "private_network", ip: "192.168.33.10"              


vagrantの起動と接続

    vagrant up
    vagrant ssh


ルートユーザに変更する

    $ sudo su -

yumのアップデート

    $ yum update

EPELリポジトリの追加

     $ yum -y install epel-release


remiリポジトリの追加

    $ rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm


　
使いそうなものをインストールしておく
vimのインストール　（ついvimって打ってしまうので入れとく）

    $ yum -y install vim

wgetのインストール （wordpressインストールとかに使う）

    $ yum -y install wget

　

nginxのインストール準備
リポジトリの追加

    $ vim /etc/yum.repos.d/nginx.repo

以下を記述して保存する

    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=http://nginx.org/keys/nginx_signing.key

    [nginx-source]
    name=nginx source
    baseurl=http://nginx.org/packages/mainline/centos/7/SRPMS/
    gpgcheck=1
    enabled=0
    gpgkey=http://nginx.org/keys/nginx_signing.key


nginxをインストールする

    $ yum -y install nginx

nginxのバージョン確認

    $ nginx -v
    nginx version: nginx/1.15.0


自動アップデートの設定

    $ yum install yum-cron

    $ vim /etc/yum/yum-cron.conf

Vagrantfile内のapply_updatesをnoからyesに修正する

    # Whether updates should be applied when they are available.  Note
    # that download_updates must also be yes for the update to be applied.
    apply_updates = yes


nginxの状態確認（起動前）

    $ systemctl status nginx
    Active: inactive (dead)

nginxの起動

    $ systemctl start nginx

nginxの状態確認（起動後）

    $ systemctl status nginx
    Active: active (running) 

サーバ再起動時にnginxが自動起動するように設定するようにする

    $ systemctl enable nginx.service

（※ centos6などは次のようなコマンド。"chkconfig nginx on"。 参考サイト探しているときに紛らわしい。。）


　
ブラウザでアクセス（vagrantfileでコメントアウトを外したip）
http://192.168.33.10/

welcome to nginx!

表示される！！



##次からは、wordpressの準備！
nginxでwebアプリケーション（phpの場合）を使用するために、php-fpmが必要なので入れる（結構ハマった。）


nginxの設定

    $ vim /etc/nginx/conf.d/default.conf

以下を編集する
（〜.confのファイルが読み込まれるらしい。本やブログごとに名前が違って紛らわしいが、だぶんそういうこと。）

    server {
        listen       80;
        server_name  localhost;
        root /var/www/html/;
        charset UTF-8;
        access_log  /var/log/nginx/sample.com.access.log  main;
        error_log /var/log/nginx/sample.com.error.log;

        location / {
            index  index.php index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        location ~ \.php$ {
            fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }



nginxの再起動

    $ systemctl restart nginx

　
phpとphp-fpmのインストール

    $ yum -y install --enablerepo=epel,remi,remi-php72  php php-mbstring php-pdo php-mysqlnd php-fpm

PHPのバージョン確認

    $ php -v
    PHP 7.2.7

php-confの設定を行う

    $ vim /etc/php-fpm.d/www.conf

それぞれの行を修正する

    修正前
    listen = 127.0.0.1:9000
    修正後
    listen = /var/run/php-fpm/php-fpm.sock

    修正前
    user = apache 
    修正後
    user = nginx 

    修正前
    group = apache
    修正後
    group = nginx

    修正前
    ;listen.owner = nobody
    ;listen.group = nobody
    修正後
    listen.owner = nginx
    listen.group = nginx




php-fpmの起動

    $ systemctl start php-fpm

php-fpmの状態確認

    $ systemctl status php-fpm

サーバ再起動時にphp-fpmが自動起動するように設定するようにする

    $ systemctl enable php-fpm

　

とりあえず、phpが使えるか確認してみる。

    $ cd /var/www/html
    $ vim index.php

みんな大好き hello world! 以下を記述して保存する。

    <?php echo 'Hello PHP7';

ブラウザでアクセス　
http://192.168.33.10/

表示された！


先ほどのindex.phpはいらないので消しとく

     $ rm index.php

　　
wordpressのインストール

    $ cd /var/www/html/

日本語版の最新のwordpressを取得する

    $ wget https://ja.wordpress.org/latest-ja.tar.gz

解凍する

     $ tar xfz latest-ja.tar.gz


以下のディレクトリが生成される
wordpress

wordpressディレクトリの所有権を変更する

    $ chown -R nginx. wordpress


アクセスすると...
http://192.168.33.10/wordpress/

リダイレクトされ、セットアップ画面が表示される！
http://192.168.33.10/wordpress/wp-admin/setup-config.php

　
URLにwordpressが含まれているとなんか嫌なので整える

wordpressをリネイム(とりあえず、sample.comにする)

    $ mv wordpress sample.com

rootの位置をsample.comにする
nginxの設定を修正する

    $ vim /etc/nginx/conf.d/default.conf

rootの行を修正する

    server {
        listen       80;
        server_name  localhost;
        root /var/www/html/sample.com;
        charset UTF-8;
        省略...

設定を変更したのでnginxの再起動

     $ systemctl restart nginx

　
http://192.168.33.10/

↑にアクセスすると↓にリダイレクトされる

http://192.168.33.10/wp-admin/setup-config.php

よしよし。


　
mysql（mariadb）をインストールする

    $ yum -y install mariadb-server

mariadbの起動

    $ systemctl start mariadb

サーバ起動時に自動で起動するように設定

    $ systemctl enable mariadb

mariadb状態確認

    $ systemctl status mariadb


　
wordpress用のデータベースを作成する

    $ mysqladmin -uroot create wordpress

    $ mysql -uroot

    MariaDB > GRANT ALL PRIVILEGES ON wordpress .* TO (ここにユーザ名)@localhost IDENTIFIED BY 'ここにパスワード';

（ユーザ作ったけど、なんやかんやハマってしまいrootユーザで進めます）


     $ chown -R nginx:nginx /var/www/html/sample.com
     $ systemctl restart nginx
     $ systemctl restart php-fpm

　
以下にアクセスして、wordpressの初期設定を行う（データベース繋ぎこみ）
http://192.168.33.10/

ユーザ: root
パスワード: 
ホスト名： localhost

何度か上記の内容で設定しようとしたが上手くいかず、
wordpressにこれコピぺしてwp-config.php設定してまたアクセスしてよって言われる。

画面をコピペして、以下に配置する

    $ vim /var/www/html/sample.com/wp-config.php

内容は、以下のファイルを参考に作成できそう。

    $ vim /var/www/html/sample.com/wp-config-sample.php

各行を以下のような内容で修正する

    define('DB_NAME', 'wordpress');
    define('DB_USER', 'root');
    define('DB_PASSWORD', '');
    define('DB_HOST', 'localhost');

これで再度アクセスして設定する
http://192.168.33.10/

wordpressの初期テーマの画面が表示される！



※ 403 Forbiddenが表示される場合
SELinuxを無効にする（本番ではないのでとりあえず無効でok）

```
$ sudo getenforce
Enforcing
$ sudo setenforce 0
$ sudo getenforce
permissive
```

デフォルトで無効にする場合

```
vim /etc/selinux/config

修正前：
SELINUX=enforcing
修正後：
SELINUX=disabled
```
　
----
　
なんとかwordpressの画面が表示されるまでできた。
mysqlあたりの設定が適当になったので、なんとかしたい。。。

とりあえず、今回はnginxでwordpressが使えるようになったので良しとしよう！

次は、varnishとwordpressを使ってみたり、ログの収集やセキュリティ、本番運用など学習したい。

良いサイトや本あったら教えてください。




　

----
参考書：
・[nginx実践ガイド](https://amzn.to/2KywIsD)
・[nginx実践入門](https://amzn.to/2zfi18s)