【WordPress】本番環境サイトをローカル環境へコピーする手順

WordPressサイトを本番からローカルへコピーする

本番運用中のWordPressサイトをローカル開発環境に移して再現する手順をメモ。

本記事のWordPressホスティング環境は、さくらのレンタルサーバでローカル環境はDocker Desktop(Mac OS版)を使用しています。

環境: WordPress 5.8.3、さくらのレンタルサーバ スタンダードプラン、Docker version 20.10.11, Docker Compose version v2.2.1

本番のWordPressリソースを取得する

本番環境からWordPressのリソース及び、DBデータを取得していきます。

DBテーブルのエクスポート

データベースから最新のデータが格納されているテーブルをエクスポートします。

(さくらのレンタルサーバーの場合)
サーバコントロールパネルからデータベース(phpMyAdmin)にログインし、WordPressで使用しているデータベースを選択しエクスポートタブをクリックします。

本手順の場合オプションは必要としないので設定はデフォルトのまま実行します。

実行後、テーブル作成とデータ挿入を行うsqlファイルがダウンロードされます。

WordPressファイルのダウンロード

本番環境からFTPクライアントを使用してWordPressサイトのコンテンツ及び、設定ファイルを取得します。

さくらのレンタルサーバーの場合WordPressリソースは、アカウント配下wwwディレクトリ内のwpディレクトリに設置されています。

/home/(ユーザ)/www/wp

ダウンロード対象

(FTPクライアントでWordPressリソース群を確認)

リソースのうち以下の3つを取得します。

wp-content/(ディレクトリごと全て)
wp-config.php
.htaccess

.htaccessはページのパーマリンクURLの書き換えのために必要となります。

(注意)SSL自動化プラグインを無効にする

本番環境で「Really Simple SSL」等、SSL自動化プラグインを使用している場合に非SSLのローカル環境では本番から取得したwp-contentに含まれるプラグインの資材をあらかじめ無効化しておく必要があります。

詳細は下記

【WordPress】ローカル環境でhttpアクセスがhttpsリダイレクトされないようにする

DockerでWordPress環境を作成

本番のリソースが取得できたら、Docker Composeを使用してローカルにWordPress環境を作成していきます。

Docker環境ディレクトリ構成

wp_env
├── db
│   └── sqls
│       └── example_db_wp.sql
├── docker-compose.yml
└── wordpress
    ├── .htaccess
    ├── wp-config.php
    └── wp-content

ローカル環境の任意の場所に上記の構成を作成し、本番から取得したWordPressリソースをwordpress配下に、本番DBからエクスポートしたsqlファイルをdb/sqls配下に置きます。

(wp_envは任意の名称)

各設定内容

wp-config.phpの設定、docker-compose.ymlの作成、sqlファイルの編集を行なっていきます。

1. wp-config.phpの編集

本番から事前にダウンロードしておいたWordPressの環境設定ファイルである、wp-config.phpの中身を本番用の設定からローカル環境用に変更します。

後述のdocker-compose.ymlの設定の場合、設定変更項目は「DB_HOST」のみでOKです。

DB_HOSTの設定値を本番環境のDBホストから後述するDocker Composeのサービス名「db」へ変更しておきます。

/** MySQL のホスト名 */
define('DB_HOST', 'db');
2. docker-compose.ymlの作成

docker-compose.ymlを以下の内容で作成します。

version: '3.8'

services:

  wordpress:
    image: wordpress:php7.4-apache
    restart: always
    ports:
      - 8080:80
    volumes:
      - ./wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: example_db_wp
      MYSQL_USER: example_user
      MYSQL_PASSWORD: example_password
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - ./db/sqls:/docker-entrypoint-initdb.d

Webサーバ、DBサーバのコンテナはそれぞれdocker hubに存在するオフィシャルのWordPressイメージ、MySQLイメージを元に作成します。

(Dockerイメージはデフォルトのまま使用するのでビルドし直す必要はありません)

WordPressイメージ
https://hub.docker.com/_/wordpress

MySQLイメージ
https://hub.docker.com/_/mysql

DBの環境設定をwp-config.phpに合わせる

services:「db」の設定項目、※MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORDの値をそれぞれ、wp-config.phpのDB_NAME、DB_USER、DB_PASSWORDの設定値に合わせます。

※コンテナ起動時に作成、選択されるデータベースとなる

左: wp-config.php、 右: docker-compose.yml

docker-compose.ymlの定義により、コンテナ起動時に他のWordPressリソースの作成と、エクスポートしたsqlファイルの実行が自動的に行われるようになります。

3. sqlファイルの変更(siteurl, home)

エクスポートしたsqlファイルからテーブル「wp_options」で管理されている「siteurl」と「home」の値を本番からローカル用の設定に変更します。

(テーブル接頭辞が設定されている場合)
sqlファイル内でwp_optionsへデータをインサートしている箇所を探す必要がありますが、本番環境DBでWordPressのテーブル接頭辞を設定している場合テーブル名はデフォルトの状態から接頭辞を含む形式に変わっています。

テーブル接頭辞は本番からダウンロードしたwp-config.php内に変数名table_prefixで定義されており、確認することができます。

wp-config.php
(例)

$table_prefix  = 'wp123xx';

(上記の場合、テーブル wp_options は wp123xxoptions となります)

テーブル接頭辞が確認できたら下記のINSERT文の箇所を探して値を変更します。

Before

INSERT INTO `wp123xxoptions` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES
(1, 'siteurl', 'https://pointsandlines.jp', 'yes'),
(2, 'home', 'https://pointsandlines.jp', 'yes'),

After

INSERT INTO `wp123xxoptions` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES
(1, 'siteurl', 'http://localhost:8080', 'yes'),
(2, 'home', 'http://localhost:8080', 'yes'),

上記のようにsiteurl、homeの値を本番URLからローカル環境のURL(localhostドメイン)へ変更します。

ドメイン名に続くポート番号は前述のdocker-compose.ymlで設定しているホスト側の※ポート番号と同じにする必要があります。
(80の場合はポート番号なしの http://localhost でOK)

    ports:
      - 8080:80

※ ホスト側のポート番号は任意ですが、他のプロセスと競合しないようにしてください。

コンテナの起動

ローカル環境用の設定が全て完了したら、Docker Composeを使ってコンテナを起動します。

docker-compose up -d

コンテナの起動確認

docker compose ps
NAME                 COMMAND                  SERVICE             STATUS              PORTS
wp_env-db-1          "docker-entrypoint.s…"   db                  running             33060/tcp
wp_env-wordpress-1   "docker-entrypoint.s…"   wordpress           running             0.0.0.0:8080->80/tcp

起動が確認出来たらサイトを閲覧確認
http://localhost:8080/

コンテナ起動直後はWordPressリソースの作成中やDBの接続が確立されていないことでサイトを閲覧できないことがありますが、しばらく待つとそれらが完了し閲覧できるようになります。

ダッシュボードへのログインも本番環境と同じアカウントで確認します。
http://localhost:8080/wp-login.php

Follow me!