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