コンテンツへスキップ

webサーバ移転後にサイトが真っ白のままという事例は多々ある。
大抵は、プラグインやテーマ、コンフィグ、またはデータベース周りの修正すると治るのだが、
今回は全てだめだった。エラーもない200のレスポンスだったので相当参った。

色々と確認した結果、同じディレクトリにindex.phpとindex.htmlがあったので、
index.htmlが競合してると思い削除をしたところ解決した。

おそらく、検証中にindex.htmlを作成していてそれを消し忘れたのだと思う。

CHATGPTに聞いたところ、以下のように空のファイルのindex.htmlが優先されていただけらしい。

同じディレクトリにindex.phpとindex.htmlの両方がある場合、サーバーの設定によって優先的に読み込まれるファイルが決まります。通常、index.htmlが優先されることが多く、この場合、WordPressのindex.phpが無視されるため、WordPressのページが正しく表示されず、サイトが真っ白になることがあります。

解決方法:

  • 不要なindex.htmlを削除する。
  • サーバーの設定(例: .htaccessファイル)でindex.phpを優先するように変更する。

サーバ移転後にサイトにエラーが出た場合、PHPのバージョンを変更することで解決するのですが、今回は解決せずに上記のエラーが発生。
調べてみるとWordPressのテーマが悪さをしていた

どうやら以下サイトによると「BizVektor」というテーマが原因だそうです。
画面真っ白など、まさにその通りでした。
https://wp-customize.net/wordpress/7834.html

結果的に以下ファイルの
23行目の「break」の行頭にコメントアウト「//」と入力して保存してサイトが表示されました

/公開フォルダ/wp-content/themes/biz-vektor/design_skins/003/003_custom.php on line 23

サーバ移転後にWordPressのサイトがTOPページ以外がエラーになることが度々あります。
理由は主に以下です
・DB内のURLの設定先が間違っている
・パーマリンクがおかしくなっている

今回は、パーマリンクがおかしくなっている場合に焦点をあてます

一番簡単な方法はWordPressにサインインしてパーマリンク設定で
何も変更せずに「変更を保存」をクリックすることで解消されます。

ただし、都合によってWordPressにサインインができないできないケースがあります。
その場合、phpMyAdminから修正します

phpMyAdminにログイン後、wp_optionsテーブルにて
option_name の列からpermalink_structureの行で編集を選択します

option_value」のフィールドでテキストを選択し、そのままエンター。
そして、「実行」を選択します

上記の後に対象のWordPressのサイトを確認すると404エラーが解消していると思います

参考
https://jp.godaddy.com/help/reset-wordpress-permalinks-to-fix-the-404-error-26351
https://jp.godaddy.com/help/reset-wordpress-permalinks-in-the-database-26352

Docker Desktop for Windowsを使ってローカル環境内でWordPressの立ち上げまで進めることができたのでまとめます。

Dockerをインストール

以下サイトに沿ってDockerをインストールします

https://docs.docker.jp/docker-for-windows/install.html

dockerがインストールされた場合、以下コマンドでDockerのバージョンが確認できるようになります。

docker --version
Docker version 20.10.17

docker-compose.yamlを作成

次に、docker-compose.yaml ファイルを作成します。
内容は以下の通りです。

docker-compose.yaml

version: '3.8'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: user
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: db
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:

Dockerの立ち上げ

上記のファイルを作成したら、
ファイルを作成したディレクトリ上で以下のコマンドを押下します。

docker-compose up -d

Dockerが立ち上がると以下URLにてWordPressのインストール画面へ接続できるようになります。

http://localhost:8080

Dockerを終了したい場合は以下のコマンドで終了します。

docker-compose down

WordPressの画面が表示できないことを確認したら一連の流れは終了です。

タイトルの通り、データ移行を実施したけども詰まってしまったので記録する。
なお、WordPress内のデータを移行している


作業順序は次の通り。
1.pleskでドメイン>>「ドメインを追加」で新しいドメインを作成する。
2.作成したドメインからデータベースを作成する。
※ここでドメイン名やユーザー名を移転元の通りにするとエラーが発生したから名前を変更した。
あとでWordPressのコンフィグデータも変えておくこと。

3.移転元の「データベース」から「ダンプをエクスポート」を選択してバックアップを取得。
→「作成後にダンプを自動的にダウンロード」にチェックをつけると作業が楽になる
4.移転元の「ファイルマネージャー」からバックアップしたいファイルを項目の右側の設定からダウンロードする。

5.「ファイルマネージャー」でドキュメントルート以下にサブディレクトリ用の新規ディレクトリを作成する
6.新規ディレクトリ以下にファイルをアップロードする。 
7. 移転元の「データベース」から「ダンプをインポート」を選択してリストアする。
8.hosts,ファイルを変更するなどをして移転先のURLにアクセスしてサイトの調子を確認する。
9.画像が非表示されたりするはずなので、画像のパスを変更する。

今回は9で詰まった。
まずパスを変更する場所が見つからなかった。
一番早いのはssh接続から検索するのが手っ取りばやい。
私の場合は下記コマンドで検索をした。

ファイル内の文字列を検索してくれる

find . -type f -print | xargs grep 検索したいファイル名

今回上記を利用してヒットした箇所はWordPressのtheme以下のファイル内であった。

ちなみにssh接続できない場合、plesk内の「ファイルマネージャー」からファイルが編集できる
今回、これで終わりかと思ったけどサイト内でまだ表示がされないファイルがあったためにさらに詰まった。

サイト内で「ページのソースを表示」して、表示されない画像を検索すると確かにパスが変更されていなかった。
しかし、その画像の表示をさせるためのソースが実際にssh接続から探してもどこにもなかった。

結果的には、plesk内の「phpMyAdmin」からデータベース内を探して見つけた。
自分の場合は、**_posts テーブル内の値が「post_content」のところで画像を検索するとヒットした。

10.データベース内のファイルのパスを「検索と置換」で変更する
下の画像のように設定する。

実行ボタンを押してもその後、どの箇所が変更されるか確認できるページに遷移できる。

11. 改めてサイトを確認して問題がなければデータ移行完了。

検索してもヒットしなかったのでメモ

まず下記へディレクトリへ移動する

cd /etc/apache2/sites-available

000-default.conf内に下記を記載してhttpからのアクセスでもhttpsへリダイレクトするようにする。


            RewriteEngine On
            RewriteCond %{HTTPS} off
            RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

default-ssl.conf内に下記を記載して自分のwebサーバーのIPからアクセスされた場合、拒否をする。

       ServerName 対象のIP
       <Location />
             Order deny,allow
             Deny from all
       </Location>

どちらも<VirtualHost *:数値>内のタグに記入すること。

上記に変更後、apache2を再起動後にサイトにhttp://IPでアクセスして
403エラーになれば成功です。

借りていたサーバーを移転しなければならないので、新たにVPSを借りてブログのデータを移行していました。
せっかくだからOSは題名の通りUbuntuに変えました。環境の練習になるので。

Ubuntuのログイン方法はCentOSとは異なるから注意。
慌ててOSの再ダウンロードとかしないように。

まずは、ログイン方法としてユーザー名は、[root]ではなく[ubuntu] であることに注意。
そして、スーパーユーザーに昇格するためにrootのパスワードを作成する必要があります。

passwd root

上記で新しいパスワードを設定した後に su - コマンドから設定したパスワードを入力するとroot権限になります。

参考
https://qiita.com/_toki/items/cced337d72103ed4387c

この後はssh接続方法を公開鍵認証方式にするとかやりますが、ミドルウェアのインストールで失敗とかしたら
最悪OSの再インストールとか面倒なので、先にデータベースをインストールしました。

MariaDBのインストールは下記サイトの通りに進めています。
https://www.server-world.info/query?os=Ubuntu_20.04&p=mariadb&f=1

Apache2とかPHPも上記サイトのカテゴリを参考にしてインストールしました。

ミドルウェアを落とすと次に必要なのは、データです。
まず、移転元のサーバーにssh接続をして、WordPressの対象データをアーカイブ圧縮します。
私の場合はドキュメントルート以下と証明書のファイルをアーカイブして圧縮しました。

tar -czvf アーカイブ.tgz 対象ファイル

ファイルのアーカイブを作成しgzip形式で圧縮する

次にデータベースをダンプします。

mysqldump --opt データベース名 > 適当なデータベース名


上記のデータをFTP等を利用して新サーバーに転送します。

新サーバーでは、データを入れるためにmysqlにログインし、
データベースを作成します。

mysql -u ユーザー名 -pパスワード
create database データベース名

mysqlから接続を遮断後、データベースをリストアします。

mysql 作成したデータベース < ダンプデータベースファイル名

リストアの確認はmysqlにログイン後、対象のデータベース内のテーブルを確認してみたらいいと思います。

次にドキュメントルート以下にファイルを解凍

tar -xzvf アーカイブ.tgz

gzipで圧縮されたアーカイブを展開する

この後はWordPressのコンフィグファイルの設定でパスワード等をいじったら、サイトの確認をしてください。
http://対象のIP で確認できると思います。
私の場合は、サイト内で下記エラーが発生していました。


お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。

エラーに従ってMySQLの拡張モジュールをインストールしました。

apt -y install php-mysql

その後、サイトを確認すると
データベースの接続ができません
のエラーに変化していました。
大抵はWordPressのコンフィグファイルのパスワードの打ち間違いとかですが、そうでもなく少しハマりました。
色々調べたところ、WordPressのコンフィグファイルのhostname を localhost から 127.0.0.1 に変えたところ
サイト内が重大なエラーが発生と表示が変わりました。
上記の場合、Apache内のエラーログを確認したら原因がわかります。
今回の場合、とあるpluginからエラーが発生していたのでそれの権限を000にするとサイトが正常に表示されました。
サイトが見れたからいいものの、コードをみやすくするためのプラグインだったので少し不便になりましたw
代わりのプラグイン見つけないと......

次に証明書の設置です。
下記サイトが参考になりました。
https://blog.fileshelfplus.com/vps/280

少しハマったところは、新サーバーのサイト内に証明書の期限が有効であるのに証明書としては無効であること。
結果的にDNSサーバーのAレコードを移転元から移転先に変更すれば問題なく証明書が有効となりました。

これでひとまずはデータ移行の終了です。

その他参考
ubuntuでcronの設置
https://intellectual-curiosity.tokyo/2018/10/12/ubuntu%E3%81%A7%E3%81%AEcron%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/

ubuntuでファイアウォールの設置
https://lifework-blog.com/ubuntu-server-firewall/

アップデートがうまくいかずに苦労した。
結果的には権限の問題。ドキュメントルート以下のオーナーとグループの名前をapacheにしたら解決。

参考
https://webbibouroku.com/Blog/Article/wordpress-update-error