Wordpress のインストール

試してみたのでメモ。NginxとMySQLはインストール済みの状態です。

# 前提
次の手順を実施済みの前提とします。

https://qiita.com/silverskyvicto/items/be332504506bad8daa34

https://qiita.com/silverskyvicto/items/4eef6723af2d4ed8d5d0

# 手順
## Wordpress用データベースの作成
1. DBの管理者ユーザでMySQLにログインする

    ```bash
    # mysql -u root -p
    ```

2. データベース用ユーザを作成する

    ```sql
    mysql> CREATE USER '<データベース用ユーザ名>'@'<ホスト名>' IDENTIFIED BY '<データベース用ユーザのパスワード>';
    Query OK, 0 rows affected (0.10 sec)
    ```

3. 認証プラグインを旧バージョンに戻す (MySQL 8.0 の場合、これをやらないとデータベースに接続できない。詳細はリリースノートを参照)

    ```sql
    mysql> ALTER USER '<データベース用ユーザ名>'@'<ホスト名>' IDENTIFIED WITH mysql_native_password BY '<データベース用ユーザのパスワード>';
    Query OK, 0 rows affected (0.10 sec)
    ```

4. データベースを作成する

    ```sql
    mysql> CREATE DATABASE <データベース名>;
    Query OK, 1 row affected (0.09 sec)
    ```

5. 権限をつける

    ```sql
    mysql> GRANT ALL PRIVILEGES ON <データベース名>.* TO "<データベース用ユーザ名>"@"<ホスト名>" WITH GRANT OPTION;
    Query OK, 0 rows affected (0.05 sec)
    ```

6. Flushしておく

    ```sql
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.01 sec)
    ```

## Wordpressアプリケーションのインストール
1. Wordpress用のディレクトリを作成し移動する

    ```bash
    # mkdir -p /var/www
    # cd /var/www/
    ```

2. Wordpressのtar.gzファイルをダウンロードする

    ```bash
    # curl -LkvOf https://ja.wordpress.org/wordpress-5.0.3-ja.tar.gz
    ```

3. 破損がないか確認する

    ```bash
    # md5sum wordpress-5.0.3-ja.tar.gz
    6200b504baf8ee0814e0c3e77677a0ea  wordpress-5.0.3-ja.tar.gz
    ```

4. tar.gzファイルを展開する

    ```bash
    # tar -xzvf wordpress-5.0.3-ja.tar.gz
    ```

5. tar.gzファイルを削除する

    ```bash
    # rm wordpress-5.0.3-ja.tar.gz
    ```

## Wordpressの設定ファイルの修正
1. Wordpress用に作成したディレクトリに移動する

    ```bash
    # cd /var/www/
    ```

2. 雛形ファイルからwp-config.phpをコピーして作成する

    ```bash
    # cp wordpress/wp-config-sample.php wordpress/wp-config.php
    ```

3. wp-config.phpファイルを修正する

    ```bash
    # vi wordpress/wp-config.php
    ```
    
    ```wordpress/wp-config.php
    // ** MySQL 設定 - この情報はホスティング先から入手してください。 ** 
    //
    /** WordPress のためのデータベース名 */
    define('DB_NAME', '<作成したデータベース名>');
    
    /** MySQL データベースのユーザー名 */
    define('DB_USER', '<作成したユーザ名>');
    
    /** MySQL データベースのパスワード */
    define('DB_PASSWORD', '<作成したユーザのパスワード>');

    /** MySQL のホスト名 */
    define('DB_HOST', 'localhost:/var/lib/mysql/mysql.sock');
    ```

## Nginxの設定変更
1. 設定ファイルを編集する

    ```bash
    # vi /etc/nginx/nginx.conf
    ```

    ```nginx:/etc/nginx/nginx.conf
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
        server_tokens off;　←追加
    
        ...<中略>...
    
        include /etc/nginx/conf.d/wordpress.conf;　←編集
    }
    ```

    ```bash
    # vi /etc/nginx/conf.d/wordpress.conf
    ```
    
    ```nginx:/etc/nginx/conf.d/wordpress.conf
    server {
        listen       80;
        server_name  <ドメイン>;
        root   <wordpressの展開したディレクトリへのフルパス>;
        index index.php;
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
    
        location = /favicon.ico {
            log_not_found off;
            access_log off;
        }
    
        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }
    
        location ~ /\. {
            deny all;
            access_log off;
            log_not_found off;
        }
    
        location / {
            try_files $uri $uri/ /index.php?$args;
        }
    
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
        
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~* \.php$ {
            try_files $uri =404;
            fastcgi_index  index.php;
            fastcgi_pass   127.0.0.1:9000;
            include        fastcgi_params;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  SCRIPT_NAME      $fastcgi_script_name;
            fastcgi_hide_header X-Powered-By;
        }
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    ```
2. 構文に間違いがないかを確認する

    ```bash
    # nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    ```

3. Nginxを再起動する

    ```bash
    # systemctl restart nginx
    ```
## Wordpressの設定
1. `http://<ドメイン>/wp-admin/install.php`にアクセスする

# 参考
- [要件 | WordPress.org 日本語](https://ja.wordpress.org/about/requirements/)
- [WordPress のインストール | WordPress.org 日本語](https://ja.wordpress.org/support/article/how-to-install-wordpress/)
- [Nginx | WordPress.org 日本語](https://ja.wordpress.org/support/article/nginx/)
- [wp-config.php の編集 | WordPress.org 日本語](https://ja.wordpress.org/support/article/editing-wp-config-php/)
- [ファイルパーミッションの変更 | WordPress.org 日本語](https://ja.wordpress.org/support/article/changing-file-permissions/)
- [WordPress の安全性を高める | WordPress.org 日本語](https://ja.wordpress.org/support/article/hardening-wordpress/)
- [PHP FastCGI Example | Nginx 公式サイト](https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/)
- [Setting Up FastCGI Proxying | Nginx 公式サイト](http://nginx.org/en/docs/beginners_guide.html#fastcgi)
- [6.3.2 Adding User Accounts | MySQL 公式ドキュメント](https://dev.mysql.com/doc/refman/8.0/en/adding-users.html)
- [Security Notes | MySQL 8.0.3 リリースノート](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-3.html)
- [Bugs Fixed | MySQL 8.0.11 リリースノート](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html#mysqld-8-0-11-xplugin)