KUSANAGI for VMware, and リバースプロキシ(caddy)

サーバ

先日、本ブログはパフォーマンス改善のため Azure からオンプレミスの ESXi に移行しました。

いままで KUSANAGI for Microsoft Azure を使用していましたので、移行後も KUSANAGI を利用することとしました。

ただし、今度の環境では SSL リバースプロキシ、 CloudFlare を挟んでいるのでちょっとつまづきかけました。

そのあたりを記事にしたいと思います。

なお、各作業の詳細な内容は別のサイトや、公式ドキュメントのほうが良くできているため、やるべきことと作業手順に焦点を当てていきます。(KUSANAGI および WordPress の基本的な使用方法については記述しないこととします。)

Azureからオンプレへの移行図

今までは KUSANAGI for Microsoft Azure を直接公開していました。

Azure の Marketplace から手軽に作成できて管理も楽でいいのですが、ここ最近ある問題に悩まされていました。画像のアップロードやWordPressの更新など、ちょっと負荷がかかっただけで応答がなくなってしまうのです。

これは VM インスタンスが小さいからなのですが、コストの問題もありサイズを大きくするわけにもいきません。

そこで、リソースに余裕のある KIRIGAKURE データセンター(自宅)の仮想マシンに移行することとしました。

課題

ここでまず問題となるのは、 SSL 化の方針です。現行環境では KUSANAGI の内部で勝手に Let’s Encrypt で SSL 対応してくれるようになっています。一方、新環境ではすでに Web アプリケーション(Misskey)が動いており、これは Caddy を SSL リバースプロキシとしております。現行どおり KUSANAGI にまかせてしまうと重複してしまいます。

また、この課題の解決方法として KUSANAGI の SSL 機能を無効にすること真っ先に思い浮かびますが、それだけでは WordPress 自体が SSL 非対応 となり、ページの表示がうまくいきません。この課題も解決していきます。

そして、 KUSANAGI の移行に際して、DBをコピーしたり KUSANAGI のファイルをコピーしたりなど、データの移行方法を検討する必要もあります。

ということで、以下の 2 点が今回の移行に関しての主な課題となります。

  1. SSL 化の方式について
  2. データ移行の方法について

解決方法

SSL 化の方式について

以下のような方法をとります。

  • SSL 化は新環境ですでに動作している SSL リバースプロキシ(caddy) に任せる。
  • KUSANAGI の SSL 機能は無効に設定する。
  • WordPress に SSL 対応設定を手動で追加する。

データ移行の方法について

データ移行は WordPress 内のエクスポート/インポートツールを使うことにしました。

現行環境では画像つき投稿がほとんどなく(もともと記事自体少ないとか言わないで!)、もっとも簡単かつ確実だったため、この方法を選択しました。画像が多ければ別の方法になると思います。

作業内容

流れは以下のとおりです。

  1. WordPress エクスポート
  2. DNS 設定変更(CloudFlare)
  3. リバースプロキシへの設定・Let’s Encrypt
  4. KUSANAGI VM の設置・初期設定・プロビジョニング
  5. WordPress インストール
  6. wp-config.php 変更
  7. WordPress インポート

WordPress エクスポート

まずはエクスポートを行います。

今回は設定画面からすべてのコンテンツのエクスポートを実施しました。

DNS 設定変更

ここで DNS 設定の変更をします。これは移行先に名前解決できる状態でないと SSL リバーシプロキシが設定できないため、このタイミングとしています。

私は CloudFlare を利用しているため、管理画面からDNS設定を変更しました。

リバースプロキシへの設定・Let’s Encrypt

リバースプロキシに KUSANAGI を設置する IP アドレスと FQDN を指定します。

これに関しては特に工夫は必要ないので別記事に書こうと思います。(そのうち。予定は未定。)

KUSANAGI VM の設置・初期設定・プロビジョニング

KUSANAGI の設置は公式ドキュメントの通りに実施しました。

初期設定も公式ドキュメント通りに行います。

プロビジョニングも公式ドキュメントに沿って行います。ただし、 Let’s Encrypt の設定の際に メールアドレスの入力は行わず、 2 回 Enter キーを押します。これにより SSL 機能が無効になります。もし間違えて入力した場合も後からコマンドで変更可能です。

WordPress インストール

さて、今回はデータのインポートを行ってデータ移行とするため、まずはサイトURLにアクセスし、インストールを実施します。

一通りのインストール作業が終わるとログイン画面が出ますが、まだログインはできません。

というのも、 SSL 対応が不完全なためログインがループしてしまうのです。 http にてアクセスした場合はログイン可能です。

wp-config.php 変更

ここが肝です。 wp-config.php を編集し、以下の設定を変更 or 追加します。

define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);
$_SERVER['HTTPS'] = 'on';

これにより、 https でも管理画面にログインできるようになり、コンテンツも正常に表示されるようになります。

WordPress インポート

SSL リバースプロキシ下で KUSANAGI および WordPress が動作するようになったので、 WordPress にデータをインポートして作業終了となります。

後は外観のカスタマイズなどなどが必要になるので、プラグインの追加などなど設定を行っていきます。

まとめ

正直データ移行に関しては手を抜きました。もっといい方法があると思います。

wp-config.php への設定値追加は、素の WordPress を SSL 対応した人なら知っていることなのかなとも思います。ただ、 KUSANAGI はあまりファイル直に操作することが少ないので盲点にもなっていますね。無理やり変えることにより不安定にならないか心配でしたが、少なくとも 1 週間は動いているようなので大丈夫かなと思います。

コメント