さくらインターネットからXserverにサーバーを移行してみた

# 背景
インターンをしている企業で、WordPressでサイトを一から作成し、運用を行っています。
今回、**さくらインターネット**から**Xserver**へサーバーを移行したので、手順を書き留めておきます。

# 手順まとめ
#### 1. Xserver（移行先）での事前準備
- ドメインの追加
- SSL設定の追加
- DBの作成
#### 2. さくらインターネット（移行元）のデータをダウンロード
- DBのエクスポート
- サイトデータのダウンロード
#### 3. Xserverにデータをアップロード
- DBのインポート
- サイトデータのアップロード
#### 4. 動作確認
#### 5. ネームサーバー移行

# 1. Xserverでの事前準備
### ドメインの追加
Xserverのサーバーパネルにログインし、【ドメイン設定】>【ドメイン設定追加】からドメインを追加します。
ドメイン名は、移行元（さくらインターネット）のドメイン名と同じものを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1233166/df085147-811e-5735-3bd3-384e4962e9b4.png)
ドメインの反映には最大**24時間**程度かかるので、ドメインの追加は先にやっておいた方がいいです。
参考 ▶️ [Xserver公式ドキュメント:ドメイン設定](https://www.xserver.ne.jp/manual/man_domain_setting.php)

### SSL設定の追加
※上記「ドメインの追加」を行なった際に、SSLを設定していればこの手順はやらなくてOKです。

Xserverのサーバーパネルにログインし、【SSL設定】>【独自SSL設定追加】で、該当のドメインを選択し、SSL設定を追加します。
反映には最大**1時間**程度かかります。

### DBの作成
Xserverのサーバーパネルにログインし、【MySQL設定】>【MySQL追加】からDBを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1233166/e9f4c2ad-f8e5-dc5d-a938-62147f5c3022.png)
次に、【MySQL設定】>【MySQLユーザ追加】からユーザを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1233166/3a1724c1-95af-69ca-0661-118a18e397ce.png)
その後、【MySQL一覧】に移動し、先ほど作成したDBの「アクセス権未所有ユーザ」のところで先ほど作成したユーザを選択し、「追加」をクリックします。
「アクセス権所有ユーザ」のところに作成したユーザが追加されていればOKです。

「**MySQLデータベース名**」「**MySQLユーザID**」「**パスワード**」は後ほど使用するので、控えておいてください。

# 2. さくらインターネット（移行元）のデータをダウンロード
### DBのエクスポート
さくらインターネットのサーバーコントロールパネルにログインし、【Webサイト/データ】>【データベース】>【phpMyAdminログイン】に移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1233166/48c43007-6cc1-c85e-978d-56566d7e35ad.png)
左のタブからエクスポートするDBを選択し、「エクスポート」に移動します。
「エクスポート方法」で「詳細」を選択し、下の方の「生成オプション」で「**DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT / TRIGGER コマンドを追加する**」にチェックを入れ、「実行」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1233166/2069e20f-0d6b-5da5-f0d6-945c72effcc9.png)
`hogehoge.sql`という名前でDBがエクスポートされます。

### サイトデータのダウンロード
ローカルでコマンドを実行してサイトデータをダウンロードします。
ユーザー名は、サーバーコントロールパネルにログインする時のユーザー名を使用してください。
```terminal
# さくらインターネットのサーバーにログイン
$ ssh ユーザー名@ユーザー名.sakura.ne.jp

# WPサイトフォルダに移動
$ cd /home/ユーザー名/www/WordPressサイトフォルダ

# サイトデータを圧縮（wordpress.zipは任意の名前でOKです）
$ zip -r wordpress.zip .

# ログアウト
$ exit

# zipファイルをダウンロード
$ scp ユーザー名@ユーザー名.sakura.ne.jp:/home/ユーザー名/www/WordPressサイトフォルダ/wordpress.zip ./
```

# 3. Xserverにデータをアップロード
### DBのインポート
Xserverのサーバーパネルにログインし、【phpmyadmin】に移動します。
左のタブから作成したDBを選択し、「インポート」に移動します。
「インポートするファイル」でエクスポートした`hogehoge.sql`のファイルを選択し、「実行」をクリックすれば完了です。

もしこの時エラーが出た場合は、エクスポートしたデータの形式が間違っている可能性があるので、エクスポート時のオプションが間違っていないか見直してみてください。

### サイトデータのアップロード
アップロードの前に、`wp-config.php`ファイルを編集する必要があります。
ダウンロードしたサイトデータのzipファイルを解答し、`wp-config.php`ファイルを開いて以下の部分を書き換えてください。
```php
/** The name of the database for WordPress */
define('DB_NAME', 'MySQLデータベース名');

/** MySQL database username */
define('DB_USER', 'MySQLユーザーID');

/** MySQL database password */
define('DB_PASSWORD', 'パスワード');

/** MySQL hostname */
define('DB_HOST', 'ホスト名');
```
「MySQLデータベース名」「MySQLユーザID」「パスワード」は、DBの作成時に使用したものを記入してください。
「ホスト名」は、Xserverのサーバーパネルにログインし、【MySQL設定】>【MySQL一覧】の下の方に書いてあるものを記入してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1233166/722be7d1-3e95-fd05-41c2-029702dc37b1.png)

`wp-config.php`ファイルを編集したら、サイトデータを再度zip圧縮します。

サイトデータをサーバーにアップロードするのですが、SSH接続して行う必要があるので、先にSSHの設定をします。

参考 ▶️ [Xserver公式ドキュメント：SSH設定](https://www.xserver.ne.jp/manual/man_server_ssh.php)

秘密鍵（`サーバーID.key`）がダウンロードできたら、以下のコマンドを実行します。

```terminal
# .sshディレクトリがなければ作成
$ mkdir ~/.ssh

# 秘密鍵を.ssh配下に移動
$ mv ~/Downloads/サーバー名.key ~/.ssh

# 秘密鍵のファイル名を変更
# もし、「id_rsa」のファイルが既に存在していたら、任意のファイル名（例：id_xsrv_rsa）でOKです。
$ mv ~/.ssh/サーバー名.key id_rsa

# 秘密鍵のパーミッションを変更
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa

# サーバーにアップロードサイトデータを
$ scp -P 10022 wordpress.zip ユーザー名@ユーザー名.xsrv.jp:/home/ユーザー名/ドメイン名/public_html/
# もし秘密鍵のファイル名がid_rsaでない場合はこちら
$ scp -i ~/.ssh/秘密鍵のファイル名 -P 10022 wordpress.zip ユーザー名@ユーザー名.xsrv.jp:/home/ユーザー名/ドメイン名/public_html/

# サーバーにログイン
$ ssh ユーザー名@ユーザー名.xsrv.jp -p 10022
# もし秘密鍵のファイル名がid_rsaでない場合はこちら
$ ssh -i ~/.ssh/秘密鍵のファイル名　ユーザー名@ユーザー名.xsrv.jp -p 10022

# 該当のフォルダに移動
$ cd ドメイン名/public_html

# zipファイルを解凍
$ unzip wordpress.zip

# wordpress配下のファイルをpublic_html配下に移動
$ cd wordpress
$ mv * ../

# 不要なファイルを削除
$ cd ../
$ rm wordpress.zip
$ rm -r wordpress
```

# 4. 動作確認
Xserverには「動作確認URLを追加して確認する方法」がありますが、WordPressを使用したサイトではその方法が**使用できない**ので、ローカルのhostsファイルを編集して動作確認を行います。

mac OSでのコマンドは以下の通りです。
```terminal
# hostsファイルをデスクトップ上に移動
$ mv /etc/hosts ~/desktop/hosts

# hostsファイルを編集（内容は以下）
$ vim ~/desktop/hosts

# hostsファイルを元の場所に戻す
$ mv ~/desktop/hosts /etc/hosts
```

hostsファイルの最下部に新しい行を追加し、「サーバーIPアドレス + (半角スペース) + ドメイン名（もしくはサブドメイン）」と入力します。

|  ドメイン名  |  hostsファイルの入力内容  |
| ---- | ---- |
|  example.com  |  xxx.xxx.xxx.xxx example.com  |
|  test.example.com  |  xxx.xxx.xxx.xxx test.example.com  |

「xxx.xxx.xxx.xxx」の部分には「サーバーのIPアドレス」を入力してください。
サーバーのIPアドレスは、Xserverのサーバーパネル内の「サーバー情報」で確認できます。

hostsファイルの編集が終わったら、ドメインにアクセスして動作確認ができます。

サーバー移行が終了したら、hostsファイルの編集内容は**元に戻してください**。

参考 ▶️ [Xserver公式ドキュメント:hostsファイルを編集して確認する方法](https://www.xserver.ne.jp/manual/man_domain_checkproxy.php#link-b)
### 動作確認中に、「ページが見つかりません」というエラーが出た時
`.htaccess`ファイルの設定が間違っている可能性があります。
WPのパーマリンク設定画面で、内容はそのままで「更新」すると直る場合があるので試してみてください。

参考 ▶️ [WordPress(ワードプレス) 移行での不具合事例：トップページ以外表示されない](https://wp-doctor.jp/blog/2016/04/14/wordpress%E3%83%AF%E3%83%BC%E3%83%89%E3%83%97%E3%83%AC%E3%82%B9-%E7%A7%BB%E8%A1%8C%E3%81%A7%E3%81%AE%E4%B8%8D%E5%85%B7%E5%90%88%E4%BA%8B%E4%BE%8B%EF%BC%9A%E3%83%88%E3%83%83%E3%83%97%E3%83%9A/)

# 5. ネームサーバー移行
さくらインターネットのサーバーコントロールパネルにログインし、【ドメイン/SSL】>【ネームサーバー設定】に移動します。
【さくらのドメイン】>【Whois】>【ネームサーバーを編集】をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1233166/824c6cfd-5e13-b741-0d40-d7ec88ec2392.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1233166/84eab965-dbdf-82a0-49b7-ca90e4d5cdcc.png)
ネームサーバからさくらインターネットのネームサーバを削除し、Xserverのネームサーバを追加して保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1233166/40aa518e-2ceb-4374-3a14-8b05fbcd05d5.png)
|  Xserverのネームサーバー  |    |
| ---- | ---- |
|  ネームサーバー１  |  ns1.xserver.jp  |
|  ネームサーバー2  |  ns2.xserver.jp  |
|  ネームサーバー3  |  ns3.xserver.jp  |
|  ネームサーバー4  |  ns4.xserver.jp  |
|  ネームサーバー5  |  ns5.xserver.jp  |

参考 ▶️ [Xserver公式ドキュメント：ネームサーバーの変更](https://www.xserver.ne.jp/order/order_transfer_server.php)

# 参考にさせていただいたサイト
- https://www.xserver.ne.jp/order/order_transfer_server.php
- https://codeaid.jp/blog/sakura-to-xsrv/