WordPressをVPSからVPSに引っ越し 手順まとめ

Web・情報技術

この記事の続き。

Amazon Lightsail上にWordPressを配置し運用していたこのブログ(killtime.blog)をWebARENA Indigoに引っ越しした。その流れを記す。

大まかなの手順については目次ママです。

これをたどれば、アクセスの途切れる時間を最小で抑えられるし、新サーバでのドメインの設定とかちゃんとうまく行ってるよね?というのを確認してから移行できるという安心感もあるので、本稿ではこれで行きます。

では早速。

スポンサーリンク

テスト用サブドメインのDNSレコード割り当て

ブログのドメインはkilltime.blog、URLはhttps://killtime.blogであるとする。

サブドメインとして、mgr.killtime.blogを割り当てる(mgrはmigrationの略語のつもり)。そして、

  • killtime.blogは移転元のIPアドレスを参照する
  • mgr.killtime.blogは移転先のIPアドレスを参照する

といった状態にしたい。

お使いのDNSの設定画面にて、Aレコードを設定する。名前を”mgr”、アドレスを移転先のIPアドレスにする。

例えばCloudflareならこう。管理画面、「DNS」タブから「レコードを追加」ボタンを押下。

このように入力し、保存すれば良い。

移転先のVPSの、NGINXのデフォルトページが表示されたので、ルーティングはうまく行っている模様。

また、ご承知のとおりこの時点でkilltime.blogは移転元のIPアドレスを参照している。

WordPress本体のファイルを引っ越す

まぁるっとWordPressの構成ファイルすべてを移転元でzipにして、それを移転先に展開する。

移転元VPSにて:

$ zip -r FILENAME.zip /path/to/wordpress/dir/

手元PC側(クライアントPC)にて:

$ scp -i {秘密鍵} -P {ポート} {ユーザ名}@{IPアドレス}:/path/to/zip/FILENAME.zip FILENAME.zip ##移転元VPSからダウンロード
$ scp -i {秘密鍵} -P {ポート} FILENAME.zip {ユーザ}@{IPアドレス}:~/FILENAME.zip #移転先VPSのとりあえずホームディレクトリにアップロード

移管先VPSにて:

$ mkdir /path/to/wordpress/dir/ #必要に応じて
$ unzip FILENAME.zip -d /path/to/wordpress/dir/ #解凍
$ sudo chown -R www-data:www-data /path/to/wordpress/dir/ #

データベースの引っ越し

移転元のVPSでバックアップファイルを作って、移転先VPSでリストアする。

移転元VPSにて:

$ mysqldump -u root -p --databases {WordPressのDB} > FILENAME.sql

なお、–databasesをつけることで、CREATE DATABASEのクエリも発行してくれるバックアップが出来上がる。

手元PCにて:

$ scp -i {秘密鍵} -P {ポート} {ユーザ名}@{IPアドレス}:/path/to/mysqldump/FILENAME.sql FILENAME.sql ##移転元VPSからダウンロード
$ scp -i {秘密鍵} -P {ポート} FILENAME.sql {ユーザ}@{IPアドレス}:~/FILENAME.sql #移転先VPSのとりあえずホームディレクトリにアップロード

移転先VPSにて:

$ mysql -u root -p
Enter password:<<パスワードを入力>>
mysql> source FILENAME.sql; #データベースをリストア
mysql> create user '{WP_USERNAME}'@localhost identified by '{PASSWORD}'; #WordPressのデータベース用のユーザを作成
mysql> grant all on WP_DBNAME.* to WP_USERNAME; #作ったユーザにWordPRessデータベースの権限を付与

CloudflareでSSL証明書を発行する

長くなったので別記事にまとめたので参照されたい。

NGINXの設定

移転先VPSで配置したWordPressにアクセスできるよう、NGINXの設定ファイルを書く。

# vim /etc/nginx/conf.d/wordpress.conf
#configuration file for killtimeblog
#httpリクエストはhttpsにリダイレクトさせる
server {
    listen 80;
    server_name mgr.killtime.blog;
    return 301 https://killtime.blog$request_uri;
}
#httpsのリクエストを処理
server {
        #httpsのみアクセスを許可
        listen 443 ssl;

        #証明書の設定
        ssl_certificate /etc/ssl/certs/origin.pem; #オリジン証明書のパス
        ssl_certificate_key /etc/ssl/private/privatekey.pem; #プライベートキーのパス
        
        server_name mgr.killtime.blog; #サーバー名
        
        index index.php;
        root  /path/to/wordpress/files/;
        
        #wp-config.phpへのアクセスを拒否する
        location ~* /wp-config.php {
                deny all;
        }
        
        #@wordpressに処理を飛ばす
        location / {
                try_files $uri $uri/ @wordpress;
        }
        
        #フロントページ用の処理 
        #これを書かないと、ただphpファイルがダウンロードされるだけになってしまう
        location ~ \.php$ {
                try_files $uri @wordpress;
                fastcgi_pass   unix:/run/php/php8.1-fpm.sock;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
        
        #フロントページ以外の処理
        location @wordpress {
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                fastcgi_pass   unix:/run/php/php8.1-fpm.sock;
                fastcgi_index  index.php;
                fastcgi_param SCRIPT_FILENAME  $document_root/index.php;
                include       fastcgi_params;
        }
}

設定ファイルの読み込みを行う

# nginx -s reload

で、ブラウザから https://mgr.killtime.blogにアクセスすると、

こんな感じで表示され、WordPressが動作していることが確認できる。

ただ、この状態から各記事へジャンプすると、移管元のVPSに飛んでしまう。これはWordPressの設定でサイトURLがmgr.killtime.blogではなくkilltime.blogであると認識されているからだ。

この設定を変える。mysqlを開いて、

# mysql -u USERNAME -p
mysql>use {WordPressのDB名}
mysql> update wp_options set option_value ='https://mgr.killtime.blog' where option_value='https://killtime.blog';
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

のようにする。すると、WordPress自身が自サイトのURLをmgr.killtime.blogであると認識するようになる。

ブラウザで、記事内をジャンプしてもURLがmgr.killtime.blogのまま遷移することを確認する。

なお、この状態を長く放置する場合は、検索エンジンがmgr.のほうをインデックスしないように設定しておく。

本番ドメインに切り替え

テスト用サブドメインでの遷移が確認できたら、設定を本番ドメインに切り替える。

NGINXの設定

こんな感じ。mgr.killtime.blogだった部分をkilltime.blogにする。

#configuration file for killtimeblog
#httpリクエストはhttpsにリダイレクトさせる
server {
    listen 80;
    server_name killtime.blog; #mgr.を消した
    return 301 https://killtime.blog$request_uri; #mgr.を消した
}
#httpsのリクエストを処理
server {
        #httpsのみアクセスを許可
        listen 443 ssl;

        #証明書の設定
        ssl_certificate /etc/ssl/certs/origin.pem; #オリジン証明書のパス
        ssl_certificate_key /etc/ssl/private/privatekey.pem; #プライベートキーのパス
        
        server_name killtime.blog; #サーバー名 #mgr.を消した
        
       #以下略
        
}

Cloudflareの設定

DNSで、killtime.blogのAレコードの値を移転先VPSのIPアドレスにする。

※モザイク部分は移転先VPSのIPアドレス。

以上で引っ越しは完了。数分で参照がすべて切り替わる。移転先VPSが本当に参照されているかどうかについては、例えば移転先のVPSでアクセスログを見れば良い。

# tail -f /var/log/nginx/access.log

アクセスログを開いたまま、ブラウザにアクセスしたタイミングでログが更新されていれば、間違いなく参照が切り替わっていると言える。

タイトルとURLをコピーしました