AWSのLightsailのWordPress(BitNami)へ移行する際の要点まとめ
BitNami(AW…
2018年7月16日追記
あろうことか、MySQLやNginxなど、ミドルウェアのバージョン指定が抜けていました…。対象はMySQL5.6(おそらく5.7もいけると思われる)、Nginxは1.9xまでをこの記事ではサポートしています(おそらく2018年7月16日現在リリースの1.15.1もいけると思われる)。
たまーにWordpressのセットアップをやるので、セットアップ手順をメモがてら残すことにした。WordPressは当サイトでも使用している、世界的に最もメジャーなCMSの1つである。
チュートリアル形式なので、ドメインのレコード設定以外は再現可能なレベルで書くことにする。Apacheでの解説サイトならいくらでもあるけど、同時接続数をさばきたい目的がある人はWebサーバはNginxでいいと思うので、今回はNginxでのWordpressのセットアップ手順を紹介。
下記のものを事前に準備してください
順序的には、Webサーバとその周辺の設定→DB(データベース)設定→WordPress設定…という流れでチュートリアルを進めていきます。結構長いけど、がんばりましょう!
WebサーバソフトウェアのNginxをインストールする。Nginxの特徴は、ざっくりいうと同時接続のアクセスを効率良くさばくためにそもそも作られているということ。僕も疎いので、あまり語れるところではないので、詳細は下記の記事を参考にして欲しい。
これから始める人のためのNginx(1):高速・軽量・高機能……Nginxの基礎知識 (1/2) – @IT
http://www.atmarkit.co.jp/ait/articles/1406/17/news013.html
普通に買おうとすると高価なロードバランサーとしても使えるNginxちゃん素晴らしい!ちなみに、気になるけど実際の運用に手を出せていない良さそうなWebサーバだと、H2Oなんてものもある。こちらの記事によると、あるベンチマークではH2Oは、ほとんどチューニングしないでも、チューニングしたNginxを越えるほどのパフォーマンスをたたき出したようだ!
…というわけで、脱線したけどインストール作業に戻ることにする。NginxはCentOS標準のリポジトリには存在しないので、普通に$sudo yum install nginxなどと入力してもインストールはできない。なので、Nginx入手先のリポジトリ追加からはじめる。こちらのリンクのCentOS6の箇所のURLがNginxの公式リポジトリとなっているので、これを追加する。
$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
rpmコマンドはパッケージの追加・削除のためのコマンドである。rpmコマンドについての詳細はこちら。これで、マシンにリポジトリが追加されたので、
$ sudo yum -y install nginx
と入力し、インストール完了。
次にPHP-FPMをインストールする。PHP-FPMがNginxに必要な理由だが、前述の@ITの記事にもあったように下記のような理由である。
NginxはHTMLドキュメントや画像ファイルといった静的コンテンツは扱えるものの、Webアプリケーションのような動的コンテンツはSSI(Server Side Include)以外扱えません。代わりに、Nginxとは別プロセスでアプリケーションプログラムを稼働し、そのプロセスとUNIXドメインソケットで連携させることで、動的コンテンツに対応させることができます。
Nginxは軽量Webサーバなのである。というわけで、NginxでPHPを扱えるようにするため、PHP-FPMをインストールする。
$ sudo yum -y install php-fpm
Webサーバ周りがインストールできたので、次はWordpressを動かすために必要なDBだったり、PHPの周辺環境のインストールをする。たくさんあるので、さくっと下記のコマンドで。
$ sudo yum -y install mysql-server php php-mysql php-mbstring
インストールしたものは、MySQL(DBサーバ)と、PHPとその周辺環境のモジュールだ。
次に、インストール作業が完了したサーバソフトウェアを起動する。サーバ起動時に自動的に起動するように、chkconfigコマンドで設定もしておく。
$ sudo service start nginx $ sudo service start mysqld $ sudo chkconfig nginx on $ sudo chkconfig mysqld on
ちなみに、自動起動するソフトウェアの確認はchkconfig –listでできる。
インストールしたPHP-FPMを起動する。さしあたり、どうしても初期パラメータではマズい箇所があるので、PHP-FPMのみ先に設定を済ませてから起動をする。PHP-FPMの設定ファイルを編集する。
$ sodo vi /etc/php-fpm.d/www.conf
www.confファイルの39行目と41行目がPHP-FPMのプロセスをどのUNIXグループ/ユーザに割り当てるかの設定で、初期値が
39 user = apachae 41 group = apache
となっているので、これを
39 user = nginx 41 group = nginx
と変更する。
あとは、ついでにパフォーマンスを上げるために少々パラメータを調整する。パラメータの変更は下記のサイトを参考におこなう。以前、初期パラメータのまま運用をしていたところ、いつからか劇的にサイトのレスポンスが遅くなったので、これは初めから変更推奨。
Nginxが重い? NginxにおけるPHP-FPMの設定 | WordPress入門倶楽部
上記サイトを参考にwww.confを下記のように変更する。
60 pm = static 70 pm.max_children = 15
以上で、PHP-FPMの初期設定は完了。PHP-FPMを自動起動に設定して、起動する。
$ sudo service php-fpm start $ sudo chkconfig php-fpm on
また、NginxでPHP-FPMを扱うので、設定を反映するためにNginxを再起動しておく。
$ sudo service nginx restart
WordPressで扱うDBをセットアップする。MySQLにログインして設定を進める。初回はこれで入れるので、rootユーザに任意のパスワードを設定しておく。
$ mysql -u root -p
次に、WordPressに接続するDBを作成する。任意の名称で構わないが、今回は便宜上、myblogという名称に設定する。
mysql> CREATE DATABASE myblog;
myblogという名称のDBが正しく作成されたかの確認は、下記のコマンドを使う。
mysql> SHOW DATABASES;
次に、mublogのDBを使用できるユーザを設定する。ここでは、myblogというユーザを設定している。
mysql> grant all privileges on myblog.* to myblog@localhost identified by 'myblog2015';
myblogという名称のDBを操作できる、myblogというMySQLサーバのセットアップを完了した。exitコマンドでMySQLを終了する。ちなみに、上記コマンドの詳細だが、myblog.*のmyblogは先ほど作成したDB名称のことで、myblog@localhostはmyblogというMySQLユーザを示している。 identified by ‘myblog2015’で、myblogユーザのパスワードを設定している。
ようやく、WordPress自体のインストール作業である。まずは、WordPressをセットアップをするディレクトリを作成する。既存の状態で/var/www配下に直接セットアップしてもよいが、中にはWordpressを何度も同じサーバにセットアップすること人もいると思うし、それを見越して/wordpressを作っておく。
$ sudo mkdir /var/www/wordpress
しばらく、/wordpress配下での作業になるので、適切なユーザになっておく。このチュートリアルではrootユーザで作業。
$ su root # cd /var/www/wordpress/
次に/wordpressに最新版のWordrPressをダウンロードする。最新版のバージョンなどは、WordPress公式を確認。
# curl -L -O https://ja.wordpress.org/latest-ja.tar.gz
ダウンロードしたWordpressファイルを解凍する。
# tar zxvf latest-ja.tar.gz
wordpressという名称のディレクトリができる。次に、/wordpressの名称を変更する。今回はmyblogとする。
# mv wordpress/ myblog
また、ダウンロードした圧縮ファイルは削除しておく。
# rm latest-JavaScript.tar.gz
次にWordPress側にMySQLのDBへの接続情報を設定する。確認だが、現在は/var/www/wordpress/myblogで作業をしている前提である。WordPressで最初から用意されている設定サンプルがあるので、それをもとに設定ファイルを作成する。サンプルファイルのコピーを作成、そのファイルを設定ファイルとする。
cp myblog/wp-config-sample.php myblog/wp-config.php vi myblog/wp-config.php
wp-config.phpの下記の箇所を
// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** // /** WordPress のためのデータベース名 */ define('DB_NAME', 'database_name_here'); /** MySQL データベースのユーザー名 */ define('DB_USER', 'username_here'); /** MySQL データベースのパスワード */ define('DB_PASSWORD', 'password_here');
今回の場合、このように変更する。
// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** // /** WordPress のためのデータベース名 */ define('DB_NAME', 'demo_myblog'); /** MySQL データベースのユーザー名 */ define('DB_USER', 'myblog'); /** MySQL データベースのパスワード */ define('DB_PASSWORD', 'myblog2015');
これらは、MySQLのセットアップで設定した情報である。設定を間違えた時向けに、wp-config-sample.phpは残しておく。削除してもよい。
最後にNginxの設定を行う。本当にこれでサーバ周りの設定は終了!案外、まともにやると長いな。Nginxではもちろんヴァーチャルホストで設定するので、ディレクトリ設定もあるのであえて最後に回した。Nginxの設定ファイルは、/etc/nginx/conf.dにある。ここからは、ディレクトリは任意の箇所からの操作とする。さて、先ほど設定した/myblog向けのヴァーチャルホストの設定を記述していく。
# vi /etc/nginx/conf.d/myblog.conf
下記のように記述をする
server { listen 80; server_name demo.mmiyauchi.com; root /var/www/wordpress/myblog; index index.php; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; include fastcgi_params; } location / { try_files $uri $uri/ /index.php?$args; } }
Nginxの設定ファイルはとりあえず魔法にしておいてください…、全部は僕も分かってないです。適宜環境によって変える箇所でいうと、server_nameを適切なドメインにするのと、root(WordPressのあるディレクトリの場所)の2箇所でしょう。そのほかはだいたいPHP-FPM関連の設定情報が書いてあります。
設定ファイルが正しいかは、下記のコマンドでチェックする。間違ってしまった場合、エラーメッセージを参考に修正する。逆にいうと、この確認をなしでノリでNginx再起動、サーバに設定反映!なんてことは危険なので絶対にやらないこと…絶対にだ。
# service nginx configtest nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # service nginx restart
サーバでの設定周りは完了し、あとは実際にWordpressが動いているかを確認するまでだ。今回、この記事を書くにあたり、僕もセットアップを試しているので、下記の画像はそれの参考である。Nginxのconfファイルに設定した「server_name」の箇所のドメインのあとに続き、wordpressのインストール用スクリプトのパスを末尾につけてアクセスする。
今回のチュートリアルの例の場合だと、http://demo.mmiyauchi.com/wp-admin/install.phpが該当する。ブラウザの窓ではこうである。
さて、正しくインストールができていれば、http://(任意のドメイン)/wp-admin/install.phpにアクセスすると、このような画面が表示される。
オプションで、検索エンジンによるインデックスは最初は許可しなくてもよいかもしれない。なぜなら、未完成の体裁が悪い状態で、サイトを見られる人のも嫌な人もいるかもしれないので、ある程度サイトが完成したら公開でもま全く問題はない。この設定は、この後ログインする管理画面でいつでも変更ができる。
必要情報を入力しWordPressをインストールを押すと、下記のような画面が現れるはずだ。
このような画面が出てきて、ログインを押すと管理画面へのログインフォームが出てくる。
あとは、このデモブログの場合は、http://demo.mmiyauchi.com/にアクセスするとそのままブログのトップページが出てくる。これで、WordPressがちゃんと動くまでセットアップ完了。まだちょっと続きます。
WordPress自体のセットアップは完了したが、インストールが正しく完了しないと、片付けられないものがあるのでそれを片付ける。先ほど、インストール時にinstall.phpスクリプトが使われたが、今後はもうこのスクリプトは使われない。install.phpにアクセスされると再セットアップはされることはないが、念のために削除をしておく。
$ sudo rm /var/www/wordpress/myblog/wp-admin/install.php
次に、ちょっとした設定である。これはお好みなので、読み飛ばしても構わない。
先ほどアクセスした管理画面で、バージョンによってはインストール直後からプラグインやWordpress自体に更新データがあると表示されていた人もいるだろう。WordPressのソフトウェア更新にはいくつかのやり方がある。代表的なやり方は、2つパターンだ。1つはWebで先ほどの管理画面にアクセスしてボタンをポチポチ押して更新をかける方法。2つめは、サーバに手動により新しいソフトウェアをダウンロードして上書きをしていく方法だ。後者はよいとして、今回は前者の自動更新の設定をお好みでおこなう。
自動更新をするには、該当のWordPressディレクトリとその配下のファイルの権限をWebサーバに設定してあげることが必要だ。今回の場合、/var/www/wordpress/myblogの権限の設定を変更する。もし着手する場合、これはNginxに/myblogに対する操作を許してしまうので、セキュリティ的にはリスクが大きくなる設定であることを理解して実行してほしい。
$ su root # chown -R nginx:nginx /var/www/wordpress/myblog/ # cd myblog # chown -R nginx:nginx * # service nginx restart
これで、Webでブログの管理画面の更新を押すとWeb上で更新処理が可能になっている。
以上にて、NginxでのWordPressのセットアップ完了ー!!長かった。。
この記事を書くのに、Vagrantで最初はコマンド打ちながら確認をしていたが、途中ネットワーク設定に疎かったのでWebでアクセスするタイミングで、コケてしまった。結局、自分のサーバでやり直すという何度も面倒くさいことをやってしまった!なんにせよ、今公開されている、ネット上のWordPress4.X系セットアップで、Nginxでのセットアップのエントリーを見た感じ、当エントリーが一番丁寧にやっている自負があるので、誰か役に立てばそれで結構…。
長いチュートリアルなので、修正箇所や漏れなどあったら、コメントください。あと質問もお気軽にどうぞ。答えられる範囲で対応します。
プログラムを書きながらTranceを聴くのが良いですね。みなさんも聴いたほうがいいですよ、Trance。EDMよりハードトランスでしょ。
このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。
DBのセットアップのところでユーザの作成と権限の付与を一度にやっている箇所(GRANT ALL のところ)は、MySQLのバージョンによってはうまく動かない可能性がありそう。(実際に自分が MySQL 8.0 でやってみると Syntax Error で先に進めなかった)
なので ユーザ作成 > DB 作成 > 権限付与 の手順にすると、つまずく人が少なくなるのではないかと。
> えびちゃん
指摘ありがとう!
今後、MySQLのバージョンで迷ってしまう人がいないように、まず記事中にてミドルウェアのバージョン情報が完全に抜け落ちてたので、当時のバージョンを調べて、この記事でサポートするバージョンを記事冒頭に明記しました。
MySQL v8は、アーキテクチャにもv5.7から大きな変更があると聞いていて、指摘にあるように、ユーザへの権限付与の昔からある構文さえも動かなくなっているのだと思う。
本来であればv8についても検証すべきだけど、MySQL v8は自分的にも避ける方向性なので、一旦記事執筆当時のバージョン情報明記ということで対応させてもらいますー。