かれこれこのブログも開設してからまもなく10ヶ月が経とうとしています。
以前軽く書いたことがあるのですが、このブログはAWSのEC2インスタンス上に作成されています。
しかも、無料利用枠内(限られたリソースであれば12ヶ月は無料利用できる)です。
そもそもこのブログはお金をかけない、というのが出発点で、
そのためにApache, MySQL, PHP, WordPressという選択をしているわけなので、
12ヶ月を過ぎて費用が発生するのは、私の主義に反します(笑)。
余談ですが、このブログ、かかっているのはドメイン取得にかかる
年に数百円の費用だけです(無論、私のかけた工数を費用にいれなければ、ですが)。
というわけで、再度AWSのアカウントを新規作成して、
そこでまたインスタンスを立ててブログを移行しよう!
ということを思いつきました。
むろん、他のレンタルサーバの方がAWSよりも安いので、
そっちにして有料利用、というのもなくはなかったのですが、
まあ別に無理してAWS以外にすることもなかろう、と。
というわけで、2016/5/2現在、このブログは、
第2アカウントで作ったインスタンス上で動いています。
その移行の時に作った手順を公開します。
インスタンスの作成についてはAWS特有のものになりますが、
インスタンスを作成した後の手順はどのクラウドサービスでも(物理サーバでも)同じなので、
SAKURAなどを利用されている方でも参考になると思います。
さて、では早速手順に入っていきましょう。
○AWSでのインスタンス作成
AWSでアカウントを作成する。
登録にはメールアドレス、クレジット番号の登録のほか、有効な電話番号が必要。
(電話でのPIN入力による認証がある)
AWSのマネジメントコンソールに接続し、EC2を選択。
EC2ダッシュボードに接続できるので、「インスタンスの作成」を選択。
以下、情報を入力していく。
ストレージの追加画面では、
サイズを30GB(無料利用枠の最大値)に設定。
セキュリティグループの設定では、WEBサーバとして動作させるために
80番ポートのINBOUND接続を通してやる必要がある。
タイプでHTTPを選択し、送信元は任意の場所とする。
キーペア作成のポップアップでは、
「新しいキーペアの作成」を選択し、キーペア名を指定。
キーペアのダウンロードでpemファイルをダウンロード。
pemファイルを利用することで、AWSに接続できる。
このpemファイルの再ダウンロードは不可だそうなので、
紛失には気をつける。
当然外部への漏洩はより致命的なので、セキュアな管理が必要。
インスタンスの作成が開始される。
念のため請求額の不意な高騰に備えて、
請求額のアラートを設定しておく。
請求アラートを受け取る、にチェックをし、請求アラートを管理する、をクリック。
アラームの要約、から請求アラームを作成する、をクリック。
適宜限度額と通知の送信先を入力し、
アラームの作成。
登録したメールアドレスにメールが送られるので、そのメールからconfirmを行う。
設定を保存し、EC2ダッシュボードへ戻る。
右上のユーザ名と、ロケーションが「東京」であることを確認。
作成したインスタンスが表示されているはずなので、
「インスタンスの状態」がrunningになっていることを確認。
ここまでで、インスタンスの作成は完了。
次はインスタンスへの接続。
○インスタンスへの接続
先ほどダウンロードしたpemファイルを使用する。
こんなbatファイルを作成して、実行すれば接続できる。
start “” “C:\Program Files (x86)\teraterm\ttermpro.exe” インスタンスのパブリックIP /ssh2 /auth=publickey /user=ec2-user /keyfile=”PEMファイル名へのパス”
(無論、必要に応じてTeratermのプログラムパスは修正する)
接続できたら、rootユーザになる。
sudo su - (rootにパスワードはかかっていない) passwd (任意のパスワードを設定)
SELINUXをOFFにする。
setenforce 0 vi /etc/selinux/config 変更点: SELINUX=Enforcing を SELINUX=disabled に変更。
これで最低限のインスタンスへの接続は確立。
○ミドルウェアインストール
今回導入する必要があるのは以下のミドルウェア。
Apache
MySQL
PHP
まずはソフトウェアを入れてしまう。
まずは便利ツールから。
yum install -y wget yum install -y mlocate yum install -y zip yum install -y unzip
続いてミドルウェア群
yum install -y httpd yum install -y php yum install -y php-mysql
MySQLはyumでは入れられないので、パッケージをダウンロード。
http://dev.mysql.com/downloads/mysql/
で、プラットフォームを選択(今回はRed hat)
いちいちパッケージを全部選んでくるのは面倒なので、
Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit), RPM Bundle
をみつけて、右のdownloadをクリック。
次の画面では、下のほうにある、「No thanks, just start my download.」
のリンクをコピーして、
サーバ上でwgetして展開。
wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.12-1.el7.x86_64.rpm-bundle.tar tar xvf mysql-5.7.12-1.el7.x86_64.rpm-bundle.tar
MySQLのインストール(無論パッケージのバージョンは適宜修正する)。
yum install -y perl rpm -Uvh mysql-community-libs-5.7.12-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.12-1.el7.x86_64.rpm mysql-community-common-5.7.12-1.el7.x86_64.rpm mysql-community-client-5.7.12-1.el7.x86_64.rpm mysql-community-server-5.7.12-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.12-1.el7.x86_64.rpm yum localinstall ./mysql-community-server-5.7.12-1.el7.x86_64.rpm
要らなくなったMySQLバイナリは容量を圧迫するので削除。
rm -rf mysql*
続いて、MWの設定変更。
Apache
ドキュメントルートを修正。
vi /etc/httpd/conf/httpd.conf 変更点: #ServerName www.example.com:80 の行直後に、 ServerNameにブログのドメイン名を入力。 ※例えばこのサイトなら、 ServerName masato.ushio.org http://masato.ushio.org へのアクセスを http://masato.ushio.org/blog にリダイレクトするため Redirect /index.html http://masato.ushio.org/blog/ をファイル末尾に追加。 IfModuleディレクティブのdir_moduleについての項で、 DirectoryIndexにindex.phpを付け加える。 (不要の可能性あり)
MySQL(5.7を想定)
MySQLを起動して接続できる状態にする。
service mysqld start cat /var/log/mysqld.log | grep -i temporary (パスワードをメモっておく) mysql -uroot -p (先ほどのパスワードを入力) set password for 'root'@'localhost'='Welcome1!'; (Welcome1!は仮パスワード) uninstall plugin validate_password; set password for 'root'@'localhost'='rootユーザのパスワード'; create database wordpress; grant all on wordpress.* to 'wordpress'@'localhost' identified by 'wordpressユーザのパスワード'; exit
PHP
設定不要。
ここまででミドルウェアのインストールは完了。
○WordPressインストール
データの引越しでまるごともってくるので不要。
まっさらの状態でのインストールをしたいのであれば、
後述の「付録:WordPressのまっさらインストール」を参照。
○データの引越し
mysqldumpとファイル丸ごとコピーで対応。
移行元で
mysqldump -uroot -pパスワード --databases wordpress --triggers --routines --events --single-transaction > /tmp/dump.sql cp -rp /var/www/html/blog /tmp/ zip -r /tmp/blog.zip /tmp/blog chown ec2-user:root /tmp/dump.sql chown ec2-user:root /tmp/blog.zip
dump.sqlとblog.zipをローカルPCにダウンロードし、
移行先にアップロード。
移行してきたWordPressディレクトリを配備。
unzip blog.zip mv tmp/blog /var/www/html/ chown -R apache:apache /var/www/html/blog
MySQLダンプファイルをインポート
mysql -uroot -pパスワード < dump.sql mysql -uroot -pパスワード -e'flush privileges'
Apache再起動
service httpd restart
○動作確認
間違いやすいので注意。
まず、自分の作業用PCが新規サーバにアクセスするように、
作業用PCのhostsファイルを修正する。
hostsファイルは管理者権限がないと修正できないため、
メモ帳を管理者として開き、ここから
C:\Windows\System32\drivers\etc\hosts
ファイルを開く。
書くべきエントリは通常の書式どおりで、
新しいサーバのIP ドメイン
である。
このサイトだと、下記のようになる。
54.238.154.121 masato.ushio.org
これで、masato.ushio.orgにブラウザからアクセスすると、
新サーバの方にアクセスが向いている。
(これをしないと、ローカルPCがDNSを確認しに行ってしまい、
現在上位のDNSサーバに登録されている旧サーバの方で
名前解決されてしまうため、旧サーバにアクセスしてしまう)
この状態で、移行が正しくできているかどうか確認。
また、URLがIPに対して書かれていたりすると、
旧サーバのIPめがけて情報を取りにいってしまうので、
そういったものを修正するため、
Search Regexプラグインで検索と置き換えをする。
「プラグイン」→「新規追加」から、
Search Regexを検索。
今すぐインストールを選択し、インストール後に「プラグインを有効化」をクリック。
「ツール」→「Search Regex」をクリック。
ここで、適宜置き換えを行う。
○残作業
search consoleを利用している場合、
ドキュメントルートにgoogleのcertification用のファイルがおいてあるはず。
これもコピーしておいておく必要がある。
cat /var/www/html/google*.html ll /var/www/html/google*.html
これを新サーバで作成。
vi /var/www/html/旧サーバのファイル名と同じファイル名 変更内容: 先ほどの cat /var/www/html/google*.html の結果を記載。
これでサービス切り替えの準備は完了。
あとは上位DNSサーバでの名前解決設定を
旧サーバのIPから新サーバのIPに切り替えれば、
移行完了。
旧サーバは停止させてかまわない。
作業完了したら、hostsファイルのエントリを元に戻しておくこと。
以上!
付録:WordPressのまっさらインストール
マニュアルはこちら。
http://wpdocs.osdn.jp/WordPress_%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
WordPressの最新版バイナリをダウンロード、展開
wget https://ja.wordpress.org/latest-ja.tar.gz tar xvzf latest-ja.tar.gz
作成されたwordpressディレクトリ直下のwp-config-sample.phpを編集
vi wp-config-sample.php 変更点: define('DB_NAME', 'database_name_here'); のdatabase_name_hereをwordpressに変更。 define('DB_USER', 'username_here'); のusername_hereをwordpressに変更。 define('DB_PASSWORD', 'password_here'); のpassword_hereを先ほどのMySQLユーザのwordpressユーザのパスワードに変更。
wp-config-sample.phpをwp-config.phpに改名。
mv wp-config-sample.php wp-config.php
wordpressの中身をドキュメントルート配下に配備。
このサイトでは、実ファイルはドキュメントルート配下のblogディレクトリの下にあるので、
mv wordpress /var/www/html/blog
となる。
権限修正
chown -R apache:apache /var/www/html/blog chmod -R 755 /var/www/html/blog
apacheを起動。
service httpd start
ブラウザで下記にアクセス。
http://インスタンスのIP/blog/wp-admin/install.php (今回はblog配下にWordPressを置いたのでこうなっている)
要求されている項目を入力し、インストール。
これでWordPressのインストールは完了。
○まとめ
正直、かなり面倒でした。
しかし、それは調べたり試行錯誤したりするのに時間がかかる、
というだけで、上記のように手順さえ確立してしまえば、
移行はおそらく2,3時間程度でできると思います。
この手間をかけるだけで、月7000円以上、
年間では90000円近くが節約になると思えば、
安いもの、と思っています。
また1年後にはこの手順を使ってこのブログも移行することになりそうです、、、笑
では、また。