WordPress + SQL Lite Integration で、データベースアップデード時に「このサイトで重大なエラーが発生しました。」というエラーがでる場合のとりあえずの修正方法

WordPress更新時にデータベースの更新が必要な場合があり、SQL Lite Integrationを使っていて、更新を実施すると「このサイトで重大なエラーが発生しました。」というエラーが発生することがある。

詳しくしらべていないけれども、今日(2023/08/23)現在、以下のdb.phpに更新することで、データベースの更新が可能になる。

GitHub – aaemnnosttv/wp-sqlite-db: A single file drop-in for using a SQLite database with WordPress. Based on the original SQLite Integration plugin.

WordPress + SQLite Integration を PHP 8.Xにアップグレードした時に「There has been a critical error on this website.」とエラーになる件

MySQL無しにWordPressを利用するためのプラグイン「SQLite Integration( https://ja.wordpress.org/plugins/sqlite-integration/advanced/ )」。デファクトとも言えるのだけれども、いかんせん古く、すでにダウンロードもできなくなっている状況。ただし、PHP7.X時代までは、一部問題点もあったけれども、「SQLite Integration update-option Patch」ってのもあって、使っている人も少なくないかも。と思ったらダウンロード数6万弱。多いのか少ないのか。。。

SQLite Integrationを使っていたらPHP8.Xにアップデートできなかった

PHPのEnd of Life(EOL)。いわゆる、サポート切れ問題。PHP 7.X台の最終版7.4.XのEOLは、PHP: Supported Versions にもあるとおり、2022年11月28日。早急に、8.Xへの移行が必要。まぁ、前々から知っていたのだけれども、当月になってお尻に火が付いたってことで作業開始。

単純にPHPのバージョンを8.Xにアップデートしてみると

There has been a critical error on this website.
Learn more about troubleshooting WordPress

とエラー発生。原因究明はしていないが、SQLite IntegrationがPHP7.X以前のコーディングに依存している模様。

救世主は「wp-sqlite-db」

aaemnnosttv/wp-sqlite-db: A single file drop-in for using a SQLite database with WordPress. Based on the original SQLite Integration plugin. (github.com)

これで解決。WordPressを新規に立ちあげるなら、最初から、wp-sqlite-dbの利用で良さそう。SQLite Integrationからの移行が気になるところだったのだが、とりあえず、db.phpの入れ替えだけで動いているようにみえる。入れ替えの前には、バックアップをオススメのと、リスクは考慮した上での実行が必要。

他のプラグインとの兼ね合いもあるしね。

さくらのレンタルサーバー+CDN環境で、WordPressを使う

Azure App Service (Web Apps)のWindows版で、WordPressを運用していたのだけど、Windows 版 PHPのEnd of Lifeで、年末には使用不要になりそうということで移行先の検討。

CDN配下に配置するということで、最小限のスペック、かつ、管理を簡易化するために、sqliteを使ってデータベースのバックアップをしないという大胆な運用。

で、候補にあげたのが、さくらレンタルサーバー。年1,600円。マルチドメインも20個作れる。2週間お試しで、移行できるかの検証。

結論としては、移行可能そうな感じ。ただ、いくつか注意点があるので、備忘録として記す。ポイントは2点。

1、レンサバの国外IPアドレスフィルタの解除

これ設定解除しないと、WordPressの管理画面に入れない。

国外IPアドレスフィルタ – さくらのサポート情報 (sakura.ad.jp)

2、$_SERVER[‘HTTP_HOST’]=’www.example.com’;をwp-config.phpに追加

ホスト名がCDNではなくオリジンになってしまうので、強制的に、CDNがサーバーのURLになるように変更。

$_SERVER['HTTP_HOST']='www.example.com';

あとは。画像をオブジェクトストレージに保存するとか、cache-controlのプラグインを入れる等々のCDN運用時の通常作業でOK.

Microsoft Azure App Service 上で、コストパフォーマンス最強にWordPressの構築する (その5)

運用

バックアップ&リストア

データベースがSQLiteのため、Web Apps上ファイルのバックアップを実施することでフルバックアップできる。Web Apps で利用している、App Service PlanがFreeプランのためそのままでは、Web Appsのバックアップができない。Standard以上に変更してバックアップする。

リストアは、直接上書きするのではなく、Deployment Slotを活用して、安全にリストアする。

バックアップ

  1. (初回のみ)バックアップを保存するBlobコンテナを作成、Storageアカウントは、画像を保存したアカウントでもOK。Blobコンテナのアクセス権は、プライベートに設定。

  2. App Service PlanをS1以上のプランに変更

  3. A.で作成したBlobコンテナをバックアップ先として、Web Appsのバックアップを設定、バックアップの実行

  4. バックアップ終了後、忘れずに、App Service PlanをFreeプランに変更

リストア

  1. App Service PlanをStandard以上に変更

  2. Deployment Slotを作成

  3. Deployment Slotにバックアップをリストア

  4. Slotを入れ替える

  5. (念のため)Web Appsを再起動する

死活監視

Application Insightの「URLのPingテスト」を利用。コンテンツの一致まで確認することにより改竄検知にもなる

https://docs.microsoft.com/ja-jp/azure/azure-monitor/app/monitor-web-app-availability#create-a-url-ping-test

各種ログ収集

Web Appsのログ収集機能を利用

WordPress本体/プラグインの更新

事前にバックアップを作成。WordPress本体を更新する際は、Web Appsを実行しているサーバーのリソースを確保するために、App Service Plan をStandardプラン以上に設定してからWordPress更新を実施。

プラグインの更新は、Freeプランで実施してしまっても良いかも。

PHPランタイムのバージョンアップ

PDOドライバがPHPランタイムのバージョン毎にことなるので、上記、PDO Driverインストイイールの手順をPHPランタイムのバージョンにあわせて実施

Microsoft Azure App Service 上で、コストパフォーマンス最強にWordPressの構築する (その4)

WordPressインストール・初期設定

手順1 (WordPressファイルをWeb Appsにコピーする)

  1. 手順1で作成したSQLiteに対応したWordPressをWebAppsにコピー
    FTP、その他、方法は問わない

  2. (インストール1でzip化してるのであれば、Web AppsのAdvanced Toolsを使ってドラッグ&ドロップでコピーできる。https://docs.microsoft.com/ja-jp/azure/app-service/deploy-zip)

手順2 (WebAppsをより安全に・快適に)

FTPを利用できないようにして、デプロイ方法を限定する。httpのバージョンとARR Affinityをよりパフォーマンスの高いように設定する

  1. FTPをDisableに設定

  2. HTTP versionを2.0に設定

  3. ARR affinity をOffに設定

手順3 (初期設定)

  1. 設定したカスタムドメインに対してアクセスし、インストーラーを起動、適切なサイト名、ID、パスワード、メールアドレスなど適切に入力

  2. WordPressにログイン(/wp-admin)し、管理者画面に移動

  3. WordPressの設定の一般設定で「WordPress アドレス (URL)」と「サイトアドレス (URL)」をカスタムドメインのアドレスに変更する(*.azurewebsites.netのアドレスになっている場合)

  4. WordPressの設定のパーマリンク設定を「基本」以外のクエリ文字列形式ではないページ指定に変更する。これを変更しておかないとCDNでキャッシュされない

各種WordPressプラグインインストール・設定

今回の構成で必要なプラグインをインストール

手順1 (cache-control)

https://ja.wordpress.org/plugins/cache-control/

CDNを利用しているため、各ページのキャッシュクリアのタイミングを設定するために利用

  1. WordPress設定画面のプラグインページでcache-controlをインストール・有効化

  2. 必要に応じて、設定画面でパラメーターを変更

注:キャッシュのコントロールがうまくいっていない場合、WordPress自体のスタイルシートが正しく読み込まれず表示がくずれることがあるので、その場合、AzureポータルでCDNのキャッシュをPurgeしたり、ブラウザのキャッシュをクリアしたりすることが必要。

手順2 (Microsoft Azure Storage for WordPress)

https://ja.wordpress.org/plugins/windows-azure-storage/

画像をAzure Storageに保存するために利用

  1. WordPress設定画面のプラグインページでをMicrosoft Azure Storage for WordPressインストール・有効化

  2. プラグインの設定画面で、ストレージアカウントやキーなど各種Azure Storageの情報を入力。CNAMEは、CDNで指定した画像のカスタムドメインを入力。文字列最後のスラッシュ(/)を忘れずに

手順3 (その他プラグイン)

その他、おすすめ、プラグイン。

プラグインがうまく動作しない場合は、wp-config.phpの修正で「JavaScript 連結の無効化」を実施。

Microsoft Azure App Service 上で、コストパフォーマンス最強にWordPressの構築する (その3)

Azure Storageの作成・設定

無料のWeb Appsは、ストレージ容量が1GBと心許ないのと、ウェブサイト全体のパフォーマンスを向上させるため、画像は Azure Storage 保存。WordPressプラグインで画像はStorageに保存されるように設定

手順1(Azure Storageアカウントの作成、および、設定)

  1. Azure Storage アカウントを作成。Storage アカウントは、App Service /Web Appsと同一のリージョンを指定。BLOBさえ使えれば、どんなタイプでも構わない。

  2.  blob のコンテナを作成。コンテナ名が画像が格納されるディレクトリ名になるので、imagesなどがオススメ。Public Access Levelはblobに設定(設定しないと公開出来ない)。

CDNエンドポイント作成

Web App / Storage ともにCDN経由でアクセスする

手順1(CDNプロファイルの作成)

  1. Pricing tierは、Standard Microsoftがおすすめ(30Xレスポンスなどもキャッシュしてくれるので)。適当な名前をつけて作成。

  2. 作成済みのWeb Apps / StorageのCDNエンドポイントを作成

  3. CDNの設定|キャッシュ規則 で「クエリ文字列のキャッシュ動作」を「クエリ文字列に対するキャッシュをバイパス」に設定する

カスタムドメイン・証明書の設定

CDNのエンドポイントを作成した、Web Apps / Storageにカスタムドメインを適用し、更に証明書を導入する(Azure CDNの機能)

手順1(CDNエンドポイントにドメインを適用)

  1. DNSにWeb AppとStorage用のカスタムドメインのCNAMEを作成する
    例 example.comがカスタムドメインで、WordPressを blog.example.comに、
    画像のStorageをimg.example.comのカスタムドメインにする場合:
    blog.example.com hogewebapp.azureedge.net
    img.example.com hogestorage.azureedge.net

  2. (Option cdnveriyを使って証明書を適用する場合 )証明書適用するためのCNAME(cdnverify)を作成
    上記の場合の例:
    cdnverify.blog.example.com cdnverify.hogewebapp.azureedge.net
    cdnverify.img.example.com cdnverify.hogestorage.azureedge.net

    手順は、
    https://docs.microsoft.com/ja-jp/azure/cdn/cdn-custom-ssl?tabs=option-1-default-enable-https-with-a-cdn-managed-certificate#custom-domain-is-not-mapped-to-your-cdn-endpoint
    参照

  3. カスタムドメイン適用後、Azure PortalのCDN設定で[カスタム ドメイン HTTPS]を有効にする。上記、Optionを実施していない場合、上記手順に記載されているとおり管理者アカウントにDigicertからメールがおくられ、承認フォームに誘導されるのでそこで承認

証明書がインストールされるのに、数時間かかるので注意

 

Microsoft Azure App Service 上で、コストパフォーマンス最強にWordPressの構築する (その2)

 

WordPress ファイルの取得、および、SQLiteサポート構成に変更

手順1(アップロードするファイルの作成)

  1. WordPress本体をオフィシャルサイトからダウンロード
    https://ja.wordpress.org/download/

  2. WordPress用SQLiteプラグインのダウンロード
    https://github.com/jumpstarter-io/wp-sqlite-integration
    ※2015年以降更新されていないので、ガイドライン違反でWordPressプラグインサイトからはダウンロードできないので注意

  3. B.の手順でインストールするファイルをローカルで統合し、そのファイル群でZIPファイル化(Web AppsのAdvance Toolでデプロイする場合)

WordPressをインストールするWeb Appsの準備

手順1(Azure App Serviceの準備)

リソースグループをつかうことによって管理をしやすくする。以降、リソースを作成する際は、作成したリソースグループを利用

  1. リソースグループを作成

  2. A.で作ったリソースグループ内に無料枠のApp Service/Web Appsを作成
    Azure Insightsの可用性テストのテスト元のロケーションがあるリージョンに作成することをオススメ。そうすることで、pingテストする通信料を削減可能
    App Service Planは、Windows (無料プラン)/ PHP  で作成

手順2(PDO Driver for PHPのインストール)

‘PHP 7.2?以降では、SQLite用のPDO Driver for PHPが標準ではインストールされていないので、このドライバを手動で追加

  1. Azure App Service での PHP の構成方法( https://docs.microsoft.com/ja-jp/azure/app-service/web-sites-php-configure) で作業

  2. 該当ドライバは、Web AppsにAdvanced Tools内のcmdもしくはpowershellを使ってコピー。ファイルの在処は D:Program Files (x86)PHPv7.4ext (Version 7.4の場合)。PHPのバージョンにあわせてコピーするドライバを変更

    1. ドライバをコピーするディレクトリを作成
      md d:\home\site\ext

    2. ファイルを該当php_pdo_sqlite.dllをディレクトリからコピー
      copy “d:\Program Files (x86)\PHP\v7.4\ext\php_pdo_sqlite.dll” d:\home\site\ext

    3. iniファイルを保存するディレクトリを作成
      md d:\home\site\ini

    4. Ini 設定を使用して構成 (https://docs.microsoft.com/ja-jp/azure/app-service/web-sites-php-configure#configure-via-ini-settings )を参考に、以下のコードを extensions.ini ファイルをc.で作成したディレクトリに作成
      extension=d:\home\site\ext\php_pdo_sqlite.dll

    5. Ini 設定を使用して構成(https://docs.microsoft.com/ja-jp/azure/app-service/web-sites-php-configure#configure-via-ini-settings )の通り、アプリケーションの設定で、PHP_INI_SCAN_DIR というキーに d:\home\site\ini を値で設定

    6. 一旦、Web Appsを再起動し、iniファイルを読み込ませる

    7. <? phpinfo(); ?> というindex.phpをweb appsのルートに配置し、phpinfo()を実行させ、pdo_sqliteがロードされているかどうか確認。確認できたら、index.phpを削除

 

Microsoft Azure App Service 上で、コストパフォーマンス最強にWordPressの構築する (その1)

構築するWordPressの仕様

      • 独自ドメイン

      • https通信

構成

ウェブサーバー

      • App Service F1 (Windowsベース、無料)
        PHPランタイム入り

データベース

      • SQLite(WordPressドロップインプラグインとして導入)

オブジェクトストレージ(画像保存/バックアップ/ログ保存)

      • Azure Storage (BLOB)

WordPress プラグイン

      • Cache-Control

      • Microsoft Azure Storage for WordPress

大まかな流れ

      1. SQLite用にWordPressを改変

      2. デプロイ先のWeb Appsを準備

      3. 画像等用のStorageを作成

      4. CDNエンドポイントを作成

      5. カスタムドメイン・証明書を構成

      6. WordPressインストール・初期設定

      7. 各種WordPressプラグインのインストール・設定

      8. 運用

「WordPress x.x.x が利用可能です。サイト管理者にお知らせください。」とでて更新できないときの対処

はまった。

WordPress を更新しようと管理画面にアクセスしたら、「WordPress 5.2.2 が利用可能です。サイト管理者にお知らせください。」と表示される。ログインしたユーザーは管理者権限あるユーザー。

なのに、このメッセージが表示されて、困って悩んだ。

原因は不明だが、以下の方法で、回避できた。

wp-config.php に以下の記述を追加

define(‘DISALLOW_FILE_EDIT’, false);
define(‘DISALLOW_FILE_MODS’, false);