Ubuntu + Nginx でWordPressを動かす

しんぺい

こんにちは!しんぺいです。

今回は、UbuntuとNginxを使ってWordPressを動かしてみます!

ConohaでVPSを契約する

VPSの業者は国内外含めてたくさんありますが、今回は国内の「Conoha」を選びました。

理由はUIが見やすいのと、そこそこ安いからです!

Conoha公式サイトはこちら

今回は「Ubuntu 18.04.3」を契約しました。
最安値のプランだとこれで月額700円かからないぐらいですから、かなりお得ですね。

契約してSSH接続も確認できたら、早速WordPressをインストールする準備をしていきましょう。

Nginxをインストールする

WordPressをインストールする際に多く使われるのがApacheかと思いますが、今回は評判のいいNginxを使っていきたいと思います。

SSHで接続ができたら、まずはNginxのキーをダウンロードし、インポートします。

$ wget https://nginx.org/keys/nginx_signing.key
$ sudo apt-key add nginx_signing.key

次に、/etc/apt/sources.listにURLを追加します。
ファイル末尾に以下の2行を追記します。

$ sudo vi /etc/apt/sources.list

# ファイル末尾に追記
deb http://nginx.org/packages/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/ubuntu/ bionic nginx

ここまで出来たら一度アップデートし、Nginxをインストールします。

$ sudo apt update
$ sudo apt install nginx
$ nginx -v
nginx version: nginx/1.16.1

無事にNginxのインストールが完了したら、自動起動を設定してNginxをスタートさせます。

$ sudo systemctl enable nginx
$ sudo systemctl start nginx

あとはULRにIPを打ち込んで、Nginxの初期ページが表示されればOKです。
ConohaはデフォルトでHTTP通信を許可しているので、ポートの操作は必要ありません。

Nginxのconfファイルを設定する

現在Nginxのデフォルトページを表示している状態なので、カスタマイズします。

/etc/nginx/に移動し、site-availableディレクトリと、site-enabledディレクトリが存在するか確認します。
もし見当たらなかったら、両方作成しておきます。

$ mkdir sites-available
$ mkdir sites-enabled

conf.dから、site-availableディレクトリにdefault.confをコピーします。

$ cp /etc/nginx/conf.d/default.conf /etc/nginx/sites-available/hogehoge.conf

コピーしたhogehoge.confを以下のように編集します。

server {
    listen       80;

    location / {
        root   /home/ubuntu/public_html/hogehoge/; # 適宜修正
        index  index.html index.htm;
    }
}

Nginxはデフォルトで/etc/nginx/nginx.confファイルを読み込みにいきますので、このファイルの末尾で/etc/nginx/sites-enabled/内のconfファイルも読むように修正します。

    ...
    #gzip  on;

    include /etc/nginx/sites-enabled/*.conf; # 追記
}

構文チェックをし、問題がなければNginxを再起動させます。

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

# sudo systemctl restart nginx

先ほどNginxファイルで書いたinclude先に、index.htmlを置いて、ブラウザ上に表示されればOKです。

# touch /home/ubuntu/public_html/hogehoge/index.html
# vi index.html
Hello! Test!

PHPをインストールする

WordPressはPHPで作られていますので、PHPをインストールする必要があります。

$ sudo apt install php
$ php -v
PHP 7.2.19-0ubuntu0.18.04.2 (cli) (built: Aug 12 2019 19:34:28) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.19-0ubuntu0.18.04.2, Copyright (c) 1999-2018, by Zend Technologies

今回は7.2系がインストールされました。
また、今回はNginxとMySQLで動かす想定ですので、php-fpmphp-mysqlもインストールしておきます。

$ sudo apt install php-fpm php-mysql

NginxのconfファイルでPHPを扱えるように修正します。

server {
    listen       80;

    location / {
        root   /home/ubuntu/public_html/hogehoge/;
        index  index.html index.htm index.php; # index.php追記
    }

    location ~ \.php$ {
        root   /home/ubuntu/public_html/hogehoge/;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

PHP-FPMの設定も変更する必要があります。
/etc/php/7.2/fpm/pool.d/www.confファイルのuser、groupをwww-dataからnginxに変更します。

user = nginx
group = nginx

listen.owner = nginx
listen.group = nginx

構文チェックし、問題がなければNginx、PHP-FPM両方を再起動します。

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

$ sudo systemctl restart nginx
$ sudo systemctl restart php7.2-fpm.service
$ touch /home/ubuntu/public_html/hogehoge/index.php
$ vi index.php
<?php phpinfo(); ?>

MySQLをインストールする

次にMySQLをインストールします。

$ sudo apt install mysql-server

初期設定を完了させます。
基本全部yesで大丈夫ですね。

$ sudo mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

MySQLのデフォルト文字コードをutf8mb4に変更したいので、/etc/mysql/my.cnfを編集します。

[mysqld]
character-set-server=utf8
skip-character-set-client-handshake
default-storage-engine=INNODB

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8

変更内容を反映させるために、MySQLを再起動させます。

$ sudo /etc/init.d/mysql restart
[ ok ] Restarting mysql (via systemctl): mysql.service.

現状のMySQLは、rootユーザーでもパスワードなしでもログインできてしまいます。
あまりよろしくないので、rootユーザーのパスワードを設定します。

$ mysql -u root
mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'yourpassword';
mysql> flush privileges;

一度ログアウトし、パスワード付きで再度MySQLにログインしましょう。

$ mysql -u root -p

WordPress用にデータベースを作成しておきます。

mysql> create database wordpress character set utf8mb4;
Query OK, 1 row affected (0.00 sec)

WordPressをインストールする

いよいよWordPressのインストールです。

$ cd /home/ubuntu/public_html/hogehoge/
$ wget https://wordpress.org/latest.zip
$ unzip latest

もしunzipコマンドがない場合は、zipコマンド一緒にインストールします。

$ sudo apt install zip unzip

あとは、IPアドレス/wordpressにアクセスすれば、WordPressのインストールが始まります!