nginxでWordPress環境をつくった。気分的にMariaDBで。
Posted on 2017/05/31 in tech
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ってなんだかんだつよい。
-
もし
php-fpmのソケットの所有者的なの(userとかgroupとか)変えたら、/etc/nginx/conf.dにかかれてるnginxの実行ユーザとグループも同じものに変えておくこと(デフォルトはwww-dataだったような。いじらなければ問題ないはず) ↩