WordPress の引っ越し。AWS EC2 + RDS から ロリポップ チカッパプランへ
rsync + SSH を使った簡単な(と言われる)引っ越しなはずが、おもいっきり躓いた軌跡。
1.サーバー選定とレンタル
SSH が使えるってところで、手軽なお値段のロリポップのチカッパプランにしました。
ロリポップは先日セキュリティ事故を起こしましたが、その分以下のように細かい設定指示を出しているので、大丈夫かなーとか。
–>サイト改ざんへの対策をお願いいたします – ロリポップ!レンタルサーバー
WordPress の簡単インストールとかするつもりはありませんが、移行が終わったら対策方法の案内の通りに設定してみようと思います。
それで一応、こちら(ロリポップのサイト改ざん事件に学ぶシンボリックリンク攻撃の脅威と対策 | 徳丸浩の日記)を拝見する限りは結局のところ、共有レンサバやめなよって感じなんですけど、そんなこと言われてもお金とか維持費とかお金とかやっぱり厳しいですし、個人情報などを扱うつもりもありませんのでってことで、ロリポップに決めました。
2.ロリポップサーバーの SSH 設定と疎通確認
適当に申し込みを終える。
そしたら、レンタルサーバ業者によるだろうけれども、ロリポップ チカッパプランではまず管理画面(ロリポップ!ユーザー専用ページ – SSH)から SSH を有効にする。
そしたらターミナルでログイン出来るかチェック。
$ ssh user@host -p 2222
とすると、パスワード聞かれたりなんやかんやありますが、ログインできるかとおもいます。
パスワードはロリポップの SSH を有効にした管理画面で確認できます。
ポートを指定しているのはロリポップの仕様です。
3.rsync を使った WordPress ソースの移行
rsync のコマンドは & rsync [オプション] コピー元 コピー先 という構文ことなので、以下の様な感じで。
$ rsync -avz -e ssh user@host:~/web/ ~/web/
オプション -avz あたりについては、他のサイトで詳しくみてもらうのがいいと思いますが、何も考えずにとりあえず付けておけばいいです。
それと、オプションに -n をつけると dry run (リハーサル的な?)ができるので、まずは -avzn とでもして試すのがいいかもしれない。というかソッチの方がいい。
上記を前提としつつ、EC2 に SSH で接続する時に .pem を使っていたので、rsync する時も .pem を使います。
ロリポップサーバーの ~/.ssh/ に .pem を置いてパーミッションを 600 に。
そしたらロリポップに ssh でログインしている状態で、.pem を扱える以下の様なコマンドを実行する感じになります。
$ rsync -avz -e "ssh -i /home/users/xx/xx/.ssh/key.pem" ec2-user@host:/var/www/html/ /home/users/xx/xx/web/
ちなみに、ロリポップサーバーの rsync のバージョンがちょい低くて、文字コードを指定する –iconv=CP932,UTF-8 とかは使えない。
$ rsync -v
rsync version 2.6.8 protocol version 29
結果から言うと EC2 UTF-8 –> ロリ UTF-8 な感じだったので問題は発生しませんでした。よかった!
注意点:rsync -e の後にチルダが使えない
「rsync を使った WordPress ソースの移行」としては以上で終わりなんですけども、「rsync がなぜか実行できない」というハマりポイントを共有しておくと、
rsync の -e に続くコマンドに、ホームディレクトリを示す “~” は使えない。
2004-12-24 – Lazy Diary @ はてな
ってことで、チルダを使うと以下みたいなエラーとなります。
$ rsync -avz -e "ssh -i ~/.ssh/key.pem" ec2-user@xxxx.amazonaws.com:/var/www/html/ /home/users/xx/xx/web/
Warning: Identity file ~/.ssh/key.pem not accessible: No such file or directory.
Permission denied (publickey).
鍵が not accessible だっておこられます。
注意点:EC2 のホームディレクトリのフルパス
rsync で指定する EC2 のディレクトリって
/home/ec2-user/var/www/html/
じゃなくて
/var/www/html/
みたい。
(デフォルトの場合)ec2-user で EC2 にログインして
$ cd ~
ってすると /home/ec2-user/ っぽい場所にいるんだけど、ルートから下って行くと、/var/www/html/ でもワードプレスのファイルとかに到達できます。/home/ec2-user/ ってパスは不要の様子。
もちろん /home/ec2-user/var/www/html/ でも到達はできるのだけど。シンボリックリンク的なやつなの?なんなの?
これにねぇ、5時間位ハマった。
チルダでも数時間ハマってて、その時に(うろ覚えだけど)以下みたいなエラーが出たから、パスを変更したような気がしたけど、注意されたパスが違ったみたい。
receiving file list ... rsync: change_dir "/home/ec2-user/var/www/html" failed: No such file or directory (2)
ちなみに、以下のエラー群も、ファイルのオーナーとかパーミッションが問題なのかなぁとか悩まされたけど、結果パスが違うだけだった・・。
rsync error: some files could not be transferred (code 23) at main.c(1298) [receiver=2.6.8]
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
この辺いまだに理解してない。EC2 側のホームディレクトリの設定がおかしいのか、まぁ何かがおかしいんだろうけど。
4.mysqldump でデータベースをダンプ
EC2 にログインしている状態で、以下のコマンドを。
$ mysqldump --default-character-set=binary -h host -u user -p dbname > dump.sql
host(Endpoint) , user , password は RDS のね。って私が RDS 使ってただけですけれども。
んで、.sql を作成できたら、ダウンロードしてローカルにバックアップしつつ、ロリポップサーバーの適当なところにアップロードしておく。
EC2からダウンロード
$ scp -i key.pem user@host:dump.sql dump.sql
ロリポサーバーへアップロード
$ scp -P2222 -r dump.sql user@host:~/
・・・って、作業して今ブログ書きながら思ったけど、先に mysqldump してから、rsync したらいんじゃねーかと
ちなみにロリポップの FTP ツールだと、「1ファイル10MB までアップロード可能」ってことで、ダンプしたデータをアップロードするのに使えないっす。
注意点:EC2 のホームディレクトリのフルパス
こんなところで躓くの私くらいなもんでしょうけど、mysqldump するとき、
$ mysqldump --default-character-set=binary -h host -u user -p dbname > dump.sql
wpdump.sql: 許可がありません
とかいって、なんなのって。
俺的に許可してんだけど、なんなのって。
ディレクトリのパーミッション確認したり、EC2 の Security Group に mysql 追加するべき!?とか色々悩んだ結果
今度は rsync と違って
/var/www/html/
じゃなくて
/home/ec2-user/var/www/html/
でコマンド叩かないとファイルが作れないらしい。昨日5時間も逆の問題でハマったから、思考が完全に停止してた。
ちなみにリダイレクト”>” なんで、リダイレクト以降は sudo しても意味ない(sudo 権限ではない)ってのも今回初めて知った。
5.ダンプした MySQL データをロリポデータベースへインポート
っとその前に、ロリポップ側で mysql の DB を作成しておく。
–>ロリポップ!ユーザー専用ページ – データベース選択
RDS の時と同じバージョンを選択できなかったけど、無いものは仕方ない。無いんだもの。でもメジャーバージョン一緒だから大丈夫だろってことで。
で、以下のコマンドでインポート。
$ mysql -u user -p dbname < dump.sql
結果、文字化けとかなかった。よかった!
6.wp-config.php の設定変更
あとは、以下を書き換えてあげればだいたい終わり。
// ** MySQL 設定 - こちらの情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'database_name_here');
/** MySQL データベースのユーザー名 */
define('DB_USER', 'username_here');
/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'password_here');
/** MySQL のホスト名 */
define('DB_HOST', 'localhost');
WordPress の構成(設置位置)を変更した、または元々以下記述を wp-config.php にしていた場合など、以下を追記・編集してあげたりするとちゃんと表示ができると思う。
define('WP_HOME','http://www.example.com');
define('WP_SITEURL','http://www.example.com/wordpress/');
define を使わずに、DB を修正する方が望ましいです。
参考:WordPress にログインできない。間違えて設定したサイト URL を phpMyAdmin から修正する
後は必要に応じて独自ドメインの設定とかで、おわりー。
[…] WordPress の引っ越し。AWS EC2 + RDS から ロリポップ チカッパプランへ | yuichonで、引っ越しした際に、パーミッションの設定を見直す必要があったのですが、その時に使った便利なコマンド […]
[…] 同期というか、サーバー引っ越しの際に使ったコマンドのメモ。 […]
[…] 同期というか、サーバー引っ越しの際に使ったコマンドのメモ。 […]