LoginSignup
11

More than 5 years have passed since last update.

ローカル環境の WordPress をリモートと同期させる

Last updated at Posted at 2017-01-26

概要

コマンド一発で WordPress のデプロイ・同期ができるツールをつくりました - モンキーレンチ

キタジマタカシさんの記事を読んで、そういえば自分も Wordmove の代わりに書いたシェルスクリプトがあるので、一応公開してみることにしました。

多分、実用にはキタジマさんの bash-wp-deploy の方がよいと思います。

私のスクリプトはごく簡易なものなので、WP-CLI の実行サンプルとして参照いただければと思います。見どころとしては、WP-CLI で SSH 越しにリモートの WP-CLI を実行しているところでしょうか。

元々は WordPress のサーバ移転のために書いたシェルスクリプトを応用したもので、引越し先のサーバで実行すると便利かもしれません。

要件

  1. WordPress がインストールされた環境が、リモート・ローカル両方にあること
  2. シェルが実行可能であること(Bash on Windows は未確認)
  3. SSH と rsync が実行可能であること
  4. WP-CLI のインストールが済んでいること

シェルと WP-CLI の両方が、リモート側にもローカル側にも必要です。 ローカルは macOS の Bash、リモートは Debian 8 の Dash で確認しています。

設置

  1. 下記のスクリプトを、同期させたいローカルの WordPress が設置されているディレクトリ(フォルダ)にwppull.shという名前で保存します。
  2. 3行目のuser@example.comの部分を、リモート側のホスト名(または、IP アドレス)、ログインユーザー名に変更します。
  3. 4行目の/var/www/htmlの部分をリモート側の WordPress が設置されているディレクトリに変更します。絶対パスで書いてください。
  4. 5行名のhttp://example.comをリモートの WordPress の URL に変更します。
  5. 6行名のhttp://local.testをローカル環境の WordPress の URL に変更します。
  6. ターミナルを起動し、同期させたいローカルの WordPress が設置されているディレクトリへ移動します。
  7. wp cli infoと入力し、WP-CLI がローカルで動作し、パスが通っていることを確認します。
  8. chmod +x wppull.shと入力し、スクリプトに実行権を与えます。
  9. ./wppull.shで実行します。

実行結果など、いかなる保証もいたしません。必ず最初に安全な状況で、バックアップを取ってお試しください。

コード

#!/bin/sh
# settings
REMOTE_HOST='user@example.com'
REMOTE_PATH='/var/www/html'
REMOTE_URI='http://example.com'
LOCAL_URI='http://local.test'

# set date stamp
STAMP_DATE=`date +%y%m%d`

# export dump file
wp db export ./wp-content/db_backup_$STAMP_DATE.sql

# export MySQL dump in remote server
wp db export $REMOTE_PATH/wp-content/_dbdump.sql --ssh=$REMOTE_HOST --path=$REMOTE_PATH

# pull remote server files
rsync -auvz $REMOTE_HOST:$REMOTE_PATH/ ./ --exclude="wp-config.php" --exclude="wp-content/upgrade/" --exclude="wp-content/cache/"
# import dump file
wp db import ./wp-content/_dbdump.sql

# for local
wp search-replace $REMOTE_URI $LOCAL_URI --skip-columns=guid

# post-process
ssh $REMOTE_HOST rm $REMOTE_PATH/wp-content/_dbdump.sql
rm ./wp-content/_dbdump.sql
#wp plugin deactivate jetpack backwpup

解説

3〜6行目は WP-CLI と rsync などに渡すホスト名やパスの情報です。

8行目は現在の日付を YYMMDD 形式で代入しています。ローカル環境のデータベースのバックアップファイルの名前に使っています。

12行目からが実際に動く部分です。手順は以下のようになります。

  1. ローカルの WordPress のデータベースをファイルに書き出して保存(wp db export ./wp-content/db_backup_$STAMP_DATE.sql
  2. リモートの WordPress のデータベースをファイルに書き出して、wp-contentディレクトリに保存(wp db export $REMOTE_PATH/wp-content/_dbdump.sql --ssh=$REMOTE_HOST --path=$REMOTE_PATH
  3. rsyncでリモートの WordPress の設置ディレクトリと、ローカルのディレクトリ(フォルダ)の内容を同期。wp-config.phpなどは除外(rsync -auvz $REMOTE_HOST:$REMOTE_PATH/ ./ --exclude="wp-config.php" --exclude="wp-content/upgrade/" --exclude="wp-content/cache/"
  4. リモートから転送したSQLファイルを、ローカルのデータベースにインポート(wp db import ./wp-content/_dbdump.sql
  5. データベースにある URL の情報を、ローカル環境の情報に置換。GUIDは除外(wp search-replace $REMOTE_URI $LOCAL_URI --skip-columns=guid
  6. データベースの同期に使ったSQLファイルを削除(ssh $REMOTE_HOST rm $REMOTE_PATH/wp-content/_dbdump.sql && rm ./wp-content/_dbdump.sql

最後に

今回記事を書くにあたって、多少変数を使って設定をまとめた部分もありますが、実際には変数も使わずベタッとホスト名やパスを書いて使っていました。少しだけ汎用性が高まったので、個人的にはよかったです。

WP-CLI の設定ファイル(wp-cli.yml)を読み込めるような設計にすると、もっといいのですが、それは今後の課題とします。

参考

改版履歴

2017/01/27: 初稿

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11