さくらのVPSでWordPress引越し(512M→2G)
これまでさくらのVPS 512Mプランを使っていたのですが、やはりメモリが 512Mだと心もとないのと
さくらのVPSがリニューアルして驚愕のスペックと価格になったのでこれを機会に 2Gプランへ乗り換えしました。
いろいろやらかしているさくらのクラウドとは違い、さくらのVPSはかなり安定しています。
今だと初期費用無料キャンペーン中の上、旧プランを利用中の人には乗り換え優遇施策がある。
これは乗り換えるしかあるまい。
という事で、在庫が無くなるくらい売れまくってる 2Gプランですが、申し込み再開と同時に年払いで申し込んでみました。
一回目の申し込み時は受付完了のメールが届かず。契約サービス一覧には表示されてるのに、IPアドレスが表示されない。。
おかしいなと思って問い合わせてみたら申し込み処理に失敗してたそうな。えー?
やっぱ混んでたのかな。気を取り直して二回目。今度はうまく行った。
割り当てられた IPアドレスに向かって traceroute してみると、どうやらサーバは大阪にある様子。
512M の方は東京だったので、7ms くらい差がありました。まあ、普通は問題にならないからいいや。
折角なので、512M → 2G の WordPress 移行手順をまとめておきます。
- 移行方法
- さくらのVPSを起動して最初にやること
- CentOS 設定
- Apache インストール
- PHP とか MySQL とか eAccelerator とかインストール
- MySQL 設定
- WordPress インストール
- WordPress 移設
- eAccelerator 設定
- おまけ
Contents
移行方法
OSのバージョンを合わせれば、rsync で楽々移行が可能です。
ただ今回は、CentOS のバージョンを上げておきたかったので新規でセットアップしました。
ちなみに、512M が CentOS 5.8 で、2G が CentOS 6.2 です。
さくらのVPSを起動して最初にやること
さくらのVPSを新規でセットアップした状態だとセキュリティー的に微妙なので、
最初にお約束のようにすべきことがいくつかあります。
・ログインユーザの作成
・root ログインの禁止
・パスワード認証の禁止
・公開鍵認証の許可
・iptables の設定
それぞれ見て行きますかね。
上記はすべてVPSコントロールパネルのリモートコンソール画面から作業可能です。
そういや、ブラウザ上のリモートコンソールにペーストする方法がわからず右往左往したのですが、
IPアドレスが表示されている上部のすぐ右にあるアイコンをクリックするとペースト可能でした。よくできてるなぁ。
1. ログインユーザの作成
いつも useradd だっけ adduser だっけ違いは何だっけと悩み、adduser の方が文章的でわかり易いので
adduser hoge とタイプしてコマンドプロンプトがすぐ帰ってきて失敗したと後悔します。(気分的には対話型を期待している)
ああ違ったかと思いながら useradd でやり直すも、結果は一緒。
調べてみると CentOSの場合 adduser は useradd のシンボリックリンクになっていました。
[bash]
# ls -l /usr/sbin/adduser
lrwxrwxrwx 1 root root 7 Mar 24 19:03 /usr/sbin/adduser -> useradd
[/bash]
なん、、だと、、? うーん。時間を無駄にした。ユーザは適当に足せばいいと思います。
あとは好みに応じて wheel に所属させて下さい。
[bash]
# useradd hoge
# passwd hoge
# usermod -G wheel hoge
[/bash]
2. root ログインの禁止/パスワード認証の禁止/公開鍵認証の許可
これらは /etc/ssh/sshd_config を編集すれば全て設定可能なので一気にやってしまいます。
[bash]
# vi /etc/ssh/sshd_config
PermitRootLogin no
RSAAuthentication yes
PubkeyAuthentication yes
RhostsRSAAuthentication no
PermitEmptyPasswords no
PasswordAuthentication no
ChallengeResponseAuthentication no
# service sshd restart
[/bash]
デフォルト値も混ざっていますが、明示的にコメントアウトしておくと安心できます。
あとは作成したユーザの .ssh/authorized_keys に公開鍵を追加しておく事を忘れずに。
3. iptables の設定
本当は自分がアクセスする可能性があるソースアドレスからの ssh のみ許可するとかやれば一番安心なのですが、
モバイル端末で人の回線を借りててソースアドレスで弾かれたりすると悲しいのでそこは制限をかけません。
代わりに、スラドで拾ったこんな設定を入れています。
[bash]
# iptables -A INPUT -p tcp -m tcp –dport 22 -m state –state NEW -m recent –update –seconds 30 –hitcount 1 –name ssh_attempt –rsource -j DROP
# iptables -A INPUT -p tcp -m tcp –dport 22 -m state –state NEW -m recent –set –name ssh_attempt –rsource
[/bash]
30秒以内に同じアドレスから ssh アクセスがあると DROP するという嫌がらせのようなフィルタです。
総当り的なアクセスはすぐに退散してくれるので重宝しています。まあ、わりと自分もひっかかりますが。
CentOS 設定
標準の yum リポジトリだと心もとないので、リポジトリを追加します。
[bash]
# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
# wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -Uvh epel-release-6-5.noarch.rpm
# rpm -Uvh remi-release-6.rpm
# rpm -Uvh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
[/bash]
CentOS のバージョンが違うと wget のリンク先も異なるので気をつけてください。
上記のうちどれかは既にインストールされていたような気がしたのですが忘れました。
/etc/yum.repos.d/ 以下に .repo ファイルが展開されるので、それぞれ enabled=0 にしておきます。
使うときは yum に –enablerepo=remi とか付ければいいと思うよ。
[bash]
# vi /etc/yum.repos.d/epel.repo
# vi /etc/yum.repos.d/remi.repo
# vi /etc/yum.repos.d/rpmforge.repo
enabled = 0
[/bash]
Apache インストール
最初から入ってる apache が 2.2.15 なので、容赦無くアンインストール。
[bash]
# yum list | grep httpd
httpd.x86_64 2.2.15-15.el6.centos.1 @updates
httpd-tools.x86_64 2.2.15-15.el6.centos.1 @updates
httpd-devel.i686 2.2.15-15.el6.centos.1 updates
httpd-devel.x86_64 2.2.15-15.el6.centos.1 updates
httpd-manual.noarch 2.2.15-15.el6.centos.1 updates
# yum erase httpd.x86_64
# yum erase httpd-tools.x86_64
[/bash]
まだ 2.4 系を入れる勇気は無いので 2.2.22 をビルドする。
httpd-2.2.22.tar.gz を落としてきて適当な所に展開し configure する前に openssl-devel を入れておく。
[bash]
# yum install openssl-devel
# ./configure \
–prefix=/usr/local/apache2.2.22 \
–enable-auth-basic \
–enable-auth-digest \
–enable-authn-alias \
–enable-alias \
–enable-rewrite \
–enable-vhost-alias \
–enable-so \
–enable-ssl \
–enable-proxy \
–enable-proxy-balancer \
–enable-deflate \
–enable-headers \
–with-included-apr \
–with-apxs2=/usr/local/apache2.2.22/bin/apxs \
–enable-dav \
–enable-dav-fs \
–enable-dav-lock
# make
# make install
[/bash]
configure のオプションはわりと適当。
あとはなんとなくこんな感じで。
[bash]
# ln -s /usr/local/apache2.2.22 /usr/local/apache2
[/bash]
Apache 設定
conf をそのまま持って来たら大体動くよね。
[bash]
# vi /etc/httpd/conf/httpd.conf
ServerTokens ProductOnly
ServerSignature Off
NameVirtualHost *:80
[/bash]
そんで /etc/httpd/conf.d 以下に VirtualHost ごとの設定ファイルを配置。
PHP とか MySQL とか eAccelerator とかインストール
[bash]
# yum install mysql-server php-common php-devel php-mysql php-mbstring php-eaccelerator –enablerepo=remi
[/bash]
Contact Form 7 で Really Simple CAPTCHA を使ってるので、GD を入れておく。
FreeType はインストール済みでした。
[bash]
# yum install php-gd gd.x86_64 –enablerepo=remi
[/bash]
MySQL 設定
MySQL の接続を localhost のみに
[bash]
# vi /etc/my.cnf
bind-address=localhost
→ どこかに追記する
[/bash]
MySQL を起動し、初期設定を行う。
[bash]
# /etc/rc.d/init.d/mysqld start
# mysql_secure_installation
→ root のパスワードを設定したり、test データベースを削除したり。
[/bash]
WordPress用の DB、ユーザ作成、権限設定
[bash]
# mysql -u root -p
mysql> create database wordpress;
mysql> grant all privileges on wordpress.* to wordpress@localhost identified by ‘パスワード’;
mysql> exit
[/bash]
MySQL を自動起動するよう設定
[bash]
# chkconfig mysqld on
[/bash]
WordPress インストール
wordpress-3.3.2-ja.tar.gz を落としてきて展開して、と思ったけど、よく考えたら wordpress はフォルダごと、
DB は Dump を持ってきたらそれでいい気がしてきた。よし、それで行こう。
WordPress 移設
前のサーバから wordpress フォルダを持ってきてそのまま展開。
MySQL のデータはダンプを取ってインポート。
[bash]
# mysqldump -u root -p wordpress > wordpress.dump
→ WordPress用のデータベース名が wordpress の場合
# mysql -u root -p wordpress < wordpress.dump
→ 新しいサーバで dumpデータをインポート
[/bash]
これで Apache の設定を間違えてなければそのまま動くはず。
言い忘れてたけど、あらかじめ DNS の TTL 設定を最小にしておいて、
新しい方のサーバ設定が完了したら切り替えるといいよ。
eAccelerator 設定
yum で入れると control.php は /usr/share/doc/php-eaccelerator-0.9.6.1/control.php
設定ファイルは /etc/php.d/eaccelerator.ini に出来上がるみたい。
デフォルトの ID/PASS は control.php 内に書いてあるという親切設計。
[bash]
# vi /etc/php.d/eaccelerator.ini
eaccelerator.shm_size = "32"
→ とりあえず 32Mくらいで。
eaccelerator.allowed_admin_path = "control.php をコピーして配置する先のパス"
→ これを設定しないと control.php が正しく動作しない。
[/bash]
おまけ
WP SuperCache をオンにしたら ApacheBench の数値が一桁変わったでござるの巻。
オフ(mod_php+eAccelerator)
[bash]
#ab -n 100 -c 10 https://irts.jp/
Time taken for tests: 6.682 seconds
Requests per second: 14.96 [#/sec] (mean)
[/bash]
オン(mod_php+eAccelerator+WP SuperCache)
[bash]
#ab -n 100 -c 10 https://irts.jp/
Time taken for tests: 0.785 seconds
Requests per second: 127.38 [#/sec] (mean)
[/bash]
何だこれ。すげーな。