読者です 読者をやめる 読者になる 読者になる

kamasukun’s blog

カマスがカマすブログ web, オススメ, 海外生活などいろいろ書きます。家賃分7万円稼げるまでブログは辞めません!!

Wordpress EC2 AMIでバックアップを作ってステージング環境立上げまで

ウェブ プログラム AWS サーバー AMI

「あ〜腹減った〜」(ライゼン)

どうもカマスです。

久しぶりってかAWS系は初めてかw 書きマーース

なんか検索しても全然出てこなかったので、備忘録がてらに書いてみます。

やりたかったこと


EC2上で作ったWordpressのサイト(ここでは https://example.com としておく)をAMIでバックアップを取ってそれをさらに新しいインスタンスとして立ち上げてステージング環境を作りたいなーって話。あ、ステージングって言うのは副機とかバックアップ機とか言うやつ。要は本番を丸っとコピーしてもう一個サーバを作ろうってこと。

よくAMIまでの作り方はたくさんあるんだけど、一連で詳しく載ってないんだよね〜 1番の問題はドメインが変わるからどうやって変えるの?ってところ。

あとやっていってつまづいたところも数箇所あったので記載しておきます。

状況と環境

話せる範囲で書きます。

本番環境
SSL のアドレス https://example.com
・自作でwordpressを入れた。(Amimotoは使っていない)
・Nginxとphp-FPMとMySQL

ステージング環境
SSLなし http://staging.example.com (EC2インスタンスのパブリックDNSを使ってもok)
・AMIで作成

私自身はちょっと事情があってEC2のパブリックDNSを代用しました。本当はサブドメイン使った方が良いんだけど別に公開するわけじゃないし良いかなと。あとすぐ消すし。

もしサブドメイン使う場合はRoute53とかで事前に作っておくんだよ!!


手順

  • AMIでイメージ(バックアップ)を作成
  • AMIからインスタンス(新しいサーバ)を作成
  • Nginxの修正
  • wp-config.phpを一時修正
  • SEARCH REPLACE DBを入れるためにFTP接続
  • SEARCH REPLACE DBでドメイン変更
  • ログイン確認とインデックス外し


こんな感じ、では早速やっていきましょ〜ーーー

AMIでイメージ(バックアップ)を作成

これはたくさん参考サイトがあるからサクッとやっちまいます。

はいEC2開いて〜

AMIを作りたいインスタンス選択〜

アクション押して〜

イメージ押して〜

イメージ作成押して〜

f:id:kamasukun:20161209145430p:plain

イメージ名テキトーに書いて〜

イメージの説明テキトーに書いて〜

再起動しないにチェック!しない奴はバカーーーー

f:id:kamasukun:20161209145900p:plain

DONE!

はい次ー

AMIからインスタンス(新しいサーバ)を作成

ここもサクサク行っちゃうよ〜〜〜

はいAMIクリック〜

さっき作ったイメージ選んで〜

作成ポン!!

f:id:kamasukun:20161209150135p:plain


あとは今までインスタンス作ったことある人なら流れは同じなので割愛。


ちなみに私の本番環境はt2.smallで今説明しているステージング環境はt2.microで安いのを指定しています。

はい、そしたらインスタンス出来上がってるはずだからインスタンスへGO!!

*注意:もしElastic IPを割り振る時はインスタンスがちゃんと出来上がってからここで設定してね!


Nginxの修正


このままだとブラウザーでアクセス出来ないので、ターミナルでNginxを編集します。

まあこれはそれぞれ違うと思いますが私の場合、本番環境がSSLを使っているものでそれを削除(コメントアウトしなきゃいけない。

これ全部コメントアウトします。
編集ソース /etc/nginx/nginx.conf

    server {
        listen       443 ssl;
        listen       [::]:443 ssl;

        server_name   .example.com;

        server_name  localhost;
        root         /usr/share/nginx/html;
        root        /var/www/wordpress;

        ssl_certificate    /etc/nginx/ssl/cert/*****.pem;
        ssl_certificate_key    /etc/nginx/ssl/******.key;

        ssl_certificate "/etc/pki/nginx/******.crt";
        ssl_certificate_key "/etc/pki/nginx/private/******.key";
        # It is *strongly* recommended to generate unique DH parameters
        # Generate them with: openssl dhparam -out /etc/pki/nginx/******.pem 2048
       ssl_dhparam "/etc/nginx/ssl/******.pem";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP;
        ssl_prefer_server_ciphers on;

add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';


続きまして〜 ステージング環境のドメインをぶっ込みます。
編集ソース /etc/nginx/nginx.conf

server {
    listen 80;
    server_name .staging.example.com ; #(パブリックDNSでもいいよ〜 http:// はきってね!)

       location / {
        root         /var/www/wordpress;
 if ($request_filename ~* ^.*?\.(eot)|(ttf)|(woff)|(svg)|(otf)$){
             add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "POST, GET, OPTIONS";
       add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";
       add_header Access-Control-Allow-Credentials true;
   }
        try_files $uri $uri/ @wordpress;

        }


location ~ \.php$ {
            alias /var/www/wordpress;
    try_files $uri @wordpress;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            include fastcgi_params;
        }

location @wordpress {
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME  /var/www/wordpress/index.php;
        include       fastcgi_params;
    }
}

あの〜rootとか自分の環境にちゃんと合わせね!


ではNginxを再起動

# service nginx restart

wp-config.phpを一時修正

このままだとまだ設定したドメインにアクセスできないはず。なので、wordpressのwp-config.phpで臨時的にドメインを変えましょう。

wp-config.phpの1番下に貼り付け

define('WP_HOME','http://staging.example.com(パブリックDNSでもok)');
define('WP_SITEURL','http://staging.example.com(パブリックDNSでもok)');


これだけだとwp-login.phpにはアクセスできないはず・・・

さあお次はWordpressのデータベース(DB)を変更しましょー まだもうちょっとだけ続くぞい!

SEARCH REPLACE DBを入れるためにFTP接続

これクッソ便利!だけど危険! なので大事に扱ってね! そして使い終わったら削除しておいたほうがいい

何をするものかって言うと、DBにあるデータをサーチしてリプレイス(痴漢いや置換)してくれるツール。画像のURLとか結構たくさんあるから面倒くさいよね〜でもこれなら一発!

ここからダウンロードしてね。

Database Search and Replace Script in PHP / Interconnect IT – WordPress Consultants, Web Development and Web Design

んで解凍しましょう。

f:id:kamasukun:20161209154118p:plain


ではソースをFTPでステージング環境にアップします。

FTPツールはCyberduckを使用しています。
ログイン!!
f:id:kamasukun:20161209153540p:plain


で全部ソースが入ったらそのソースたちはWordpress配下に移動させます。

もしwordpressの場所が

/var/www/wordpress

だったら

/var/www/wordpress/Search-Replace-DB とディレクトリーを作って入れ込みましょう。

ファイルの移動はmv コマンドを調べてね!

で移動されたファイルたちの所有者をnginxに変更

chown -R nginx:nginx ディレクトリー名(ここはSearch-Replace-DB)ってやればその配下のファイルたちも全部変わる(ちょっと気をつけてね)

f:id:kamasukun:20161209154605p:plain


そしたらhttp://staging.example.com/Search-Replace-DBへアクセス。

こんな画面出てくるかな〜?
f:id:kamasukun:20161209154953p:plain

下の方にボタンが幾つかあるけど、基本的にはdry runとlive runで大丈夫かと思う。

dry run は置換は行わないで検索対象を探して、各テーブルに何件出たか教えてくれる
live run は実行になるので、必ずdry runで確認してOKな場合にlive runをしよう!


ちなみにテーブル選択もできるので選択したい場合は select tableにチェックしてみて。あともう使わないと思ったらこのツールは削除することをお勧めします。




そんでさっきwp-config.phpに入れ込んでいたdefineをコメントアウト(削除でもok)

//define('WP_HOME','http://staging.example.com(パブリックDNSでもok)');
//define('WP_SITEURL','http://staging.example.com(パブリックDNSでもok)');


出来たらデータベースのすべてのドメインがステージング環境に入れ替わっているはずなので〜


http://staging.example.com/wp-login.phpにアクセスできるかチェック!



終わり!!


最後につまづいたところがあって・・・

上記が終わった後にURLにアクセスできるんだけど、画像が全く読み込まれない404事件が発生。

調べても調べてもよくわからんかったんだけど原因はnginxの設定だった

本番環境で expire の設定をしていたのがダメだったらしい。なのですべてコメントアウトをした。

     #   location ~ .*\.(jpg|gif|png|css|js|ico) {
     #       expires 10d;
     #   }


そしたら直った!! こいつのせいで1時間くらい食いましたな。


あともう一個、先にも言った通りステージング環境なので、本番環境よりもスペックの低いt2.microを使用してる。
そのせいで、wordpressが落ちるというか作業した瞬間表示が出来なくなってしまった。

やはりスペックが低いせいでphp-FPMがの処理が重くなっていた。

これは下記のrhasmさんのお力を頂きました。これで解決した。ありがとうございます。

blog.rhasm.net



さーて今日は花金!!何食うかな〜〜あ、バンド練習だった〜〜!ギターひこ