Ubuntu 16.04LTSでサーバー構築: WordPressをインストールしてチューニングする

前回はUbuntu環境にNginxをインストールし、PHPを動かす所まで進みました。今回はMySQLをインストールし、Wordpressを動かします。

MySQLのインストール

UbuntuのリポジトリにはOracle MySQLとMariaDBが含まれています。どちらか好きなほうをインストールしてください。

Oracle MySQL

$ sudo apt install mysql-server

MariaDB

$ sudo apt install mariadb-server

今回はMariaDBを使います。

20160511_001

(MySQLの)rootのパスワードを設定することになりますが、後に行うセキュリティの設定で設定することもできます。

インストール後に、セキュリティの設定を行います。こちらのコマンドはOracle MySQLでもMariaDBでも共通です。

$ sudo mysql_secure_installation

文字コードの設定をします。

mysqlで文字コードをutf8にセットする – Qiita

More than 1 year has passed since last update. mysqlの文字コードはチェックする場所が多いので原因を突き止めるのに毎回苦労します。 大きく二種類に分けられて、 クライアント側、サーバー側(mysqlサーバー)、及びそれらの接続の文字コード データベース/テーブル/カラムの文字コード です。 そもそも作成したDBの文字コードが意図しない設定になっていたら、デフォルトの設定が間違っている可能性が高いので、再度同じ問題を起こさないためにも、設定見直し→DBをdrop→DBをcreateという順番で直しに行きます。 1も2もデフォルトの設定は下記を実行すればok。 character_set_client : クライアント側で発行したsql文はこの文字コードになる character_set_connection : クライアントから受け取った文字をこの文字コードへ変換する character_set_database : 現在参照しているDBの文字コード character_set_results : クライアントへ送信する検索結果はこの文字コードになる character_set_server : DB作成時のデフォルトの文字コード character_set_system : システムの使用する文字セットで常にutf8が使用されている 基本的にはこれを全部(character_set_filesystem, character_sets_dir以外)utf-8にすればok。 変更するには設定ファイルに書き込む。 再起動。 /etc/init.d/mysqld restart 再度データベースを作りなおしたらきちんと文字コードが設定されているか確認します。 use 文をつかってDBを指定し、クライアント、接続部分、データベースの文字コードが正しく設定されているか確認します。 作成されたテーブルの文字コードを確認します。

Nginxの設定

Nginx

WordPressサイトは、LAMP(Linux + Apache + MySQL + PHP) で動かすことが多いですが、多くの人たちがApacheに代えてnginxを使い始めています。このページは、nginxを使ってWordPressを動かしたい人たちに役立つことを目的としています。 nginxを検討する前に、PHP APCや、WordPressのキャッシュプラグインが、単純にApacheをnginxに変更するよりも大きなパフォーマンス向上をもたらしてくれるかもしれないことに留意しましょう。APCやキャッシュプラグインを使っていないのであれば、nginx will do squat for your WordPress-based website’s performance。また、WordPressはApacheを前提に作られているのでnginxを想定したサポートは充実しつつあるものの限定的です。これらを考慮に入れた上で導入を決定しましょう。 この記事は、nginxのインストールや設定については触れません。既にインストールされていて、nginxの使い方に理解があることを前提としています。 注: テストし動作すると知り得たのは以下の環境による: Arch Linux 64 bit (nginx 0.8.54) Mac OSX Server Leopard , OSX Server Snow Leopard ,MacPorts経由 (nginx 0.8.54, php-fpm support requires modifying the PHP 5.3 ‘Portfile’) Ubuntu Server 10.04 LTS (nginx 0.8.54 with php-fpm) nginx で WordPress を動かすためには、バックエンド php-cgi を設定する必要があります。使用可能なオプションは FastCGI または PHP-FPM (FastCGI Process Manager) です。この記事で私は PHP-FPM を使っています。PHP-FPM は PHP 5.3 に含まれているので、インストールが簡単だからです。 nginx の構成ファイルは 5 つに分割されており、各オプションを容易に理解するためにコメントされています。また、(英語原文の)著者 は、nginx のベストプラクティスをフォローしようとするベストエフォート型を作りました。 /etc/nginx/nginx.conf (または Arch Linux の /etc/nginx/conf/nginx.conf) に相当します。 # Generic startup file.

こちらを参考にNginxの設定を行います。設定後はNginxを再起動します。

$ sudo systemctl restart nginx

データベースとユーザーの準備

$ mysql -u root -p

MySQLをインストールした際に設定したrootパスワードでログインします。

データベースを作ります。
> create database wordpress;

ユーザーを作ります。
> create user wordpress identified by 'PASSWORD';

作ったユーザーに、wordpressデータベースを操作する権限を与えます。
> grant all on wordpress.* to wordpress;

MySQLから抜けます。
> exit

WordPressをダウンロード、展開する

$ cd /var

一時的にwwwフォルダの所有権をwww-data(nginxのユーザー)にします。
$ sudo chown www-data www
$ cd www

Wordpressをダウンロードします。
$ sudo wget https://ja.wordpress.org/latest-ja.tar.gz

Wordpressを展開します。
$ sudo -u www-data tar xzvf latest-ja.tar.gz

wwwフォルダの所有権をrootに戻します。
$ cd ..
$ sudo chown root www

PHPで必要な拡張をインストールする

20160512_001

おや、何かが足りないようです。

$ sudo apt install php-mysql php-gd php-mbstring php-xmlrpc php-zip
$ sudo systemctl restart php7.0-fpm

20160512_002

WordPressのインストールが完了しました!

WordPressをチューニングする

とにかく速いWordPress

とにかく速いWordPressの連載記事一覧です。

この連載を参考に、Wordpressをチューニングしてみます。まずインストール直後の時点の応答速度を見てみましょう。

十分に高速です。連載で取り上げられている高速化の手法のうち、PHP7とnginxはすでに採用していますので、一部細かいチューニングを施してみます。

MariaDBの最適化

$ sudo nano -w /etc/mysql/my.cnf

以下の設定を確認します。
innodb_butter_pool_size = 512M
query_cache_size = 64M

Ubuntu向けのMariaDBパッケージの初期設定で、(若干メモリ多めの環境向けですが)最適化が施されているようです。

OPCacheの導入

$ sudo nano -w /etc/php/7.0/fpm/php.ini

以下のコメントアウトを外し、数値を変更します。
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files = 4000

PHPを再起動します。
$ sudo systemctl php7.0-fpm

PHP7では標準で組み込まれています。お手軽ですね。

翻訳アクセラレータの導入

WordPressの管理画面からプラグイン「001 Prime Strategy Translate Accelerator」をインストールします。

ss20160512-010508

今回は翻訳のキャッシュではなく、翻訳を停止させることでパフォーマンスアップを図ります。サイト内の一部の記述が英語になりますが管理画面などは日本語のままなので大丈夫。

ss20160512-010832

Nginxのプロキシーキャッシュを使う(模索中)

追記: 現在はリバースプロキシキャッシュを使用していません。WordPressであればFastCGIキャッシュの使用をおすすめします。

WordPressをNginxのProxy cacheを使用して高速化&負荷軽減する方法

WordPressの高速化と負荷軽減のためにNginxの「Proxy cache」を利用するようにしたのでその方法を紹介します。

ほぼこの記事の丸パクリです……。

キャッシュ用ディレクトリを作ります。
$ sudo cd /var/cache
$ sudo mkdir nginx
$ sudo chown www-data:www-data nginx
$ sudo chmod 700 nginx

Nginxの設定を変更します。
$ sudo nano -w /etc/nginx/nginx.conf

http {
...
proxy_cache_path  /var/cache/nginx levels=1:2 keys_zone=czone:4m max_size=50m inactive=120m;
}


$ sudo nano -w /etc/nginx/sites-enabled/wordpress

upstream backend {
    server 127.0.0.1:8080;
}

server {
    listen       80;
    server_name ch.mlny.info;

    access_log  /var/log/nginx/access_80.log;

    location = /favicon.ico {
        log_not_found off;
    }

    location /wp-admin {
        proxy_pass http://backend;
    }

    location /wp-login.php {
        proxy_pass http://backend;
    }


    location / {
        proxy_pass http://backend;
        proxy_cache czone;
        proxy_cache_key $scheme://$host$request_uri;
        proxy_cache_valid  200 1d;
    }
}

server {
        listen 8080;
        server_name ch.mlny.info;
        ... 以前の server 内の設定
        location ~ .php$ {
            ...
            fastcgi_pass_header "X-Accel-Redirect";
            fastcgi_pass_header "X-Accel-Buffering";
            fastcgi_pass_header "X-Accel-Charset";
            fastcgi_pass_header "X-Accel-Expires";
            fastcgi_pass_header "X-Accel-Limit-Rate";
        }
}

WordPressの管理画面からプラグイン「Nginx Cache Controller」をインストールします。これでWordpressの管理画面からキャッシュの制御ができるようになります。

ss20160512-011803

20160512_004

キャッシュはちょっとズルい気がしますが、KUSANAGIより速くなりました!

次回は最後の仕上げ、Let’s EncryptによるSSL化を取り上げます。