LoginSignup
5

More than 1 year has passed since last update.

WordPressのドメイン変更を含むサーバー移行のまとめ

Last updated at Posted at 2021-08-28

はじめに

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というテーブルのsiteurlhomeカラムに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情報が記載されていますので、修正

wp-config.php
/** 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レコードの登録は必須です。

移行先がレンタルサーバーの場合、こちらの記事を参考にしてください

スクリーンショット 2021-12-17 17.54.40.png

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5