|||||||||||||||||||||

なんぶ電子

- 更新: 

Word Pressサイトをローカル環境にコピー

WordPress Install

前回DockerでWord Pressをインストールしました。

簡単だという触れ込みでしたが、Docker初心者の筆者にはコンテナの扱いが難しかったので、そちらでの運用はもう少しDockerについての知識をつけてからにすることにし、以前作成したKVMを使ってインストールしなおすことにしました。

インストールが終わったら、Webサービスで設置済みのサイトからデータをコピーしてきて、クローン環境を作成してみたいと思います。

環境の作成

筆者の環境はDebian11(bullseye)、Apache、MariaDBです。PHPのバージョンは7.4です。

それらをまとめてインストールします。

$ su -
...
# apt update
...
# apt install mariadb-server apache2 php7.4 php7.4-mysql php7.4-mbstring
...

/etc/mysql/mariadb.conf.d/50-server.cnf内の設定で、character_set_serverがutf8mb4、collation-serverがutf8mb4_general_ciとなっていることを確認します。

mariaDBにWord Press用のデータベースと、ユーザー名を作成し、ユーザーにはパスワードを設定します。ここではデータベース名:wpdb、ユーザー名:wordpress、パスワード:wppassとしました。

Debianの管理者権限からmysql -u rootと入力すると、管理者としてMariaDBのコンソールに入れます。

# mysql -u root
...
/* データベースの作成 */
MariaDb[(none)]> create database wpdb;
...
/* ユーザーの作成 */
MariaDb[(none)]> create user wordpress;
...
/* ユーザーに権限の付与とパスワード設定 */
MariaDb[(none)]> grant all privileges on wpdb.* to 'wordpress'@'localhost' identifined by 'wppass';
...
/* MariaDBのコンソール終了 */
MariaDb[(none)]> exit

環境のインストール

WORD PRESS.ORGのダウンロードページから、.tar.gzをダウンロードします。

ダウンロードが終わったら、展開します。

# wget https://ja.wordpress.org/latest-ja.tar.gz
...
# tar vzxf latest-ja.tar.gz

wordpressディレクトリ内にあるwp-config-sample.phpを、wp-config.phpにコピーして、先ほど設定した値に編集します。サンプル中のコメントはWord Pressオリジナルのものです。また、下線部以外はデフォルト値です。

/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'wpdb' );

/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'wordpress'  );

/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'wppass'  );

/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );

/** データベースのテーブルを作成する際のデータベースの文字セット */
define( 'DB_CHARSET', 'utf8mb4'  );

/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define( 'DB_COLLATE', '' );
...

wordpress以下のファイルすべてをWebルートに移動させます。

# mv wordpress/* /var/www/html

ブラウザからインストール用のページにアクセスします。ここでは「http://192.168.1.1/wp-admin/install.php」としてありますが、ルートディレクトリ以外に設置した場合はドメインとwp-adminの間に適切なパスを入力してください。

http://192.168.1.1/wp-admin/install.php

WordPress Install

必要事項を入力すれば設定完了です。

クローン環境の作成

今度は稼働中のサイトからクローンを作ります。

コピー元とコピー先のPHPのバージョンの違いによって動かない可能性もあるので確認しておきます。

元となるサイトからWord Press用のファイルをすべてコピーしドメイン以下のディレクトリ構造が一致するように配置します。

ファイルの所有権と権限を修正します。おそらくapache環境ならなら所有権とグループをapacheユーザー(www-data)にするだけでいいと思います。権限がわからなかったらコピー元のサイトを参考にするといいと思います。

.htaccessを使用しているようなら、/etc/apache2/apache2.confのDirectoryのエントリーでAllowOverride Allを設定します。

apache2.conf

...
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

mod_rewrite等、デフォルトでは使用されていないモジュールがあるならコピー元に合わせて有効にします。

コピー元でシェルが利用できるなら、利用しているmodの一覧は、「apachectl -M」で表示されます。使えない場合は、.htaccessファイル等のmod_xxxエントリーをたよりに確認します。

# a2enmod rewrite
...
# a2enmod ssl
...
# a2ensite default-ssl
...
# systemctl restart apache2
...

次に、サイトのデータベース(MySQLかMariaDB)からデータベースのダンプ(エクスポート)をとります。

phpMyAdminが使えるならエクスポートを選択し、フォーマットを「SQL」を選択します。今回はどちらもutf8mb4で運用している前提なのでエンコーディングの変更はしません。

export mysql

コピーしてきた、wp-config.phpを開いて利用しているユーザー名やパスワード、データベース名を確認します。

ユーザーやパスワードが違っていたら、コピー先のwp-config.phpを書き換えるか、設定に合うようにデータベースにユーザーを追加します。

ホスト名(DB_HOST)はlocalhostに変更します。

データベース名の部分は、もしすでに同じ名前のデータベースがコピー先にあったら、混在防止のために別の名前のデータベースを作ってデータをインポートし、wp-config.phpのデータベース名を新たなデータベース名にします。エクスポートしたデータはデータベース名を保持していませんのでどのデータベースにもインポートできます。

同名のデータベースが不要ならdrop databeseコマンドで一度削除して作り直す方法もあります。

# mysql -u root
...
/* データベースの一覧出力 */
MariaDb[(none)]> create database wpdb;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| wpdb               |
+--------------------+
/* クローン用のDB作成 */
MariaDb[(none)]> create database wpdb2;

/* MariaDBコンソールから抜ける */
MariaDb[(none)]> exit;

OSのコンソールでインポートを実行します。ダンプしたファイルをdump.sqlとしています。
# mysql -u root wpdb2(インポート先のDB名) <dump.sql

最後に、Kinsta:「WordPressのURLを変更する方法(4つの簡単な手段)」を参考にして、データベース内のoptionsテーブル(xxxxxx_optionsとなっている場合もあります)にある、ホームページのドメインを変更します。

MariaDb[(none)]> update options set option_value='https://192.168.1.1/home/' where option_id=1;
MariaDb[(none)]> update options set option_value='https://192.168.1.1/' where option_id=2;

筆者の環境ではmod_rewriteでのhttpからhttpsのリダイレクトがうまくいかず、「このページは動作していませんkrep.komart.jp でリダイレクトが繰り返し行われました。 Cookie を消去してみてください.ERR_TOO_MANY_REDIRECTS」というエラーが出ました。下記リダイレクトの設定中で、ENV:HTTPS環境変数にonの値がSSL通信でも入らないことが原因のようでした。

これをMRS:「SSL化によるリダイレクト処理の方法」を参考に、「RewriteCond %{HTTPS} off」という書き方に変えたところうまく機能するようになりました。

<IfModule mod_rewrite.c>
    RewriteEngine on 
    RewriteCond %{REQUEST_URI} !^/info/wp-cron.php$
    # RewriteCond %{ENV:HTTPS} !on # うまく動かない
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
</IfModule>

参考にさせていただいたサイトの皆様、ありがとうございました。

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告