はじめに
WordPressやLaravelのサーバー移行をすることが多くあったため、移行方法についてまとめました。
やることは以下の2つです。移行元のファイルを修正し、修正したファイルを移行先に移行します。
・DBであるsqlファイルの修正
・サーバーのディレクトリ内のファイルの修正
前提条件
-
https://hoge.com
からhttps://fuga.jp
にドメインを変更 -
WordPress
もしくはLaravel
を使用 - 移行元と移行先どちらもDBは、MySQL
- サーバーは、
レンタルサーバー
もしくはAWS EC2(DBはRDS)
流れ
①移行元のsqlファイルをエクスポート
②sqlファイルを修正
③移行元のサーバーのディレクトリをローカルにコピーする
④移行元のサーバーのディレクトリ内のファイルを修正
⑤修正したsqlファイルを移行後のサーバーにインポート
⑥修正したディレクトリを移行後のサーバーにアップロード
⑦移行先のドメインのDNS設定
①移行元のsqlファイルをエクスポート
phpMyAdminやadminerでDB管理をしている場合、エクスポート機能がありますので、移行後のサーバーで使用するsqlファイルをエクスポートします。
DB管理ツールがなくサーバーがAWSを使用している場合は、こちらを参考にします。
EC2踏み台サーバーを経由して、RDSのDBを別のRDSのDBに移す方法
コマンドでエクスポートする場合は、移行元サーバーにssh接続した状態で、mysqlをインストールし、mysqldumpでエクスポートします。
$ sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
$ sudo yum install mysql
$ mysql --version
mysql Ver 8.0.18 for Linux on x86_64 (MySQL Community Server - GPL)
# レンタルサーバー
$ mysqldump -u USER_NAME -p -h HOST_NAME DB_NAME > OUTPUT_FILE_NAME
# AWSのRDS
$ mysqldump -u 別のRDSのユーザー名 -p -h RDSのエンドポイント DB名 > OUTPUT_FILE_NAME
OUTPUT_FILE_NAME は、例えば /var/tmp/dump.sql
にする
②sqlファイルを修正
移行先では、https://fuga.jp
のドメインを使用するため、エクスポートしたsqlファイルを修正します。
MySQLWorkBench
などを使用し、以下の箇所を検索と置換を用いて修正します。
・URLの修正
WordPressでは、optionsというテーブルのsiteurl
とhome
カラムにURLがありますので、修正します
・ドメインの修正
hoge.com
を修正をします。ただし、メールアドレスなどにhoge.com
が使われている可能性がありますので、置換するときは、必ず一つ一つ確認しましょう。
・DB名とDBユーザー名を修正
(特に、レンタルサーバーでは変更される場合が多いです。)
修正後、DB管理ツールを用いて移行先にインポートします。
インポートするファイルはgzip化する必要があります。
$ gzip 〇〇.sql
③移行元のサーバーのディレクトリをローカルにコピーする
移行元がレンタルサーバーやAWS EC2の場合、SFTP接続でローカルにダウンロード可能で、安全かつ転送時間が短縮することができます。
SFTP設定で必要な、ホスト名、ユーザー名、サーバーアドレス等は、レンタルサーバーのマニュアルを参考にしましょう。
SFTP接続できない場合、以下のコマンドで移行元ディレクトリをローカルディレクトリにコピーできます。
# ローカル
$ scp [オプション] [鍵].pem ユーザ名@サーバのホスト名(or IPアドレス):コピー元パス 保存先パス
$ scp -r -p -i [鍵].pem ec2-user@xxx.xxx.xxx.xxx:/usr/share/nginx/html/hoge ./wordpress
上記ではIPアドレス:xxx.xxx.xxx.xxx
のhogeディレクトリをローカルのカレントディレクトリに保存されます。
-p
:コピー元のタイムスタンプやパーミッションを保持する
-r
:ディレクトリごと再帰的にコピーする
Permission deniedが出た場合
原因は2つあります。ひとつは、コピー先とコピー元のディレクトリが間違っている可能性があります。
もうひとつは、権限の問題です。
コピー元の権限とコピー先のディレクトリの権限を変更します。
$ scp -r -p -i [鍵].pem ec2-user@xxx.xxx.xxx.xxx:/usr/share/nginx/html/hoge ./wordpress
scp: /usr/share/nginx/html/hoge: Permission denied
$ chmod 755 ./wordpress
# サーバにssh接続して、コピー先のディレクトリの権限変更
$ chmod 755 /usr/share/nginx/html/hoge
権限755がだめならひとまず777に変更してみましょう。
④移行元のサーバーのディレクトリ内のファイルを修正
ローカルにコピーしたディレクトリは、以下の箇所に対して、Visual Studio Code等のエディターで、検索と置換を用いて修正します。
・URLを修正
内部リンクとして、ドメインが指定されていることがあります。
また、https://hoge.com
だけでなく、http://www.hoge.com
などのhttp
の場合やwww
がある場合もあるため、同じく修正します
・ドメインを修正
hoge.com
を検索し、一つ一つ確認しながら修正します。
・Laravelの場合、.envファイルにURLやDB情報が記載されていますので、修正
APP_URL=https://fuga.jp
DB_CONNECTION=mysql
DB_HOST=host_name_here
DB_PORT=port_here
DB_DATABASE=database_name_here
DB_USERNAME=username_here
DB_PASSWORD=password_here
・WordPressの場合、wp-config.phpファイルにDB情報が記載されていますので、修正
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'database_name_here' );
/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'username_here' );
/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'password_here' );
/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );
$table_prefix = 'wp_';
・エラーログファイル等はフルパスのため、修正する
サーバーに移行するディレクトリ名をhoge
からfuga
に変更する場合、エラーログファイル等はフルパスになっているため、fuga
に置換します。
例:var/www/user_html/fuga/wp-content/plugin/error.log
⑤修正したsqlファイルを移行先にインポート
phpMyAdminやadminerでDB管理をしている場合、インポート機能がありますので、移行後のサーバーに修正したsqlファイルをインポートします。
DB管理ツールがなくサーバーがAWSを使用している場合は、こちらを参考にします。
EC2踏み台サーバーを経由して、RDSのDBを別のRDSのDBに移す方法
コマンドでインポートする場合は、移行先サーバーにssh接続した状態で、mysqldumpでインポートします。
# レンタルサーバー
$ mysql -u USER_NAME -p -h HOST_NAME DB_NAME < OUTPUT_FILE_NAME
# AWSのRDS
$ mysql -h RDSのエンドポイント -u 別のRDSのユーザー名 -p DB名 < OUTPUT_FILE_NAME
OUTPUT_FILE_NAME は、例えば /var/tmp/dump.sql
です
⑥修正したディレクトリを移行後のサーバーにアップロードする
修正したディレクトリをSFTP接続で移行先のサーバーにアップロードします。
SFTP接続できない場合、以下のコマンドでローカルディレクトリを移行先ディレクトリにコピーできます。
# ローカル
$ scp [オプション] [鍵].pem コピー元パス ユーザ名@サーバのホスト名(or IPアドレス):保存先パス
$ scp -r -p -i [鍵].pem test ec2-user@xxx.xxx.xxx.xxx:/usr/share/nginx/html/hoge
上記では、ローカルのtestディレクトリをIPアドレス:xxx.xxx.xxx.xxx
のhogeディレクトリ内に保存します。
移行先のドメインのDNS設定
移行先のドメインを購入していない場合、お名前ドットコム等で購入し、レンタルサーバーやAWSの場合Route53で、ドメインとサーバーを結びつける作業は必要です。
AレコードとNSレコードの登録は必須です。
移行先がレンタルサーバーの場合、こちらの記事を参考にしてください
NSを変更後、移行前のDNSデータのキャッシュがクライアントにあるので、キャッシュが切れた後、移行後のNSが反映されます。
digコマンドで確認できます。サイトはこちら↓
サーバー移行後、WEBページがうまく表示されない場合
移行前と移行後で、ミドルウェアのWEBサーバーソフトウェア(ApacheとNginx)が異なる場合
基本的な変更は以下が参考になりました。
apacheからnginxへ
nginx + php-fpm でエラーが出て動かない場合の確認箇所と対処方法
nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する
また、エラーログ等を見ることも大切です。
ssh接続し、以下のコマンドでエラー原因の特定に役立ちます
nginxのログファイル内を確認
$ sudo nano /var/log/nginx/error.log
nginxの状態確認
$ sudo systemctl status nginx
nginx設定ファイルのチェック
$ nginx -t
修正後、無停止で再起動
$ sudo nginx -s reload