WordPressの本番サーバーとローカル開発サーバーの同期方法(WP-CLI+Localアプリ+ロリポップ編)

前回の続き。

開発中、公開後のロリポップサーバー <-> ローカル環境の同期方法を紹介する。

僕は、開発中のテーマやプラグイン、アップロードしたファイルの同期は、FTPで、データベースの同期はWP-CLIで行っている。

黒い画面が苦手な人は、別の方法の方がいいと思う。黒い画面が好きな人は、より簡単にできるのでWP-CLIをおすすめする。

注意!

いきなり本番環境で試すのではなく、サブドメインとかでテスト環境を作って、慎重に動作確認してから進めた方がいい。静的に記事やページなど自分で書いたりするだけの場合は、このままいける。コメントとか、アクセスログとかをデータベースが動的に変化する機能を使っている場合は、データベースの同期は、もっと念密に考慮する必要あり。

データベースの同期

事前準備

ロリポップのサーバーへのSSH接続の設定と、ロリポップのサーバーへのWP-CLIのインストールを行っておく。

サーバー → ローカル

注意!

事前にサーバーでバックアップをしておくこと

  1. ローカルからサーバーにSSHで接続する
$ ssh webkei2.dev
  1. サーバーで、WordPress インストールディレクトリに移動
  2. データベースのエクスポート
文字化けを防ぐ

--default-character-set=utf8mb4オプションは、文字化けを防ぐため。絵文字が文字化けて気づいた。

$ cd web/webkei2.dev/
$ wp db export --default-character-set=utf8mb4
  1. エクスポートした、SQL(EXPORT_SQL_NAME.sql)をローカルにFTPでダウンロード
  1. Localアプリを開き、サイト名を右クリックし、「Open Site Shell」をクリックし、ターミナルを開く
  1. WordPressメンテナンスモード開始
  2. ローカルサーバーにデータベースをインポート
  3. ドメインを置換する
wp search-replace

wp search-replaceは、プラグインが作成したテーブルを置換の対象にしていない。--all-tables-with-prefixオプションをつけることで、プラグインが作成したテーブルも置換対象になる。(僕の場合は、Yoast SEOプラグインを入れているので必要だった。)

  1. ローカルで不要なプラグインを停止する。(僕の場合は、google-site-kitとupdraftplus)
  2. WordPressメンテナンスモード終了
  3. ローカル、サーバーともにEXPORT_SQL_NAME.sqlを削除

これで、サーバー → ローカルへのデータベースの同期が完了。

$ wp maintenance-mode activate
$ wp db import EXPORT_SQL_NAME.sql
$ wp search-replace 'https://webkei2.dev' 'https://webkei2.local' --all-tables-with-prefix
$ wp plugin deactivate google-site-kit
$ wp plugin deactivate updraftplus
$ wp maintenance-mode deactivate

ローカル → サーバー

  1. Localアプリを開き、サイト名を右クリックし、「Open Site Shell」をクリックし、ターミナルを開く
  2. データベースのエクスポート
$ wp db export --default-character-set=utf8mb4
  1. エクスポートした、SQL(EXPORT_SQL_NAME.sql)を サーバーにFTPでアップロード
  2. ローカルからサーバーにSSHで接続する
$ ssh webkei.dev
  1. サーバーで、WordPress インストールディレクトリに移動
  2. WordPressメンテナンスモード開始
  3. サーバーにデータベースをインポート
  4. ドメインを置換する
  5. ローカルで停止したプラグインを有効にする。(僕の場合は、google-site-kitとupdraftplus)
  6. WordPressメンテナンスモード終了
  7. ローカル、サーバーともにEXPORT_SQL_NAME.sqlを削除

これで、ローカル → サーバーへのデータベースの同期が完了。

$ cd web/webkei.dev/
$ wp maintenance-mode activate
$ wp db import EXPORT_SQL_NAME.sql
$ wp search-replace 'https://webkei2.local' 'https://webkei2.dev' --all-tables-with-prefix
$ wp plugin activate google-site-kit
$ wp plugin activate updraftplus
$ wp maintenance-mode deactivate

ファイルの同期

ファイルの同期は、FTPで行っている。

FTPは、ダウンロード、アップロードで行うと、不要なファイルが残ってしまうので「Sync」している。

「Sync」を使うことで、差分を確認して、ダウンロード、アップロードできるので便利。

FTPアプリなら、たぶん「Sync」はあると思う。

jetbrainsのIDE

僕の場合は、jetbrainsのIDEを使っているので、IDE内でサーバーとローカルのFTP環境を同期する設定をしている。

↓こんな感じ

サーバー → ローカル

uploadフォルダをサーバーからローカルに同期

ローカル → サーバー

バックアップ

慣れないうちは、事前にサーバーでバックアップをしておくことが理想。

テーマやプラグイをローカルにからサーバーに同期

WordPressをGit管理

あと、僕は、WordPress全体をGit管理している。(不要なファイルやuploadフォルダを除いて)

差分がわかりやすくていい。安全。

Gitデプロイ

本当は、Gitデプロイしたかったけど、ロリポップでできるか試さないといけないので、やってない。今後、AWSとかに移行したらやってみたい。

.htaccess
.htpasswd
wp-content/backups-dup-lite/
wp-content/updraft/
wp-content/upgrade/
wp-content/updraft/
wp-content/uploads/
wp-content/themes/twentynineteen/
wp-content/themes/twentytwenty/
wp-content/themes/twentytwentyone/
node_modules
.DS_Store
*.sql
.idea/

サーバーのバックアップ

updraftplusプラグインで定期バックアップを設定。

念の為、ロリポップのバックアップ機能も併用。

データベースのバックアップと復元

WordPressのアップデート前などで、データベースをバックアップ、復元したい時がある。

wp-cliで行う場合は、ローカル、サーバーとも同じ方法で行う。

バックアップ

WordPressインストールディレクトリに移動して、wp-cliでエクスポートする。

$ wp maintenance-mode activate
$ wp db export --default-character-set=utf8mb4
$ wp maintenance-mode deactivate

復元

WordPressインストールディレクトリに移動して、wp-cliでインポートする。

$ wp maintenance-mode activate
$ wp db import EXPORT_SQL_NAME.sql
$ wp maintenance-mode deactivate

まとめ

こんな感じで、本番サーバーとローカル開発サーバーの同期、git管理、バックアップ設定を行っておくと、安心して気持ちよく開発に専念できる。

開発環境の整備は、あらかじめ徹底的にやっておいた方がいい。

次回は、テーマやプラグインの開発環境について説明する。

この記事を書いた人

Takeo Tamura

療養中。フリーランス。Engineer 🇯🇵 Designer,Full-stack Developer. ❤️🧘‍♂️❤️🍶 ❤️ fashion