Closed7

2016年に作ったWordPressサイトをDocker環境に復旧させる

gensukegensuke

まずはスタート

BackWPupでバックアップしたアーカイブが手元にありました。

docker、docker-composeのインストールの工程は、端折らせていただきます。

docker-compose.ymlの中身は、environment項目を除いてほぼこちらから拝借(→あとlatestを嫌って、wordpress:php8.1-apacheイメージを選択)。
https://qiita.com/tomokei5634/items/75d2501cfb968d0cfab5

phpmyadminは、後々楽なので入れといたほうがいいです。
(何かあったときの復旧のため、起動直後のDBはエクスポートしておくのが無難)

WordPressのバージョンが現在6越え、2016年当時は4.5.3😅……多難な気しかしません。

gensukegensuke

案の定のエラー

当初バックアップしたファイルと全取っ替えしてましたが、結局テーマのインポートと、wp_config.php、wp_content/up_loadsだけ移せばいいことに気づきました💦

いよいよDBのインポートですが、phpmyadminなら簡単です。
早速docker-composeのリスタートで、mysqliのエラー、加えてapache2にもエラーが発生するため、以下の設定をDockerfileに記述し、リビルドして再スタート。

Dockerfile
FROM wordpress:php8.1-apache

RUN docker-php-ext-install mysqli
RUN echo "ServerName localhost" | tee /etc/apache2/conf-available/fqdn.conf
RUN a2enconf fqdn
gensukegensuke

データベースのURLを書き換える

以前は、VPSを利用しての公開でしたので、phpmyadminで以下のテーブルでドメインを書き換えます。

UPDATE wp_options SET option_value=REPLACE(option_value,"旧ドメイン","新ドメイン");
UPDATE wp_posts SET post_content=REPLACE(post_content,"旧ドメイン","新ドメイン");
UPDATE wp_posts SET guid=REPLACE(guid,"旧ドメイン","新ドメイン");
UPDATE wp_postmeta SET meta_value=REPLACE(meta_value,"旧ドメイン","新ドメイン");

gensukegensuke

あれ、ログインできない…

dockerも通常に走る、ドメインも書き換えた…docker-compose.ymlファイル、wp_config.phpファイル内のユーザー名、パスワードも一致も、http://127.0.0.1:ポート番号/wp-login.phpからユーザー名、パスワード不一致でログインできません🤯
しばらく、詰まりまった挙句…

テーブルwp_usersの変更も必要。
useu_login、user_passカラムを新しいものに変更!user_passには、関数をMD5にします。
ログインできました😆

(愚痴)前コメントのデータベース書き換えと一緒に掲載しているサイトないの?

gensukegensuke

xmlファイルをインポート

過去のアーカイブから、xmlファイルをインポートします。
隠しファイルになっているので、ファイル名を変更してWordPress「設定」より、投稿、固定ページをインポート。

さっそく、サイトを確認。固定ページ表示...されません💧

WordPressをデバックモードにして確認します。
wp-config.phpファイル内の「/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */」の前に以下を追加して、wp-content/debug.logを出力するようにします。

wp-config.php
// Enable WP_DEBUG mode
define( 'WP_DEBUG', true );

// Enable Debug logging to the /wp-content/debug.log file
define( 'WP_DEBUG_LOG', true );

// Disable display of errors and warnings
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

// Use dev versions of core JS and CSS files (only needed if you are modifying these core files)
define( 'SCRIPT_DEBUG', true );
gensukegensuke

やっぱりPHPが古かった

page.phpにて、Undefined constantというエラーが…要するに

// 正常なコード
$array['a'] = ' ';

// エラーが発生するコード
$array[a] = ' ';

PHP8以降、配列のキー名をクオーテーションで囲わなくてはならなくなったためのようです。

修正後、固定ページが無事表示されました!(画像はまだ)

この時点これでも良かったかもですが、私の場合 Undefined array key の警告に加え、mb_convert_kana()にPassing null to parameter #1 ($string) of type string is deprecated なるエラーも吐いていたので、定義した関数内、以下 if(isset(... を追記したところ、エラーが消えました。
ここで、デバックモードをオフ。

functions.php
- $squery = $wp_query->query['s'];

+ if ( isset($wp_query->query['s']) ){
+    $squery = $wp_query->query['s'];
// 以下mb_convert_kana()を施し、return

$wp_query->query['s']が連続してしまっています。もっと良い記述方法があるかと思いますので、アドバイスいただけたら、ありがたいです。

gensukegensuke

画像は…

当初、URL、http://.../wp-admin/options.phpから、「upload_path」「upload_url_path」項目にwp-comtent/uploadsという方法をとっていましたが、引き続き画像は表示されません。

Chrome DevToolからの画像リンクアドレスにも間違いはありませんでしたが、コンソールから、“403 Forbidden”のエラーを発見!どうやら、ファイルのパーミッションが問題だったようです。

403 Forbiddenの原因と解決方法について│キーワードファインダー https://keywordfinder.jp/blog/seo/403-forbidden/

Dockerで作成したWordPressは、web-dataという所有者、所有グループでしたので、アーカイブから移動させたuploadsフォルダ内のパーミッションをすべて、www-dataに変更します。下記の方法で一気に変更できます。

find (uploadsフォルダまでの相対パス) -exec chown www-data:www-data {} \;

画像も表示されました!😆
(プラグインは一から手入れでしたが、この方法ならアーカイブからpluginsフォルダ以下移動だけですんだかもしれませんね💧)

これで過去の栄光に浸れます。

最後に、初投稿でしたので当初Openしっぱなしで更新を繰り返していたので、ご迷惑をお掛けした方もいらっしゃるかと思います。この場を借りて謝罪致します。

このスクラップは2023/01/22にクローズされました