WordpressをEC2にインストールする

wordpress install

WordPress を AWS(EC2) にインストールするための手順。
自社向け覚書です。

はじめに

「シャブ御殿に住む『群馬のシャブばばあ』 って何それ?」な今日この頃、皆様いかがお過ごしですか。

暫く前にJoomlaをEC2にインストールする方法 ( AWS(EC2)にJoomlaをインストールする ) を書きましたが、今回はWordPressです。

WordPressに関しては説明するまでもないでしょう。
個人的にはPHPベースのCMSではDrupal推しなので、自ら利用する事はあまりありませんが、国内/海外含めて最も利用されているブログ/CMSツールです。
※Drupal はCMS というよりもアプリケーションフレームワークに近いと思う

インストールする機会が何度かあったので、手順をまとめておきます。

環境

環境は以下になります。

OS Amazon Linux 64bit
WordPress 4.4
nginx 1.8.0-10.25
mysql 5.6.27

Webサーバはnginx、DBはMySQLを利用します。

インストールの前に

ドメイン名を決めておく

とりあえずサイトの構成を決めたい場合等、ドメイン名やIPアドレスは仮のものでサイトを構築するといった事はよくある話かと思います。
但し、WordPress の場合、ドメインやホストアドレスがDBに記録されてしまうため、インストール後にドメインやホストアドレスを変更する場合、DBの内容を変更しなければならない状態に陥ります。

※同様のシステムでもJoomlaやMagnoliaではそういった事はない。

この作業は結構手間ですし、それなりのスキルも必要だと思われます。
( mysql で SQL叩く必要があるため )

可能であれば、これら作業を行わずに済むようにサイトのドメイン名は決めてから作業を行う方がよいでしょう。

インストールするインスタンスには固定IPを割り振る

EC2インスタンスにも固定IPを割り当てて作業を行いましょう。

参考 : EC2インスタンスに固定IPアドレスを割り当てる


本番サイトが稼働中で、開発用のインスタンスでサイト構築せざるを得ないと言った場合、hostsファイルを編集する等して、webブラウザでアクセスした場合に開発用のインスタンスにアクセスされるようにしましょう。

EC2インスタンスの作成

インスタンス作成

EC2 インスタンスを作成します。
小中規模サイトであれば t2.micro で十分だと思います。
t2.nano インスタンスでも動作すると思います。( ある程度のチューニングは必要かも )

EC2 インスタンス生成に関しては、十分あれば十分? - EC2インスタンスの作成から起動まで も参考にしてください。( 少々古いですが ( メニューが日本語化されていない頃の記事 )、今も作成手順はほぼ同じ )

初期設定

インスタンスが生成されたら、EC2インスタンスを起動し初期設定を行います。

参考 : EC2インスタンス(Amazon Linux)の初期設定

固定IPの割り当て

可能であれば固定IPを割り当てます。

参考 : EC2インスタンスに固定IPアドレスを割り当てる

パッケージのインストール

インストールに必要となるパッケージ ( mysql, nginx, php 等 ) に関しては、極力 yum を利用してインストールします。

epel  リポジトリが登録されていれば、wordpress 自体も yum でインストール可能ですが、この場合、nginx ではなく apache もインストールされてしまう ( httpd or httpd24 に依存関係があるため )、wordpress自体はアーカイブを取得してインストールする方法を採ります。

MySQL

MySQLのインストール

最新のWordpressはMySQL5.6、PHP5.6 以上を推奨しているため、5.6をインストールします。

参考 : About » Requirements — WordPress:

以下を実行します。

# yum install mysql56-server

MySQLの設定

MySQLの設定ファイルを編集します。

# vi /etc/my.cnf

以下を追記します。

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
skip-character-set-client-handshake
character-set-server=utf8
collation-server=utf8_general_ci
init-connect=SET NAMES utf8

※文字コード関連の設定のみ記載しています。

MySQL起動

# /etc/rc.d/init.d/mysqld start

自動起動設定は以下で

# chkconfig mysqld on

WordPress 用データベース作成

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

  1. MySQLに接続します。(yum でインストールした場合、パスワード無しで接続可能)
    # mysql
    
  2. WordPress用データベースを作成します。
    以下では DB名='wordpress' で作成。
    DB名や接続ユーザ名は適宜変更して下さい。
    mysql> create database wordpress;
    
  3. wordpress 用データベースにアクセスするためのユーザを作成します。
    ユーザ名も 'wordpress' としています。('wordpress'@'部分)
    'パスワード' 部分には 適当なパスワードを設定して下さい。
    mysql> grant all privileges on `wordpress`.* to 'wordpress'@'localhost' identified by 'パスワード';
    mysql> flush privileges;
    
  4. Mysqlから抜けます。
    mysql> quit;
    

※上では最低限の手順を説明しています。
上述の通り Mysqlへのrootユーザによる接続はパスワード無しで可能になっています。
特に運用環境の場合、mysql_secure_installation を実行する等してください。

PHP

PHPのインストール

5.6をインストールします。

# yum install php56 php56-mysqlnd php56-fpm php56-mbstring

PHPの設定

php.ini を編集します。

# vi /etc/php.ini

以下を設定します。(抜粋)

upload_max_filesize = 20M
post_max_size = 20M

アップロード可能なファイルのサイズ上限設定を行っています。数値に関しては要件に応じて適宜変更して下さい。

php-fpmの設定

yum でインストールした場合 php-fpm のユーザが apache になっているので、nginx に変更しておきます。

# vi /etc/php-fpm.d/www.conf

以下を ( apache から nginx に ) 変更します。( 抜粋)

user = nginx
group = nginx

php-fpm に関しても自動起動設定を(必要に応じて)行います。

# chkconfig php-fpm on

Nginx

参考 : Nginx - WordPress Codex 日本語版

Nginx のインストール

yum でインストールします。

# yum install nginx

Nginxの設定

# vi /etc/nginx/nginx.conf

以下で設定します。(抜粋)

※wordpress サブディレクトリを作成してインストールするものとします。

...
server {

        root         /usr/share/nginx/html/wordpress;  # wordpressサブディレクトリを作成してインストール
        client_max_body_size 20M;   # アップロードファイルサイズ上限
        index           index.html index.htm index.php;

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        # (中略)
        location ~ \.php$ {
        #    root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
...

Nginx起動設定

Nginx も必要に応じて自動起動設定します。

# chkconfig nginx on

WordPress

アーカイブを取得してインストールします。

Nginx のドキュメントルートである /usr/share/nginx/html/ 下にサブディレクトリを切ってインストールする事にします。

  1. /usr/share/nginx/html に移動します。
    # cd /usr/share/nginx/html
    
  2. WordPress を取得して展開します。
    # wget https://ja.wordpress.org/wordpress-4.4-ja.tar.gz
    # tar xvzf wordpress-4.4-ja.tar.gz
    

    wordpress サブディレクトリが作成されここに WordPress のファイル群が展開されます。

  3. アーカイブファイルは削除します。必要であれば適当なディレクトリにバックアップして下さい。
    # rm wordpress-4.4-ja.tar.gz
    
  4. ディレクトリのオーナー(パーミッション)を設定します。
    # chown nginx:nginx wordpress -R
    

Nginx, php-fpm の起動

Nginx、及び、php-fpm の設定が完了したら、これらを起動します。

# /etc/rc.d/init.d/nginx start
# /etc/rc.d/init.d/php-fpm start

WordPressインストール

上記手順が完了したら、設定を行ったホストにWebブラウザからアクセスし、WordPress の Webインストーラに従ってWordPressインストールを完了させます。

  1. インストール先にWebブラウザでアクセスします。

    ※前述の通り、本番のURLと同じURLでアクセスするのが望ましい。

    wordpress install
    [ さあ、始めましょう!] ボタンをクリックします。
  2. データベースの設定画面に遷移するので、各値を入力して [ 送信 ] ボタンをクリックします。
    データベース名"WordPress 用データベース作成" 時に指定したデータベース名
    ユーザー名"WordPress 用データベース作成" 時に指定したユーザ名
    パスワード"WordPress 用データベース作成" 時に指定したパスワード
    データベースのホストデータベースがインストールされているホスト。今回の手順ならば localhost
    テーブル接頭辞テーブル名のプリフィックス。ここで設定した値がテーブル名の頭に付く。複数のWordPressを単一のデータベースで運用する場合には、WordPress毎にこの値を変える。

    wordpress install
  3. インストール実行確認画面に遷移するので、問題なければ [ インストール実行 ] ボタンをクリックします。
    wordpress install
  4. 必要情報の入力画面に遷移するので各値を入力し、[ WordPress をインストール ] ボタンをクリックします。
    wordpress install
  5. 成功しました!画面が表示されれば、インストールは完了です。
    [ ログイン ] ボタンでログインしてサイト構築を行いましょう。
    wordpress install

その他

脆弱性への対応

WordPress ではこれまでプラグイン含めて数々の幾つかの脆弱性が発見されています。
運用環境で利用する場合、プラグイン含めて脆弱性がある場合には適切にバージョンアップする等の対応を行う必要があります。

不正ログインの防止

管理画面に不正にログインする攻撃もよく行われているようなので、管理画面へのアクセスには基本認証をかける、アクセス可能なネットワークを制限する等の対策を行った方がよいでしょう。

当然ですが強度の弱いパスワードの利用も避けましょう。

参考 : パスワード強度チェッカー (zxcvbn)

チューニング等

上記手順では、DB(MySQL), Webサーバ(Nginx), PHP 等に関しては最低限の設定を行ったのみで、運用やパフォーマンス、セキュリティ等を考慮したチューニング作業は行っておりません。( 実際の作業では設定したものもあるが、手順からは省略 )

場合によってはこれら追加設定が必要になるかもしれません

おまけ

MySQL設定

文字コード関連以外デフォルトで動作させていたところMySQLが落ちる現象が起きたので、幾つかパラメータを変更。

※検証不十分、且つ、今後も変更する可能性あり

以下を /etc/my.cnf の [mysqld] に追記

## for performance
max_connections=15

tmp_table_size=48M
max_heap_table_size=48M

key_buffer_size=8M
net_buffer_length=16K
sort_buffer_size=2M
read_buffer_size=128K
join_buffer_size=256K
read_rnd_buffer_size=256K

innodb_buffer_pool_instances=1
innodb_buffer_pool_size=24M
innodb_log_buffer_size=2M
innodb_additional_mem_pool_size=2M
myisam_sort_buffer_size=2M

query_cache_size=64M
query_cache_limit=32M
query_cache_type=1
thread_cache_size=16

php-fpm 設定

メモリに制約がある環境の場合 php-fpm も設定しておかないとメモリ不足になったり、パフォーマンスに問題が出たりする可能性があります。適宜調整しましょう。

/etc/php-fpm.d/www.conf の値を編集 (抜粋)

pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 500

Nginx設定

殆ど変えてませんが、その後 nginx.conf に open_file_cache max だけ追記。

...
http {
    ...
    sendfile            on;
    open_file_cache max=100 inactive=20s;
    ...
}
...

まとめ

とりあえず、自分でEC2にWordPressをインストールして使ってみるまでの手順でした。

AWS EC2 には、自分でインストールしなくても WordPress が動作する Community AMI が幾つか存在しているので、「インストールが面倒!」、「よく判らない!」といった場合にはこれらを利用するのもよいでしょう ( 課金対象のものもあるようなので確認を )。

WordPressの使いこなし等に関しては、多くのサイトで説明され尽くしている感があるので、それらを参照して下さい。