今までさくらインターネットのVPSでwordpressを寝かしてきたけど、AWSのサービスをいろいろ使ってみたくなったんでさくらを解約して引っ越してみた。
いろいろハマったりしたこともあったんで、一応書いておく。
さくらのサーバーからデータを取得
必要なのは、
- wordpress一式(phpファイルとか)
- データベースの中身
の2点。
wordpressのファイルバックアップ(サーバーからサルベージ)
さくらのレンタルサーバは「スタンダード」という契約になってた。
OSはFreeBSD。
zipコマンドもtarコマンドもなかったので、WinSCPあたりでごっそりと持ってくることにした。
アップロードした画像とかがたくさんある場合は圧縮してから持ってきたほうがいいと思う。
持ってくるのはapacheの公開ディレクトリのうちwordpressの入ってるところをごそっと。
僕の場合はホームディレクトリ直下にwwwがあってそこにwordpressがあった。
wordpressセットみたいなやつで契約したんだったかな?
ともあれコレを使ってるようなのでWinSCPで接続し、ローカルにコピーした。
データベースのバックアップ
さくらで契約しているDBはphpMyAdminが使えるのでそれでバックアップを取得した。
phpMyAdminでログインし、エクスポートメニューを選択。
対象はwordpressで使用しているDBだけでよい。
インストール時に決めたDB名であるはず。
それを選んで、SQL形式を選んでエクスポート。
僕の環境ではUTF-8をつかってるはずなので、エンコードはnonにしておくとUTF-8で出るはず。
AWSの準備
EC2とRDSは普通にやればいいので省略。
セキュリティグループのインバウンド設定でちゃんとRDSを開けることだけ気をつけておく。
(今はとりあえず)対象のIPをEC2でつくったインスタンスのプライベートIPにしておく。
Apacheのインストール
yumを使うのでルートになってから行う
sudo su - yum install httpd.x86_64 # 証明書をいずれ使うかもしれないし、オレオレ証明書を使ったりするかもしれないので一応。 yum install mod_ssl.x86_64
/etc/www/htmlがドキュメントルートになっているので、バックアップをしておいたものをここにコピーする。
MySQLクライアントのインストール
# DBに接続するクライアント yum install mysql56.x86_64
PHPのインストール
yum install php # マルチバイト文字を扱うのでこれもインストール yum install php-mbstring
wordpressの配置と作業
接続先DBの設定
wordpressのルートにwp-config.phpがあるのでコレを書き換える。
// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** // /** WordPress のためのデータベース名 */ define('DB_NAME', 'databasename'); /** MySQL データベースのユーザー名 */ define('DB_USER', 'myuser'); /** MySQL データベースのパスワード */ define('DB_PASSWORD', 'mypassword'); /** MySQL のホスト名 */ define('DB_HOST', 'somehost');
ここをRDSの設定に従って書き換える。
ホスト名にはRDSのエンドポイント(ポート番号を含む)を設定すればいい。
データベースのデータ移行
保存していたSQLを開き、内容を確認する。
といっても、最初の方にある次の2箇所だけ。
CREATE DATABASE ~~~~; USE '';
この2文。
まず、CREATEはしなくていいので削除する。
USEのデータベース名を、RDS作成時に設定したデータベース名にする。
すでにmysqlクライアントは入れてあるのでコマンドでログインする。
パスワードが毎回聞かれるのがめんどくさいので、ルートに「.my.cnf」というファイルを作成する。
[client] password="DBのパスワード"
これでmysqlコマンド実行した時にパスワードを入れなくていい。
mysql -u USERNAME -h HOSTNAME -P PORT_NUMBER
で接続。
ホームディレクトリに先ほどのSQLファイルをdata.sqlという名前で置いたので次のコマンドで実行される。
source ~/data.sql
その他環境周りでやったこと
パーマリンクを使う場合の設定
トップページは表示されるけど、カテゴリリンクや記事のタイトルとかをクリックしても404が出て表示できなかった。
どうやらwordpressのパーマリンクはmod_rewriteを使うようで、その設定がデフォルトで有効になっていなかった。
AWSのapacheはそういうものらしい。
なので、httpd.confの設定を一部書き換える。
ドキュメントルートのDirectoryディレクティブ内にある、AllowOverrideを次のように書き換える。
AllowOverride NONE
↓
AllowOverride All
これがhtaccessによるrewriteの設定ウワガキを許可する魔法らしい。
Apache再起動してサイトを見るとコレで行けてた。
このあと滅茶苦茶アクセスした。
本体やプラグインの更新でFTP設定の入力を求められる場合
wordpress(apache)の実行ユーザとディレクトリの所有ユーザの権限があってない場合に起こる。
httpd.confにUserやらGroupの設定があるのでそれを見る。
僕は両方共apacheになっていた。
つまり、実行ユーザはapache:apacheになる。
なので、ディレクトリ(たぶんroot:rootになっている)の実行権限を変える
# wordpressのディレクトリで実行する。 chown -R apache:apache *.php
プラグインの検索で500エラー
あるいは、プラグインを手動インストールできたけど、有効化でエラー。
PHPのインストールで書いたけど、マルチバイト文字列のモジュールが必要
yum install php-mbstring
ドメインが変わるなどでURLが変わる場合
select option_value from wp_options where option_name='siteurl'; update wp_options set option_value = 'http://newurl' where option_name = 'siteurl';
だいたいこれらをやることで僕の環境は移行できた。