yamamanx

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レコードを変更して無事に移行完了しました。

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

@yamamanx
開発ベンダー5年、ユーザ企業システム部門通算8年目のSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。

 - AWS, WordPress , , , ,

ad

ad

Message

メールアドレスが公開されることはありません。

  関連記事

Amazon Linux にnodejsとmongoDBをインストールする

EPEL リポジトリを利用してnodejsとnpmをインストールする [cray …

AWS EC2 でインスタンスにIPアドレスを紐付ける

AWS EC2で作ったサーバは何もしなければ起動するたびにIPアドレスが変わって …

MySQL WorkbenchからRDSに接続する

MySQL WorkbenchからAWS RDSのMySQLに接続するために、「 …

JAWS-UG Osaka 第14回勉強会 「DIY」 〜自社内システムを作る側からの物申す〜に参加、運営、登壇しました

先日、JAWS-UG Osaka 第14回勉強会 「DIY」 〜自社内システムを …

WordPressにログインを強制して記事ごとのアクセス制限もする

WordPressを限定された組織内で使いたいとした場合に下記を実現したいと思い …

AWS EC2でAMI(Amazon Machine Image)を作成しておく

前回まででひとまずRedmineを構築するところまで出来たので、念のためスナップ …

「雲勉 第1回【勉強会:新技術好き!】AWSマネージドサービス勉強会」に行ってきました

「雲勉 第1回【勉強会:新技術好き!】AWSマネージドサービス勉強会」に行ってき …

AWS Toolkit for Eclipseをセットアップする

AWSでそろそろ課金がされつつありますので、夜中はインスタンスを自動停止して朝自 …

AWS EC2 インスタンスステータスのチェックで失敗して起動しなくなり復旧

EC2のインスタンスに接続出来なくなったので、AMIから作成してElastic …

AWS EC2 Amazon Linuxにmauticをインストールする(Sendgrid, Nginx, MySQL on RDS)

mauticをAmazon LinuxとNginx,MySQL on RDSにイ …