ConoHa での Nginx + WordPress CentOSでの環境構築メモ

More than 3 years have passed since last update.

このメモは、ConoHa の Nginx + WordPress CentOS というテンプレートを使用する時のメモです。

また、常に更新と修正が行われていきます。

独自ドメインの DNS レコードの設定については触れていません。

各自設定しておくようにお願いします。


テンプレートを利用して VPS を追加

ConoHa には予め WordPress を快適に利用する為のテンプレートが用意されている。

インフラ知識ないし、折角なのでありがたく利用させていただく。

VPS を追加する際 [ テンプレート ] Nginx + WordPress CentOS を選択して VPS を追加する。


全てのファイルをアップデート

何も考えずに取り敢えず最新にしてみる。

$ yum update


ポート番号の設定


IPv4 の設定

$ vi /etc/sysconfig/iptables

$ ggVGd

以下をペースト。

*filter

:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

変更した設定を適用する。

$ service iptables restart


この節はCentOS に iptables の設定を行う (IPv4)より引用



IPv6 の設定

$ vi /etc/sysconfig/ip6tables

$ ggVGd

以下をペースト。

# Firewall configuration written by system-config-firewall

# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 546 --sport 547 -s fe80::/10 -d fe80::/10 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited

-A FORWARD -j REJECT --reject-with icmp6-adm-prohibited
COMMIT

変更した設定を適用する。

$ service ip6tables restart


この節はCentOS に ip6tables の設定を行う(IPv6)より引用



SSHのポート番号を変更

$ vi /etc/ssh/sshd_config

#Port 22 と記述されている箇所があるので Port 10022 に変更して保存。

変更した設定を適用する。

service sshd restart


この節はCentOS の SSH ポート番号を変更するより引用



phpMyAdmin を更新


最新バージョンがあるか確認

$ yum list | grep phpMyAdmin

最新バージョンがある場合、以下のように表示される。

phpMyAdmin.noarch                       4.2.6-2.el6.remi            remi

最新バージョンがあった場合はインストール。

$ yum --enablerepo=remi install phpmyadmin


Nginx の設定ファイルを追加


phpMyAdmin を動かす為のドメイン設定ファイルを追加

$ vi /etc/nginx/conf.d/phpmyadmin.conf

以下をペーストし、server_name を環境にあわせて書き換える。

server {

listen 80;
server_name phpmyadmin.example.com;
root /var/www/vhosts/default;
index index.html index.htm;
charset utf-8;

include /etc/nginx/drop;

# phpMyAdmin
location /phpMyAdmin {
alias /usr/share/phpMyAdmin;
index index.php;
include /etc/nginx/expires;
auth_basic "Local Security";
auth_basic_user_file "/var/www/vhosts/default/.htpasswd";
}
location ~ ^/phpMyAdmin/.+\.php$ {
alias /usr/share/phpMyAdmin;
fastcgi_pass phpfpm;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share$fastcgi_script_name;
include fastcgi_params;
}
}

.htpasswd ファイルを作成する。

htpasswd -nbs YourName YourPassword > /var/www/vhosts/default/.htpasswd

Nginx をリスタートする。

$ service nginx restart

なお、/etc/nginx/conf.d/default.conf をそのまま使用する場合、/etc/nginx/conf.d/default.conf の 53 行目のコメントアウトを外して、Nginx を再起動するだけで完了です。

Basic 認証を掛ける場合は、auth_basicauth_basic_user_file の部分を追加してください。


MySQL 設定


MySQL の root アカウントを設定

$ mysqladmin -u root password '好きなパスワード'

$ mysql -u root -p mysql
$ DELETE FROM user WHERE user = '';
$ DELETE FROM user WHERE host != 'localhost';

パスワードは、半角英数字 + 大文字英字 + 小文字英字 + 記号で構成するようにする。


Git の削除と最新版のインストール

Git は既にインストールされているが、バージョンが 1.7 であったため一旦削除し最新版をインストールする。


Git の削除

$ yum remove git


最新版の Git のインストール

$ yum install make curl-devel gcc openssl-devel expat-devel  cpan

$ yum install gettext asciidoc xmlto
$ mkdir /root/temp/
$ cd /root/temp/
$ wget https://www.kernel.org/pub/software/scm/git/git-2.2.1.tar.gz
$ yum install zlib-devel.x86_64
$ tar -zxf git-2.2.1.tar.gz
$ cd ./git-2.2.1
$ make prefix=/usr all
$ make prefix=/usr install
$ rm -rf /root/temp/*


Git コマンドが使えない

いざ Git コマンドを使おうとすると以下のようになる事がある。

$ git --version

-bash: /usr/bin/git: そのようなファイルやディレクトリはありません

この場合、Git がインストールされている場所を探して、その場所をシンボリックリンクで繋げてあげると解決する。

$ which git

/usr/local/bin/git
$ ln -s /usr/local/bin/git /usr/bin/git


ログ監視ツールのインストールと設定


Logwatch をインストール

$ yum install logwatch


動作確認

$ /usr/sbin/logwatch --print


設定を変更

$ vi /usr/share/logwatch/default.conf/logwatch.conf

ログ監視ツール Logwatch を使ってみるを参考に必要な設定を記述する。


この章はVPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定より引用



OS 全体をバックアップするツールのインストールと設定


MondoRescue を導入

$ wget ftp://ftp.mondorescue.org/rhel/6/x86_64/mondorescue.repo

$ mv mondorescue.repo /etc/yum.repos.d/
$ yum -y install mondo


圧縮ソフト ( LZO ) をインストール

$ vi /etc/yum.repos.d/dag.repo

[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://ftp.riken.jp/Linux/dag/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
enabled=0

$ yum -y install lzop lzo --enablerepo=dag


バックアップの実行

$ setenforce 0

$ mkdir /tmp/backup/
$ mondoarchive -Oi -L -N -s 4200m -d /tmp/backup -E /tmp/backup
$ setenforce 1


この章はさくらVPS上のOSを丸ごとバックアップするより引用



WordPress に関する設定


Nginx の設定 (不要です)

@wokamoto さんよりフィードバックをいただきました。

以下の ファイルへのアクセス制限 は不要です。

/etc/nginx/conf.d/default.conf 内に include /etc/nginx/drop; という記述があります。

この include /etc/nginx/drop; の中に以下のように書かれています。

location ~ /\. { deny all; access_log /dev/null; log_not_found off; }

※一部抜粋

この記述が ファイルへのアクセス制限 と被る為不要となります。

その他、wp-config.phpwp-blog-header.php にアクセスがあった場合、404 を返すような記述もありました。

include されているファイルもしっかり確認しないとですね!!


ファイルへのアクセス制限 ( 不要です )

/etc/nginx/conf.d/default.conf に以下を追加。

location ~ (\.ht|\.git|\.svn|\.conf) {

deny all;
}

Nginx をリスタートする。

$ service nginx restart


ドメインの設定

ConoHa のコントロールパネルにある DNS 逆引き設定で 1 つは設定可能。

以下は、マルチドメイン、サブドメインを設定する場合のサンプル。

※ただし、正しい設定方法かは微妙


追加するドメイン用の設定ファイルを作成

$ cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/example.conf

$ cp /etc/nginx/conf.d/default.backend.conf /etc/nginx/conf.d/example.backend.conf


設定ファイルを編集

example.conf を開く。

$ vi /etc/nginx/conf.d/example.conf

該当部分を以下のように編集。

listen      80;

server_name example.com;
root /var/www/vhosts/example/;
index index.html index.htm index.php;
charset utf-8;

access_log /var/log/nginx/example.access.log main;
error_log /var/log/nginx/example.error.log;

example.backend.conf を開く。

$ vi /etc/nginx/conf.d/example.backend.conf

該当部分を以下のように編集。

listen      unix:/var/run/nginx-backend.sock;

server_name example.com;
root /var/www/vhosts/example/;
index index.html index.htm index.php;

access_log /var/log/nginx/example.backend.access.log backend;

Nginx をリスタートする。

$ service nginx restart

これで一応は大丈夫だと思われる。


W3 Total Cache 関連の設定


Java のインストール

# インストール可能な最新バージョンを確認

$ yum search jdk
# インストール
$ yum install java-1.7.0-openjdk-devel.x86_64
# バージョンを確認
$ java -version
# Path を確認
$ which java


YUI Compressor のインストール

# インストール場所へ移動

$ cd /usr/share/
# ダウンロード
$ wget https://github.com/yui/yuicompressor/releases/download/v2.4.8/yuicompressor-2.4.8.jar
# 動作確認
$ java -jar /usr/share/yuicompressor-2.4.8.jar


Nginx の設定ファイルを作成

新規ファイルを作成する。

$ vi /etc/nginx/wp-w3tc

以下をペースト。

# BEGIN W3TC Minify cache

location ~ /wp-content/cache/minify.*\.js$ {
types {}
default_type application/x-javascript;
add_header Vary "Accept-Encoding";
}
location ~ /wp-content/cache/minify.*\.css$ {
types {}
default_type text/css;
add_header Vary "Accept-Encoding";
}
location ~ /wp-content/cache/minify.*js\.gzip$ {
gzip off;
types {}
default_type application/x-javascript;
add_header Vary "Accept-Encoding";
add_header Content-Encoding gzip;
}
location ~ /wp-content/cache/minify.*css\.gzip$ {
gzip off;
types {}
default_type text/css;
add_header Vary "Accept-Encoding";
add_header Content-Encoding gzip;
}
# END W3TC Minify cache
# BEGIN W3TC Page Cache cache
location ~ /wp-content/cache/page_enhanced.*html$ {
add_header Vary "Accept-Encoding, Cookie";
}
location ~ /wp-content/cache/page_enhanced.*gzip$ {
gzip off;
types {}
default_type text/html;
add_header Vary "Accept-Encoding, Cookie";
add_header Content-Encoding gzip;
}
# END W3TC Page Cache cache
# BEGIN W3TC Browser Cache
gzip on;
gzip_types text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
# END W3TC Browser Cache
# BEGIN W3TC Minify core
rewrite ^/wp-content/cache/minify.*/w3tc_rewrite_test$ /wp-content/plugins/w3-total-cache/pub/minify.php?w3tc_rewrite_test=1 last;
set $w3tc_enc "";
if ($http_accept_encoding ~ gzip) {
set $w3tc_enc .gzip;
}
if (-f $request_filename$w3tc_enc) {
rewrite (.*) $1$w3tc_enc break;
}
rewrite ^/wp-content/cache/minify/(.+\.(css|js))$ /wp-content/plugins/w3-total-cache/pub/minify.php?file=$1 last;
# END W3TC Minify core
# BEGIN W3TC Page Cache core
set $w3tc_rewrite 1;
if ($request_method = POST) {
set $w3tc_rewrite 0;
}
if ($query_string != "") {
set $w3tc_rewrite 0;
}
if ($http_cookie ~* "(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle)") {
set $w3tc_rewrite 0;
}
set $w3tc_enc "";
if ($http_accept_encoding ~ gzip) {
set $w3tc_enc _gzip;
}
set $w3tc_ext "";
if (-f "$document_root/wp-content/cache/page_enhanced/$http_host/$request_uri/_index.html$w3tc_enc") {
set $w3tc_ext .html;
}
if (-f "$document_root/wp-content/cache/page_enhanced/$http_host/$request_uri/_index.xml$w3tc_enc") {
set $w3tc_ext .xml;
}
if ($w3tc_ext = "") {
set $w3tc_rewrite 0;
}
if ($w3tc_rewrite = 1) {
rewrite .* "/wp-content/cache/page_enhanced/$http_host/$request_uri/_index$w3tc_ext$w3tc_enc" last;
}
# END W3TC Page Cache core

この内容は、W3 Total Cache を利用している場合、ドキュメントルートに nginx.conf というファイルが自動で作られる。その中身を予め作成する作業になる。


参照: (WordPress) W3 Total Cache + Nginx


/etc/nginx/conf.d/default.conf に以下を追加。

include /etc/nginx/wp-w3tc;

Nginx をリスタートする。

$ service nginx restart


WordPress のバックアップ設定

前章で MondoRescue を導入しているので不要!と思うかもしれないが、備えあれば憂いなし!

WordPess のバックアップファイルを単体で使う可能性 ( サーバーの引っ越しなど ) も考慮。


バックアップ方法その 1 - BackWPup を設定

以下サイトを参考に設定する。

* 「WordPressテンプレート」とDropboxでかんたんブログバックアップ!

* WordPressを毎日自動バックアップ


バックアップ方法その 2 - VaultPress を設定

こちらは BackWPup とは異なり有料 ( 1ヶ月 500円程度 ) です。

VaultPress を設定後は BackWPup と同じく自動でバックアップを作成。

バックアップからリストアする時は VaultPress の管理画面でボタンをワンクリックで終わり。 ( だったはず…記憶が曖昧です )

以下サイトを参考に設定。

*ワンコイン程でWordPressを毎日自動バックアップ。VaultPressを導入してみた。


管理画面に Basic 認証を設定

設定が面倒なのでプラグインにお願いしちゃいましょう ( 要動作テスト )。

* WP BASIC Auth