この記事はConoHa Advent Calender 2023の13日目の記事です。
最近、ブログのサーバーをConoHa WINGからConoHa VPSに移行しました。勉強目的かつ、コスト削減もできたらいいな~と思ったサーバー移行だったのですが、思った以上に難易度が高かったため移行手順をブログ記事にすることにします。
前置き
ConoHa VPSのバージョンが上がったらしい
この記事を書こうと決めた数日後にConoHa VPS バージョン3.0が追加されたそうです。(知らない子)
タイミング悪くVPS割引きっぷを買ったばかりなのでConoha VPS バージョン2.0で解説します。バージョン3.0で何が変更されたのかよくわからなかったのですが、方法は大きく変わらないと思いますので参考にしてもらえれば幸いです。きっぷでバージョン3.0使わせろー
ConoHa VPSとは?
ConoHa VPSはサーバーの一部分を占有して利用できる仮想サーバーで、とっても便利なものです。自宅にサーバーを置かなくてもお金を払えば業者(ConoHa VPSの場合はGMO)がサーバーを維持してくれます。これってすごく便利で、物理的なサーバー管理をしなくてもいいんですよね。コンセントを引っこ抜いたりルーターの電源を落としたりするリスクにひやひやしなくてもいい安心感がVPSサービスの魅力だと思っています。
ブログの運営においてサーバーのダウンは機会損失につながるのでConoHa VPSにはもってこいで、
現に、ConoHa VPSではWordpress実行環境のKUSANAGIが利用できることをアピールしています。
©GMO Internet Group, Inc.
このはちゃんかわいい!!!
マスコットキャラクターのこのはちゃんもかわいいのでおすすめです。ぜひグッズも買いましょう。(真剣)
ConoHa Advent Calenderには初参戦なので詳しく存じ上げていないのですが、例年とある言葉が禁句だそうで….。
おっş̸̵̶̡̛̘̱̩͉̟ͥͭ̒̍́͌ͪ͂ͩ̈́ͪ̃̆͆͂͜͝͝a̵̛̳̪̝͈͉̔͆̈́̓̿̉̃͊͋͛̈͊̊́͂͆̆̂̑̂̍́͊̚̚̕͠͝𝐚⃥⃒̸𝑎̥̊⃝ɒ҉༙྇ȁ̴̳͔ͧͥͥ͊ͭ͡͠_
おっと、何者かによる検閲が入ったようですね…(震え声)
ConoHa VPSは公式マニュアルが貧弱
公式サイトにはこのような文言があります。
WordPressの実行時間3ミリ秒台、秒間1000リクエストをさばける世界最速級のWordPress実行環境「KUSANAGI」をすぐに利用できる、プライム・ストラテジー社公式認定のKUSANAGIかんたん管理ツール「KUSANAGI manager」をご用意しております。KUSANAGIの設定をブラウザから、コマンド操作不要でかんたんに行えます。
https://www.conoha.jp/vps/features/
私はこれを信じてConoHa WINGからConoHa VPSに移行しました。
でもね、簡単にWordpress環境を構築できると思ってConoHa VPSを契約するととんでもない目に遭います。
いざ実用にむけて環境を作ろうとするとセキュリティ上の問題からコマンドで操作しないといけないし、WEXALを有効化しようと思ったら公式マニュアルが間違っているし。要するに初心者向けの代物ではないということです。仮想サーバーというサービスのジャンル自体がサーバー構築にある程度精通している人向けのものなので文句は言えないのですが、「かんたん」をアピールしておいてそれはないだろ!と突っ込みたくなります。
でも大丈夫、安心してください。
この記事でできる限りのことを解説します。VPSに挑戦したい方やWordPressの構築で苦しんでいる方の参考になれば幸いです。
パパっとWordpressを構築したい人はConoHa WINGを使おう!
下のアフィリンクからどうぞ!
注意事項
初心者の場合、体力と集中力を使います。余裕のある日に行いましょう。おすすめは週末2連休です。
平日にサーバー障害の対応は結構きつい!
勤務中にブログがアクセス不能に陥り、機会損失丸被りなんて悲しすぎます。土曜日はメインの作業日で日曜日は予備日と考えましょう。
また、この記事の内容を実践する場合は一度内容に目を通して手順を確認してから行ってください。
加えて述べると、私はインフラ維持のスペシャリストはないので誤った記載があるかもしれません。見つけた場合はお手数ですがお問い合わせ欄またはコメント欄より指摘をお願いします。
※Windowsでの手順を解説します。macOSの場合は代替のSSHクライアントを使用してください。また、hostsファイルのディレクトリも異なるので注意してください。
※サーバー移行の際にのみ必要な手順の見出しには〇印、新たにWordpressを始める際にのみ必要な手順の見出しには◆印をつけています。
パスワードR: rootユーザーのパスワード
ユーザー名N: 追加したユーザーのユーザー名
パスワードN: 追加したユーザーのパスワード
パスワードS: SSH鍵のパスフレーズ
パスワードK: KUSANAGIユーザーのパスワード
パスワードDB: DBのパスワード
ドメインA: WordPressで使用するドメイン
プロファイルA: プロビジョンするWordpressのプロファイル名
ユーザー名P: PST Managerのユーザー
パスワードP: PST Managerのパスワード
それでは、作業開始!
〇移行元サーバーのネームサーバーをCloudflareに移行
移行するとき、ダウンタイムはできるだけ発生させたくないと思います。移行時だけでもCloudflareに移行しておくことでSSL暗号化のダウンタイムを0にすることができます。詳細については後程解説します。
加えて、ProxyをONにして、SSLのモードをFullに設定します。
これで、Edge Certificatesの証明書でSSL通信ができるようになります。
〇移行元サーバーからデータをダウンロード
セキュリティ、キャッシュ関係のプラグインを無効化
移行先のサーバーで不具合を起こす可能性があるので、セキュリティ関係のプラグイン(XO Security)やキャッシュプラグイン(WP Super Cache)などを無効化しておきましょう。
UpdraftPlusでバックアップを作成
SSH経由で移行作業を行ってもいいのですが、難易度が高いので今回はUpdraftPlusを使います。
移行元のサーバーにUpdraftPlusをインストールしてください。
※UpdraftCentral Dashboardという名前の似たブラグインがありますが別物なので気を付けましょう。
インストールができたら設定画面から今すぐバックアップを押します。
バックアップが終わるとバックアップファイルがダウンロードできるようになるので「データベース、アップロード」をダウンロードします。Must-use pluginsはダウンロードしなくてもいいと思います。(未検証)
コントロールパネルからサーバーを追加
まず、コントロールパネルからサーバーを追加しましょう。
きっぷがある方はきっぷを適用して、イメージタイプはかんたんKUSNAGIを選択します。
rootパスワードはSSHやKUSANAGI managerでのログインで使うのでメモしておきましょう。(ここからはパスワードRと呼びます)
オプションは、変えなくて大丈夫です。SSH Keyを作成しておいてもいいですが、後からユーザーアカウントを追加するので使用しないを選択します。
追加ボタンを押すとサーバーリストにリダイレクトします。サーバーが追加されてステータスが起動中になっていればの追加は完了です。
ネームタグの部分をクリックすると設定画面が出てきます。その中にある削除ロックを有効化しましょう。こうすることで操作ミスによるサーバー削除を防ぐことができます。
SSHとユーザーの設定
SSHでサーバーにアクセス
次に、MobaXtermを使ってサーバーに接続します。インストールしていない方はインストールしてください。もちろん、ほかのSSHクライアントでも構いません。
次に、ネットワーク情報の中にあるIPアドレスを控えてください。
MobaXtermを起動してSessions⇒New session
SSHを選択してRemote hostのところにメモしたIPアドレスを入力します。
OKを押すと接続が始まります。許可するか許可しないかみたいなウィンドウが出てくると思いますが、Acceptを押しましょう。
rootパスワードを聞かれるので、サーバー追加時に設定したパスワードRを入力します。
パスワードを保存するかどうか聞かれますが、お好きに選んでください。
ログインすることができました。
ユーザーを追加
rootユーザー、kusanagiユーザーでいろいろするのはセキュリティ上問題があるので新規ユーザーを作成します。(ユーザーの名前をユーザー名Nとします。)
sudo useradd -G wheel 'ユーザー名N' #新規ユーザーを追加
sudo usermod -aG www 'ユーザー名N' #kusanagiコマンドを使うためにwwwグループに追加
passwd 'パスワードN' #パスワードを設定
su - 'ユーザー名N' #ログインできるかチェック
新規作成したユーザーでログインして@の前のユーザー名が変わっていればOK。
追加出来たら新規ユーザー用のMobaXtermのセッションを追加します。コピーしてユーザーの部分だけ変えてもいいですし、先ほどと同じ手順で1から作成してもらっても構いません。
rootユーザーのときと同じように設定したパスワードNを入力すればログインできるはずです。
sshd_configをバックアップ
ここからsshd_configを編集するのですが、設定変更でミスが発生したときに復元できるよう、ファイルをバックアップしておきましょう。
sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.old #sshd_configをバックアップ
SSHで接続できない!
となったときはConoHa VPSのコンソールからファイルをもとに戻します。
sudo cp -p /etc/ssh/sshd_config.old /etc/ssh/sshd_config #sshd_configを復元
rootユーザーでのログインを制限
rootユーザーでのログインを許可しておくと総当たり攻撃をされる恐れがあります。rootユーザーでのログインを無効化しましょう。
sudo rm /etc/ssh/sshd_config.d/01-permitrootlogin.conf #ファイル削除
sudo vi /etc/ssh/sshd_config #PermitRootLoginをnoにする
sudo systemctl restart sshd #変更を適用
ちなみに、viコマンドの使い方を知らない人でもこれだけ覚えてら使えるようになります。
- viコマンドとは
-
ファイルを編集するためのエディター。Windowsで例えるとマウスの使えないメモ帳的な存在。
- 編集したいとき
-
内容を編集したいときはiキーを押して編集モードに入る。Escキーで編集モードを終了。
- 内容を破棄して終了する
-
編集モードでないときに:qa!と入力してエンター。
- 内容を保存して終了する
-
編集モードでないときに:wq!と入力してエンター。
これでrootユーザーでログインできなくなります。適用できているか心配な場合はターミナルにて
ssh root@"IPアドレス"
を試してみるといいでしょう。ログインできなくなっているはずです。
PST Manager, KUSANAGI manager用のポートを解放 & SSHのポートを変更
SSHのポート番号を22のままにしておくと攻撃されるリスクがあるので変更します。しかし、デフォルトでは全然ポートが解放されていないのでfirewall-cmdで設定します。これと併せてKUSANAGI managerのポートとPST Manager用のポートが解放されていないことがあるので解放しておきます。(変更後のポート番号をポートSとします)
sudo firewall-cmd --list-all #開いているポートの確認
sudo firewall-cmd --permanent --add-port=60000/tcp #KUSANGI manager用のポート
sudo firewall-cmd --permanent --add-port=61000/tcp #PST Manager用のポート
sudo firewall-cmd --permanent --add-port='ポートS'/tcp #SSH用のポート
sudo firewall-cmd --reload #変更を適用
sudo vi /etc/ssh/sshd_config #Portの部分をポートSに変更
sudo systemctl restart sshd
完了したらセッションを編集してポートを変えましょう。
SSH鍵の作成
Windows ターミナルでSSH鍵を作成します。パスフレーズはSSH鍵を使うときに入力するのでメモしておきましょう。(パスワードSとします)
ssh-keygen #SSH鍵の作成
SSH鍵を保存するディレクトリはどこでもいいですが、セキュリティの高そうな場所に保管しておきましょう。パスフレーズを入力すれば指定したディレクトリにSSH鍵が出力されます、
できたらid_rsa.pubを/home/ユーザー名N/.ssh/にアップロードします。
sudo mkdir /home/ユーザー名N/.ssh #.sshフォルダを作成
sudo chown ユーザー名N /home/ユーザー名N/.ssh/ #所有者を変更
sudo chmod 700 /home/ユーザー名N/.ssh/ #所有者以外のアクセスを禁止 ちなみに、chmodの引数の数字は左から所有者、所有者のグループ、その他の権限を表している。
sudo mv id_rsa.pub authorized_keys #ファイル名変更
sudo vi /etc/ssh/sshd_config #PubkeyAuthenticationのコメントアウトを消す PermitRootLoginをNoにする
sudo systemctl restart sshd #設定変更を適用
アップロードの方法にはscpコマンドやFTPなどがあるのですが、MobaXtermではSFTPでファイルのアップロードができるのでそれを活用します。右にあるSSH Browserのところへid_rsa.pubをドラッグ&ドロップしてください。ファイルのアップロードが完了したら名前をauthorized_keysに変更してください。
設定が変更できたらMobaXtermのセッションの設定を変更しましょう。SSH鍵を使用して接続するのでAdvanced SSH settingsの中にあるUse private keyのチェックボックスをONにして秘密鍵(ここではid_rsa)を選択します。
接続してみるとOpenSSHの秘密鍵のパスフレーズを入力しろ!といわれるので入力します。入力するとパスワードの時と同じようにログインすることができるはずです。
パスフレーズはMobaXterm起動後に1回要求されますが、それ以降は入力することなくログインできます。
KUSANAGIとWordpressのセットアップ
KUSANAGIをプロビジョニング
KUSANAGIのプロビジョニング(初期設定)を行います。かんたんKUSANAGI側で行ってくれているとは思うのですが、一応してコマンドを実行しましょう。
ここではkusanagiユーザーのパスワードを決めます。(パスワードKとします)
また、データベースのパスワードを決めます。データベースのパスワードは強力なものにしておきましょう。(パスワードDBとします)
加えて、プロファイル名を決める必要があります。サイトを識別するためのもので、KUSANAGIの設定変更時に使用します。サイト名など、どのWordpressかわかりやすいような名前を付けましょう。(プロファイルAとします)
他のサーバーから移行する場合は–fqdnに移行元のドメインをそのまま入力します。新規の場合は使用するドメインを入力します。(ドメインAとします)
移行元サーバーにDNSが向いていてもhostsファイルで接続できるから安心してね。
kusanagi init --passwd 'パスワードK' --nophrase --dbrootpass 'パスワードDB' --nginx125 --php82 --mariadb10.1
kusanagi provision --wp --fqdn 'ドメインA' --noemail --dbname kusanagi_db --dbuser kusanagi_db --dbpass 'パスワードDB' 'プロファイルA'
wordpressがダウンロードされ、インストールされます。
Provisioning of プロファイルA completed. Access ドメインA and install wp.と表示されたらWordpressのインストールは完了です。
〇hostsファイルを編集してサーバーにアクセス
この時点では、ドメインAのDNSレコードが移行元IPアドレスに向いているためアクセスすることはできません。そこで登場するのがhostsファイルです。詳しい説明は以下の記事でよくわかると思うので割愛します。
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
'ConoHa VPSのIPアドレス' 'ドメインA'
'ConoHa VPSのIPアドレス' 'www.ドメインA'
C:\Windows\System32\drivers\etc\hostsの内容を上のように書き換えることにより、ドメインAから移行先IPアドレスにアクセスできるようになります。内部のカスタム設定のようなもので、設定を変更した端末にのみ適用されます。こうすることで通常のブログ閲覧者とWordpressの構築作業を切り離すことができます。
WebサーバーがDNSレコードを見ることはなく、自分のIPアドレス宛に来たリクエストをドメインごとに仕分けて処理しているだけです。そのため、WebサーバーのIPアドレス宛に「https://example.com/」というリクエストを送ればたとえDNSレコードに登録されていなくてもhttps://example.comとして振舞うのです。
◆ドメインAのDNSレコードにConoHa VPSのIPアドレスを指定
使用しているネームサーバーでDNSレコードの設定を変更してください。
WordPressをセットアップ
ユーザー名とパスワード、メールアドレスは適当に決めてください。
これで、移行先サーバーにアクセスすることができました。Wordpressもセットアップできましたね。
KUSANAGI managerの動作を確認
KUSANGI managerとPST Managerにアクセスできるかどうか確認してみましょう。
'ConoHa VPSのIPアドレス':60000 #KUSANAGI manager
'ドメインA':60000 #KUSANAGI manager
これらのURLにブラウザからアクセスできたらOK。
ディレクトリの権限を変更
WordPress内でアップロードするとき、フォルダの権限によってはエラーが出ることがあります。そのため、フォルダの権限を変更しておきましょう。
cd /home/kusanagi/プロファイルA/DocumentRoot/wp-content #wp-contentディレクトリに移動
sudo chown kusanagi:www -R uploads #wp-content/uploads内の所有者、所有グループを変更
sudo chmod 771 -R uploads #ディレクトリ内のすべてのファイル、ディレクトリの権限を変更
sudo chown kusanagi:www -R themes #wp-content/themes内の所有者、所有グループを変更
sudo chmod 777 -R themes #ディレクトリ内のすべてのファイル、ディレクトリの権限を変更
wp-config.phpにFTPパスワードを入力
何も設定していない状態だとwp-config.phpにFTPのパスワードが記載されていないため接続情報を毎回問われます。
そのため、wp-config.phpを編集します。
sudo vi /home/kusanagi/プロファイルA/wp-config.php # #define('FTP_PASS',''); を define('FTP_PASS','パスワードK');に
こうすることで接続情報の確認は不要になります。
WEXAL有効化
画像を圧縮したりコードを最適化したりしてくれるWEXALを有効化するにはKUSANAGI Market Placeでユーザー登録してキーを取得する必要があります。ここでは割愛しますが、もちろん無料なので安心してください。
取得したサブスクリプションキーとライセンスはマイアカウントから確認できます。
このサブスクリプションキーを使い、WEXALを有効化します。
kusanagi upgrade kusanagi --edition premium --use presonal --key 'サブスクリプションキー'
sudo yum install kusanagi-prem3
次に、PSTのユーザーを作成します。(ユーザー名とパスワードはそれぞれユーザー名P、パスワードPとします)
その後、PSTを有効化します。
pst passwd add --user 'ユーザー名P' --pass 'パスワードP' #ユーザー追加
pst init 'プロファイル名A' #PSTを有効化
完了したら以下のアドレスにアクセスします。
'ConoHa VPSのIPアドレス':61000 #PST Manager
'ドメインA':61000 #PST Manager
このような画面になればWEXALの有効化は完了です。先ほど指定したユーザー名PとパスワードPでログインすることができます。
WEXALの設定については公式のドキュメントを確認してください。後日記事を作成する予定です。
〇Wordpressの移行
移行先サーバーにデータをアップロード
移行先サーバーにもUpdraftPlusをインストールして「〇移行元サーバーからデータをダウンロード」にてダウンロードしたファイルをすべてアップロードします。
アップロードが完了したら復元ボタンから移行先サーバーにデータを適用します。
以下のような警告が出るかもしれませんが、おそらく気にしなくて大丈夫です。
復元が完了してUpdraftPlus 設定に戻るを押すと以下のような画面がでてくるので、WordPressデータベースを更新を押します。
これでデータの適用は完了です。
テーマをアップロード
移行したのはデータベースとアップロードフォルダの中身のみなので、テーマファイルは移行できていません。そのため、場合によってはこのようなエラーが出ます。
そのため、以前に自分が使用していたテーマをアップロードしてください。
アップロードする際に以下のようなエラーが発生した場合、「ディレクトリの権限を変更」の手順をもう一度やり直してください。
こうすることで、トップページを開くことができるようになります。
必要なプラグインを導入
移行元のサーバーで利用していたプラグインをインストールしましょう。基本的に設定は復元されるので再設定は必要ありません。
〇DNSレコードの編集
hostsファイルを編集して元に戻す
hostsファイルを編集して移行元サーバーにアクセスできるようにします。コメントアウトすればすぐに適用されるはずです。
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
#'ConoHa VPSのIPアドレス' 'ドメインA'
#'ConoHa VPSのIPアドレス' 'www.ドメインA'
CloudflareのコンソールからProxyがONであることを確認
当然といえば当然なのですが、hostsファイルで移行先サーバーにアクセスしている間はドメインを使って外部ネットワークから移行先サーバーにアクセスできないため、KUSANAGIのsslコマンドでSSL証明書を有効にできないのです。そのため、移行元サーバーから移行先サーバー(ConoHa VPS KUSANAGI)にIPアドレスを変更する際、オリジン側がhttp通信になります。ここでクライアント側からの通信もhttpになる…と思いきや、Cloudflareさんが仲介してhttps通信をしてくれます。Proxiedモードで有効なので、SSL暗号化のダウンタイムなしで移行できるわけですね。
ドメインAのDNSレコードにConoHa VPSのIPアドレスを設定
移行先のIPアドレスを入力してSaveします。
Cloudflareのプロキシ経由で接続しているので、一瞬で切り替わります。もちろん、SSLで暗号化されています。
SSL証明書の発行
kusanagiのsslコマンドを利用することで簡単にSSL証明書を発行できます。
kusanagi ssl --email 'メールアドレス' 'プロファイル名A' #メールアドレスは任意のものを使用
これでssl証明書は発行され、サーバーに適用されました。このタイミングでCloudflareのプロキシをOFFにしていたただいて構いません。
Cookieの削除
移行元のサーバーのCookieが残っている場合、思わぬバグが発生することがあります。例えば、以下のようなものです。
・タグを増やしたはずなのに反映されない
・SEO SIMPLE PACKでメタタグ設定したのに反映されない←この記事の執筆中に遭遇
移行作業後はCookieを削除しましょう。
PST Managerで画像の最適化
PST Managerには画像の自動最適化機能があるので、画像圧縮処理を行ってもらいます。Resource Optimizationタブを開き、Optimize Resourcesを押します。
画像処理が開始されCPU使用率が90%台に張り付けばOKです。
これにて作業終了!
あとがき
本当にお疲れさまでした…
ね、疲れたでしょ?
私にとって、サーバーのダウンタイムにおびえながらコンソールを打つのはスリリングでたまらなかったです。
今日はゆっくり休んでくださいね…
と言いたいところなのですが、まだ内容が続くので最後まで見てください。(強制)
これでKUSANAGIによるWordpress環境の構築は終了なのですが、いくつかの注意点があるのでお伝えしておきます。KUSANAGIではテーマやプラグイン、Wordpressコアの自動更新がデフォルトで無効化されています。そのため、定期的に手動で更新するか、自動更新を有効にするかのどちらかを行う必要があります。忘れないようにしましょう。また、KUSANAGI内部のアップデートも自動では行われないので定期的にコンソールでアップデートするようにしましょう。(詳しく追記予定)
また、現状ではポート60000とポート61000がhttp通信であり、無防備な状態で晒されています。今回の記事で対処法を紹介する予定だったのですが、記事が長すぎるのでまた今度書きます。ついでに、Cloudflare Turnstileの導入方法も紹介予定です。そのときはここにリンクを貼っておくので、参考にしてもらえたらうれしいです。
最後まで見ていただきありがとうございました。
コメント
コメント一覧 (1件)
こんにちは!美雲このはです。
この度は、ConoHa Advent Calendar 2023へのご参加ありがとうございました!
ご参加いただいた方へのプレゼントの件でご連絡をさせていただきたいので、
美雲このはのXアカウントまでご連絡いただくことは可能でしょうか?
大変お手数ですが、ご確認よろしくお願いいたします。
※メールアドレスも記載しておりますが、美雲このはXアカウントのDMへご連絡をお願いいたします。
美雲このはX
@MikumoConoHa
https://twitter.com/MikumoConoHa