WordPress更新時にデータベースの更新が必要な場合があり、SQL Lite Integrationを使っていて、更新を実施すると「このサイトで重大なエラーが発生しました。」というエラーが発生することがある。
詳しくしらべていないけれども、今日(2023/08/23)現在、以下のdb.phpに更新することで、データベースの更新が可能になる。
WordPress更新時にデータベースの更新が必要な場合があり、SQL Lite Integrationを使っていて、更新を実施すると「このサイトで重大なエラーが発生しました。」というエラーが発生することがある。
詳しくしらべていないけれども、今日(2023/08/23)現在、以下のdb.phpに更新することで、データベースの更新が可能になる。
MySQL無しにWordPressを利用するためのプラグイン「SQLite Integration( https://ja.wordpress.org/plugins/sqlite-integration/advanced/ )」。デファクトとも言えるのだけれども、いかんせん古く、すでにダウンロードもできなくなっている状況。ただし、PHP7.X時代までは、一部問題点もあったけれども、「SQLite Integration update-option Patch」ってのもあって、使っている人も少なくないかも。と思ったらダウンロード数6万弱。多いのか少ないのか。。。
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以前のコーディングに依存している模様。
これで解決。WordPressを新規に立ちあげるなら、最初から、wp-sqlite-dbの利用で良さそう。SQLite Integrationからの移行が気になるところだったのだが、とりあえず、db.phpの入れ替えだけで動いているようにみえる。入れ替えの前には、バックアップをオススメのと、リスクは考慮した上での実行が必要。
他のプラグインとの兼ね合いもあるしね。
Azure App Service (Web Apps)のWindows版で、WordPressを運用していたのだけど、Windows 版 PHPのEnd of Lifeで、年末には使用不要になりそうということで移行先の検討。
CDN配下に配置するということで、最小限のスペック、かつ、管理を簡易化するために、sqliteを使ってデータベースのバックアップをしないという大胆な運用。
で、候補にあげたのが、さくらレンタルサーバー。年1,600円。マルチドメインも20個作れる。2週間お試しで、移行できるかの検証。
結論としては、移行可能そうな感じ。ただ、いくつか注意点があるので、備忘録として記す。ポイントは2点。
これ設定解除しないと、WordPressの管理画面に入れない。
国外IPアドレスフィルタ – さくらのサポート情報 (sakura.ad.jp)
ホスト名がCDNではなくオリジンになってしまうので、強制的に、CDNがサーバーのURLになるように変更。
$_SERVER['HTTP_HOST']='www.example.com';
あとは。画像をオブジェクトストレージに保存するとか、cache-controlのプラグインを入れる等々のCDN運用時の通常作業でOK.
define('CONCATENATE_SCRIPTS',false);
とりあえず、上記をwp-config.phpに追加してみるとよいかも。
データベースがSQLiteのため、Web Apps上ファイルのバックアップを実施することでフルバックアップできる。Web Apps で利用している、App Service PlanがFreeプランのためそのままでは、Web Appsのバックアップができない。Standard以上に変更してバックアップする。
リストアは、直接上書きするのではなく、Deployment Slotを活用して、安全にリストアする。
(初回のみ)バックアップを保存するBlobコンテナを作成、Storageアカウントは、画像を保存したアカウントでもOK。Blobコンテナのアクセス権は、プライベートに設定。
App Service PlanをS1以上のプランに変更
A.で作成したBlobコンテナをバックアップ先として、Web Appsのバックアップを設定、バックアップの実行
バックアップ終了後、忘れずに、App Service PlanをFreeプランに変更
App Service PlanをStandard以上に変更
Deployment Slotを作成
Deployment Slotにバックアップをリストア
Slotを入れ替える
(念のため)Web Appsを再起動する
Application Insightの「URLのPingテスト」を利用。コンテンツの一致まで確認することにより改竄検知にもなる
Web Appsのログ収集機能を利用
事前にバックアップを作成。WordPress本体を更新する際は、Web Appsを実行しているサーバーのリソースを確保するために、App Service Plan をStandardプラン以上に設定してからWordPress更新を実施。
プラグインの更新は、Freeプランで実施してしまっても良いかも。
PDOドライバがPHPランタイムのバージョン毎にことなるので、上記、PDO Driverインストイイールの手順をPHPランタイムのバージョンにあわせて実施
手順1で作成したSQLiteに対応したWordPressをWebAppsにコピー
FTP、その他、方法は問わない
(インストール1でzip化してるのであれば、Web AppsのAdvanced Toolsを使ってドラッグ&ドロップでコピーできる。https://docs.microsoft.com/ja-jp/azure/app-service/deploy-zip)
FTPを利用できないようにして、デプロイ方法を限定する。httpのバージョンとARR Affinityをよりパフォーマンスの高いように設定する
FTPをDisableに設定
HTTP versionを2.0に設定
ARR affinity をOffに設定
設定したカスタムドメインに対してアクセスし、インストーラーを起動、適切なサイト名、ID、パスワード、メールアドレスなど適切に入力
WordPressにログイン(/wp-admin)し、管理者画面に移動
WordPressの設定の一般設定で「WordPress アドレス (URL)」と「サイトアドレス (URL)」をカスタムドメインのアドレスに変更する(*.azurewebsites.netのアドレスになっている場合)
WordPressの設定のパーマリンク設定を「基本」以外のクエリ文字列形式ではないページ指定に変更する。これを変更しておかないとCDNでキャッシュされない
今回の構成で必要なプラグインをインストール
https://ja.wordpress.org/plugins/cache-control/
CDNを利用しているため、各ページのキャッシュクリアのタイミングを設定するために利用
WordPress設定画面のプラグインページでcache-controlをインストール・有効化
必要に応じて、設定画面でパラメーターを変更
注:キャッシュのコントロールがうまくいっていない場合、WordPress自体のスタイルシートが正しく読み込まれず表示がくずれることがあるので、その場合、AzureポータルでCDNのキャッシュをPurgeしたり、ブラウザのキャッシュをクリアしたりすることが必要。
https://ja.wordpress.org/plugins/windows-azure-storage/
画像をAzure Storageに保存するために利用
WordPress設定画面のプラグインページでをMicrosoft Azure Storage for WordPressインストール・有効化
プラグインの設定画面で、ストレージアカウントやキーなど各種Azure Storageの情報を入力。CNAMEは、CDNで指定した画像のカスタムドメインを入力。文字列最後のスラッシュ(/)を忘れずに
その他、おすすめ、プラグイン。
WP Mail SMTP by WPForms(他のsmtpプラグインでもOK)
https://ja.wordpress.org/plugins/wp-mail-smtp/
Azure のマーケットプレイスで、sendgridなどメールサーバーのサービスを導入して設定する。ほぼ必須
WPS Hide Login
https://ja.wordpress.org/plugins/wps-hide-login/
セキュリティの強化、/wp-admin ではないログインURLに変更
WP Security Audit Log
https://ja.wordpress.org/plugins/wp-security-audit-log/
セキュリティの強化、ログイン履歴の確認など
その他、Google Analytics を設定するツールなどラグイン等々
無料のWeb Appsは、ストレージ容量が1GBと心許ないのと、ウェブサイト全体のパフォーマンスを向上させるため、画像は Azure Storage 保存。WordPressプラグインで画像はStorageに保存されるように設定
Azure Storage アカウントを作成。Storage アカウントは、App Service /Web Appsと同一のリージョンを指定。BLOBさえ使えれば、どんなタイプでも構わない。
blob のコンテナを作成。コンテナ名が画像が格納されるディレクトリ名になるので、imagesなどがオススメ。Public Access Levelはblobに設定(設定しないと公開出来ない)。
Web App / Storage ともにCDN経由でアクセスする
Pricing tierは、Standard Microsoftがおすすめ(30Xレスポンスなどもキャッシュしてくれるので)。適当な名前をつけて作成。
作成済みのWeb Apps / StorageのCDNエンドポイントを作成
CDNの設定|キャッシュ規則 で「クエリ文字列のキャッシュ動作」を「クエリ文字列に対するキャッシュをバイパス」に設定する
CDNのエンドポイントを作成した、Web Apps / Storageにカスタムドメインを適用し、更に証明書を導入する(Azure CDNの機能)
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
(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
参照
カスタムドメイン適用後、Azure PortalのCDN設定で[カスタム ドメイン HTTPS]を有効にする。上記、Optionを実施していない場合、上記手順に記載されているとおり管理者アカウントにDigicertからメールがおくられ、承認フォームに誘導されるのでそこで承認
証明書がインストールされるのに、数時間かかるので注意
WordPress本体をオフィシャルサイトからダウンロード
https://ja.wordpress.org/download/
WordPress用SQLiteプラグインのダウンロード
https://github.com/jumpstarter-io/wp-sqlite-integration
※2015年以降更新されていないので、ガイドライン違反でWordPressプラグインサイトからはダウンロードできないので注意
B.の手順でインストールするファイルをローカルで統合し、そのファイル群でZIPファイル化(Web AppsのAdvance Toolでデプロイする場合)
リソースグループをつかうことによって管理をしやすくする。以降、リソースを作成する際は、作成したリソースグループを利用
リソースグループを作成
A.で作ったリソースグループ内に無料枠のApp Service/Web Appsを作成
Azure Insightsの可用性テストのテスト元のロケーションがあるリージョンに作成することをオススメ。そうすることで、pingテストする通信料を削減可能
App Service Planは、Windows (無料プラン)/ PHP で作成
‘PHP 7.2?以降では、SQLite用のPDO Driver for PHPが標準ではインストールされていないので、このドライバを手動で追加
Azure App Service での PHP の構成方法( https://docs.microsoft.com/ja-jp/azure/app-service/web-sites-php-configure) で作業
該当ドライバは、Web AppsにAdvanced Tools内のcmdもしくはpowershellを使ってコピー。ファイルの在処は D:Program Files (x86)PHPv7.4ext (Version 7.4の場合)。PHPのバージョンにあわせてコピーするドライバを変更
ドライバをコピーするディレクトリを作成
md d:\home\site\ext
ファイルを該当php_pdo_sqlite.dllをディレクトリからコピー
copy “d:\Program Files (x86)\PHP\v7.4\ext\php_pdo_sqlite.dll” d:\home\site\ext
iniファイルを保存するディレクトリを作成
md d:\home\site\ini
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
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 を値で設定
一旦、Web Appsを再起動し、iniファイルを読み込ませる
<? phpinfo(); ?> というindex.phpをweb appsのルートに配置し、phpinfo()を実行させ、pdo_sqliteがロードされているかどうか確認。確認できたら、index.phpを削除
独自ドメイン
https通信
App Service F1 (Windowsベース、無料)
PHPランタイム入り
SQLite(WordPressドロップインプラグインとして導入)
Azure Storage (BLOB)
Cache-Control
Microsoft Azure Storage for WordPress
SQLite用にWordPressを改変
デプロイ先のWeb Appsを準備
画像等用のStorageを作成
CDNエンドポイントを作成
カスタムドメイン・証明書を構成
WordPressインストール・初期設定
各種WordPressプラグインのインストール・設定
運用
はまった。
WordPress を更新しようと管理画面にアクセスしたら、「WordPress 5.2.2 が利用可能です。サイト管理者にお知らせください。」と表示される。ログインしたユーザーは管理者権限あるユーザー。
なのに、このメッセージが表示されて、困って悩んだ。
原因は不明だが、以下の方法で、回避できた。
wp-config.php に以下の記述を追加
define(‘DISALLOW_FILE_EDIT’, false);
define(‘DISALLOW_FILE_MODS’, false);