ヤマムギ

growing hard days.

*

Amazon LinuxのNginx+RDS MySQLにレンタルWebサーバーからWordPressを移設する(失敗、手戻りそのまま記載版)

      2015/05/11


nginx_logo copy

勉強のためブログサイトを長らくお世話になったロリポップさんから、AWSに移設することにしました。

環境

移設前

  • ロリポプラン
  • MySQL
  • 多分Apache
  • Word Press
  • Word Press to Dropboxで日次バックアップ

移設後

  • AWS EC2 Amazon Linux
  • AWS RDS MySQL
  • Nginx
  • Word Press

移設先AWS環境の構築

EC2インスタンスの構築

手前味噌ではありますが、「試したい事があるのでAWS でとりあえずAmazon Linuxのサーバを作る」を参照してください。

作成したEC2インスタンスにグローバルIPアドレスを設定

またまた手前味噌ではありますが、「AWS EC2 でインスタンスにIPアドレスを紐付ける」を参照してください。

設定したグローバルIPアドレスを使用して移設用ドメインにAレコードを作成しておく

ここで設定したドメインを仮に tmp.mydomain.com と www.tmp.mydomain.com とします。
TTLは念のため60秒にしておきます。
ちなみに本番ドメインは、mydomain.com と www.mydomain.com の想定です。

Amazon LinuxにNginxをインストールする

MySQLはRDSを使用するのでここではクライアントのみをインストールする

Nginxの設定をする

default.confを設定する

  • mydomain.conf
    server_nameには移設用の仮ドメインを設定します。

※tmpディレクトリは適宜変更してください。

[text]
server {
listen 80;
server_name tmp.mydomain.com www.tmp.mydomain.com;
root /usr/share/nginx/tmp;
location / {
index index.php index.html;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
[/text]

Nginxとphp-fpmを自動起動してサービススタートする

Nginx-Test-Page

ブラウザから確認すると無事Nginxが起動してました。

ついでのphpinfo()も無事確認出来ました。

確認が出来たので、「server_name tmp.mydomain.com www.tmp.mydomain.com;」のtmpを外しておきます。

EC2インスタンスのバックアップ(AMI)を作成する

この時点でEC2インスタンスのバックアップを作成しておきます。

AWS EC2でAMI(Amazon Machine Image)を作成しておく」を参照してください。

Nginx構築まででのハマりどころ

事象

  • index.phpもphpinfo.phpもブラウザで見ると「File not found」の文字が表示されるのみ。
  • /var/log/nginx/error.log を見ると「Primary script unknown」と表示されていた。

対応

/etc/nginx/conf.d/mydomain.conf の下記を修正、追記してnginxサービス再起動

  • [root /usr/share/nginx/tmp;] の記述をserver{のセクションに移動してスコープを変更

RDS MySQLの構築

MySQLはRDSで構築します。

MySQLの構築からEC2からの接続テストまでは、「AWS RDS でMySQLインスタンスを構築する」を参照してください。

MySQL 設定

Databaseとユーザーだけ作成します。

作成するデータベース情報、ユーザー情報、文字コードはバックアップしているwp-config.phpを参照します。
データベース名、ユーザー名、パスワードはwp-config.phpをあわせて変更してもかまいません。

バックアップの確認

さて、WordPress用のユーザーを作ってと思って、バックアップファイルを確認していると、4/25からまともに動いていない事が判明。
WPB2Dを使っているのですが、原因は分からず、そして設定変更しても反映せず、ですので、急遽BackWPUpプラグインをインストールして手動でファイルとデータベースそれぞれのバックアップを作成しました。

データベースリストア用SQLで置換

とにかく変更が発生するものを軒並み検索して置換します。

  • ABSPATH
  • データベース名 など

バックアップしたファイルとデータベースリストア用SQLをDropboxにアップロードして、EC2インスタンスからダウンロードする

ダウンロードした後に解答してファイル群はドキュメントルートディレクトリに移動してしまいます。

wp-config.phpの変更

define('DB_NAME', 'データベース名');

/** MySQL のユーザー名 */
define('DB_USER', 'WordPressのユーザ');

/** MySQL のパスワード */
define('DB_PASSWORD', 'WordPressユーザのパスワード');

/** MySQL のホスト名*/
define('DB_HOST', 'RDSのエンドポイント');

データベースのリストア

※ -pの後はスペースなしでパスワードを続けます
※ sqlファイル名の前は <

今日はここまでです。

ここまで来て「えいっ」ってDNSを変更してみて大失敗してあわてて戻しました。

とりあえずhtaccessをまずなんとかしないとならない、のと、
キャッシュやバックアップを止めてすっきりした状態で移行したい、のと、
ドメイン変更して移行テストして手順を確率してやるべきです。

仕切り直して

バックアッププラグインを無効化する

Dropboxに向けているバックアップもあるので、それらが競合しないように一回止めます。

  • BackWPUpはジョブだけ止めます。
  • WordPress Backup to Dropboxは無効化します。

BackWPUpで手動バックアップを取得

  • 新規ジョブを作成します。
  • 対象は、データベース、ファイル、インストール済プラグインリストです。
  • 保存方法はDropboxにします。
  • スケジュールは手動です。
  • ジョブ一覧から「すぐに実行」で実行します。

BackWPUpでmysqliのエラーが発生する場合

  • PHP 5.4以上にする事で解消出来ました。
  • ロリポップでは、[Webツール]-[PHP設定]から変更出来ます。

AWSでDropboxからバックアップファイルをダウンロードする

展開用ディレクトリを作成して、そこにダウンロードして解凍します。
※ダウンロードしたファイルにはURLコマンドが付いた状態になっているのでダウンロード後、リネームします。

テスト用Nginx環境を作成する

[text]
server {
listen 80;
server_name tmp.mydomain.com www.tmp.mydomain.com;
root /usr/share/nginx/tmp;
location / {
index index.php index.html;
try_files $uri $uri/ /index.php;
if (!-e $request_filename) {
rewrite ^.+?(/wp-.) $1 last;
rewrite ^.+?(/.
.php)$ $1 last;
rewrite ^ /index.php last;
}
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
[/text]

データベースバックアップのSQLを置換する

  • ABSPATHの置換
  • データベース名(任意)を置換
  • URLをテスト用に置換

データベースのリストア

※ -pの後はスペースなしでパスワードを続けます
※ sqlファイル名の前は <

ファイルの移動

wp_config.phpの編集

define('DB_NAME', 'データベース名');

/** MySQL のユーザー名 */
define('DB_USER', 'WordPressのユーザ');

/** MySQL のパスワード */
define('DB_PASSWORD', 'WordPressユーザのパスワード');

/** MySQL のホスト名*/
define('DB_HOST', 'RDSのエンドポイント');

nginx再起動

テスト用ドメインで検証

WordPressの管理画面にログインしてURLを変更する

検証結果

WordPress Popular Postsのサムネイルが表示されなくなった

php-gd がない事が原因でした。
なので、インストールして、php-fprmとnginxを再起動。

検証で行った手順を本番にあわせて実施する

そしてDNSのAレコードを変更して無事に移行完了しました。

この記事は失敗も踏まえて残しますが、正解手順だけの記事も別途作成します。


最後までお読みいただきましてありがとうございました!
【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。

【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。

 - AWS, WordPress , , , ,

ad

ad

  関連記事

Amazon Connectの新規作成からプッシュボタン入力と発信元電話番号をLambdaで処理するまで

とりあえずやりたいことはタイトルに書いたとおり、「電話をかけて、プッシュボタンに …

AWS Lambda KMSを使って環境変数を暗号化、復号化する(Python)

Lambda内で外部APIを使用する場合などをユースケースとして、環境変数をKM …

「X-Tech JAWS 【第2回】~9割のX-Techと1割の優しさで切り拓く未来~」に行ってきました

「X-Tech JAWS 【第2回】~9割のX-Techと1割の優しさで切り拓く …

AtomエディタでEC2のファイルを直接編集する

Webページを編集していてEC2のファイルをvimエディタでさわったりしています …

AWS Organizationsからアカウントを新規作成してみて

AWS Organizationsでアカウントを新規作成することがありましたので …

特定AWSアカウント特定リージョンのCloudFormationスタックを削除するLambda(Python)

目次 やりたいことソースコード やりたいこと 特定アカウント内特定リージョン内の …

LINE BOT AWARDS 2017に応募しました

LINEの友達追加QRです。 動作のご確認にどうぞ LINE BOT AWARD …

JAWS FESTA 2019 Sapporo 参加&当日スタッフ&企業サポーターで!

2019年のJAWS FESTA は札幌です! 今回もありがたいことに、所属して …

WordPressを4.7.2にアップグレード後、ログインしないと表示出来なくなって対応

このブログをWordPress 4.7.2にあげた後、ログインしていないと規則性 …

kintoneに登録されたアカウントの電話番号にGoogleカレンダーの予定をAmazon Pollyが読み上げてTwilioから電話でお知らせする(AWS Lambda Python)

目次 Google Calendar Twilio Reminderkinton …