うえださんがとおりますよ

つれづれに書くよ

nginxでWordPress環境をつくった。気分的にMariaDBで。

Google大好きなうえだです。

Googleが最近AWSに対抗してGCPに力入れてるみたいなので、わざわざGCPで構築した。

300ドル分無料で使えるのでお試しあれ。

環境

Google Compute Engine 上の ubuntu 16.04 LTS

timezoneの変更

AWSにしろGCPにしろサーバーのタイムゾーンを忘れないように。

$ sudo dpkg-reconfigure tzdata

日本なら Asia -> Tokyo を選ぶ。

install nginx

$ sudo apt update
$ sudo apt install nginx

とりあえず設定はあとで。

install php

phpは7系。

$ sudo apt -y install php php-cgi php-cli php-mysql php-gd php-apcu php-fpm php-pear php-xmlrpc php-mbstring php-mcrypt

php-fpm

nginxではデフォでPHPを実行できないとかなんとかで、FastCGIのphp-fpmと繋いでPHPの実行環境を構築する

nginxがソケットを通じてphp-fpm.phpの実行を依頼する感じだと思ってる。ので、設定をする。

$ cd /etc/php/7.0/fpm/pool.d/
$ sudo cp www.conf www.conf.org
$ sudo vim www.conf

www.conf に以下の記述をする(コメントインするだけかも) 1

listen = /run/php/php7.0-fpm.sock
listen.mode = 0660 #limit access permission to socket

php-fpm の再起動忘れない。

$ sudo /etc/init.d/php7.0-fpm restart

nginxの設定

サンプル。

server {
   listen 80;
   server_name xxx.xxx.com; # domain
   access_log /var/log/access.log;
   error_log /var/log/error.log;

   location / {

        if (!-e $request_filename) {
            rewrite ^ /index.php last;
        }


        root /var/www/sample/public_html;
        index index.html index.htm index.php;

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

一応だけど

  • マルチドメイン対応していなければserver_nameの記述はしなくていい。そのとき上記の設定は/etc/nginx/sites-enabled/defaultに直接書いていい。
  • マルチドメインの場合ドメインごとのserver{}の設定が必要。/etc/nginx/conf.d/内のファイルはすべてnginxに読み込まれるので、ここにドメイン毎にファイル作って設定書いたらいいと思う(というのは独断と偏見)。

nginx再起動

設定を変えたら再起動忘れない(リロードコマンドあったっけ)

$ sudo /etc/init.d/nginx restart

MariaDBインストール

mySQLを使いたくない気分だった。

sudo apt install mariadb-server

セキュリティは地味に大事に

$ sudo mysql_secure_installation

mySQLとの互換性を大事にしてるおかげでちょいちょいコマンドがややこしいけど、シェル上ではみんなmysqlコマンド系でMariaDBは動かせる。

まずrootのパスワードセットするよう求められるのでy押しとこう。

ちなみに、MariaDBインストール時は不思議な仕様で、root権限でmysql -u rootと打つとログインできる(つまりsudo mysql -u rootでも可)。 まぁrootさんはなんでもできるって考え方は割りかし自然ではある。

データベースとユーザ作成

WordPressに扱わせるデータベースとユーザを作成する。

ちなみに確かこれもMariaDBの仕様だった気がするけど、MariaDB上のrootのパスワード設定しても、実行元もroot権限じゃないとログインできない。つまりsudo mysqlしないと-u rootできない。

$ sudo mysql -u root -p
MariaDB [(none)]> create database wp_sample;
MariaDB [(none)]> create user 'username'@'localhost' identified by 'password';
MariaDB [(none)]> grant all on wp_sample.* to 'username'@'localhost' identified by 'password';

Wordpress インストール

wgetってなんだかんだつよいよな。

$ cd
$ mkdir tmp
$ cd tmp
$ wget https://wordpress.org/latest.tar.gz
$ tar xvzf latest.tar.gz
$ cd wordpress
$ sudo cp -r * /var/www/sample/html
$ cd /var/www/sample/html
$ sudo cp wp-config-sample.php wp-config.php
$ sudo vim wp-config.php

先程作成したユーザとデータベース情報をwp-config.phpに記載する。

phpmyadminのインストール

これは欲しい人だけ。Apacheだとスムーズに入れられるけど、nginxさんはそうもいかないので、一応補足。

$ sudo apt -y install phpmyadmin php-mbstring php-gettext

Configuring phpmyadminて画面が出るんだけれど、nginxは選択肢になくてapache2はある。仕方ないのでapache2を選んどく。

するとapache2のための自動設定するか的な質問が表示されるので、そっとNoを選ぶ。

MariaDBの設定

なんでだか下記の設定が必要。plugin=''''はダブルクオーテーションじゃなくてシングルクォーテーション2つなので気をつけよう(僕は間違えた人)。

$ sudo mysql -u root -p mysql
Enter password:
  ...
MariaDB [mysql]> update user set plugin='' where user='root'; 
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0


MariaDB [mysql]> flush privileges; 
Query OK, 0 rows affected (0.00 sec)

nginxの追加設定。

phpmyadminにアクセスするための設定をnginxに追加する。

server {
    ...
    # setting for phpmyadmin
    location /phpmyadmin {
        root /usr/share;
        index index.php;


        # setting for phpmyadmin
        location ~ ^/phpmyadmin.+\.php$ {
            fastcgi_pass   unix:/run/php/php7.0-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
    ...
}

これ調べてるときにlocationでドキュメントルート使い分けられることを知った。感動。

他の設定ファイルもlocationにドキュメントルートの設定記述してあるのはこうやってドキュメントルートをアクセスパス毎に変えたりすることがあるから。

あ、nginxの再起動忘れないで。

$ sudo service nginx restart

おわり

WordPressってなんだかんだつよい。


  1. もしphp-fpmのソケットの所有者的なの( user とか groupとか)変えたら、/etc/nginx/conf.dにかかれてるnginxの実行ユーザとグループも同じものに変えておくこと(デフォルトはwww-dataだったような。いじらなければ問題ないはず)