このメモは、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_basic
と auth_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 を使ってみるを参考に必要な設定を記述する。
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.php
と wp-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 というファイルが自動で作られる。その中身を予め作成する作業になる。
/etc/nginx/conf.d/default.conf
に以下を追加。
include /etc/nginx/wp-w3tc;
Nginx をリスタートする。
$ service nginx restart
WordPress のバックアップ設定
前章で MondoRescue を導入しているので不要!と思うかもしれないが、備えあれば憂いなし!
WordPess のバックアップファイルを単体で使う可能性 ( サーバーの引っ越しなど ) も考慮。
バックアップ方法その 1 - BackWPup を設定
以下サイトを参考に設定する。
バックアップ方法その 2 - VaultPress を設定
こちらは BackWPup とは異なり有料 ( 1ヶ月 500円程度 ) です。
VaultPress を設定後は BackWPup と同じく自動でバックアップを作成。
バックアップからリストアする時は VaultPress の管理画面でボタンをワンクリックで終わり。 ( だったはず…記憶が曖昧です )
以下サイトを参考に設定。
*ワンコイン程でWordPressを毎日自動バックアップ。VaultPressを導入してみた。
管理画面に Basic 認証を設定
設定が面倒なのでプラグインにお願いしちゃいましょう ( 要動作テスト )。