はじめに
前回の記事では、Dockerを使ってローカルにWordPress開発環境を構築し、Wordmoveの導入までを行いました。今回はその続きとして、ローカル環境と本番環境(Xserver VPS上のKUSANAGI)を同期する方法を紹介します。
前提条件の確認
以下の環境が整っていることを確認します。
- ローカルのDocker環境でWordPress+Wordmoveが動作している
- Xserver VPS上にKUSANAGIがインストール済み
- 本番環境のデータベース情報、ドキュメントルートのパスを把握している
- 本番環境にSSH接続可能なユーザーがある(鍵認証推奨)
Wordmove設定(.envファイル)
ルートディレクトリ直下の.envファイルに、以下を参考に記述して保存します。
# -------------------------------------------
# WORDMOVE
# https://github.com/welaika/wordmove
# -------------------------------------------
# WordMoveのmovefile.ymlに設定する内容
LOCAL_VHOST=https://kyoro.wp
PRODUCTION_VHOST="KUSANAGIサーバーのFQDN"
PRODUCTION_WORDPRESS_PATH=/home/kusanagi/xxxxxxxx/DocumentRoot #KUSANAGIのドキュメントルート
PRODUCTION_DB_NAME="KUSANAGI構築時に設定したDB名"
PRODUCTION_DB_USER="KUSANAGI構築時に設定したDBユーザー"
PRODUCTION_DB_PASSWORD="KUSANAGI構築時に設定したDBパスワード"
PRODUCTION_DB_HOST=localhost
PRODUCTION_SSH_HOST="KUSANAGIサーバの固定IPアドレス"
PRODUCTION_SSH_USER=kusanagi
PRODUCTION_SSH_PORT="サーバーのSSHポート"
Docker起動
docker composeコマンドで変数をWordmoveコンテナに読み込ませます。
$ docker compose down
$ docker compose build --no-cache
$ docker compose up -d
Docker コンテナにアクセス
以下のコマンドでwordmoveコンテナに入ります。xxxxの部分はdocker psコマンドで確認することができます。
$ docker exec -w /home/ -it xxxxxxx_wordmove /bin/bash
コンテナにアクセス後、以下コマンドで.envファイルの内容が反映されているか確認してください。
# env | grep PRODUCTION
以下のような結果が表示されます。
PRODUCTION_SSH_HOST=xxxx.xxxx.xxxx.xxxx
PRODUCTION_SSH_USER=xxxxxxx
PRODUCTION_SSH_PORT=22
PRODUCTION_DB_HOST=localhost
PRODUCTION_DB_NAME=xxxxxxxx
PRODUCTION_DB_USER=xxxxxxxx
PRODUCTION_DB_PASSWORD=xxxxxxxx
PRODUCTION_VHOST=www.xxxxxxxx.com
PRODUCTION_WORDPRESS_PATH=/home/kusanagi/xxxxxxxxx/DocumentRoot
SSH公開鍵認証を使用するためにssh-agentを使って設定します。
# ssh-agent bash
下記コマンドの『/home/.ssh/your_key_name』のパスは、ご自身のパソコンの保存している鍵の保存場所に合わせて設定変更してください。
# ssh-add /home/.ssh/your_key_name
Wordmoveの設定値を確認します。movefile.ymlの存在するフォルダで「wordmove doctor」コマンドで調査します。
# wordmove doctor
エラーメッセージが無いことを確認後、wordmoveコマンドを使用して本番環境からローカル環境に同期します。
.------------------------.
| PSYCHIATRIC |
| HELP 5¢ |
|________________________|
|| .-"""--. ||
|| / \.-. ||
|| | ._, \ ||
|| \_/`-' '-.,_/ ||
|| (_ (' _)') \ ||
|| /| |\ ||
|| | \ __ / | ||
|| \_).,_____,/}/ ||
__||____;_--'___'/ ( ||
|\ || (__,\\ \_/------||
||\||______________________||
|||| |
|||| THE DOCTOR |
\||| IS [IN] _____|
\|| (______)
`|___________________//||\\
//=||=\\
` `` `
▬▬ Using Movefile: ./Movefile.yml ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
〜〜省略〜〜
▬▬ Checking rsync ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
✅ success | rsync is installed at version 3.2.3
▬▬ Checking SSH client ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
✅ success | SSH command found
本番サーバーのデータをローカルにpullする場合
wordmove コマンドのpullを使用してローカルに同期する前に、-sオプションを使ってテストします。
# wordmove pull -s -e production --all
テストが実行されます。エラーが無いことを確認します。
▬▬ Using Movefile: ./Movefile.yml ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
〜〜省略〜〜
▬▬ Pulling Languages ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
remote | get_directory: [secret]/ [secret] /wp-content/* .git/ .gitignore .gitmodules .env node_modules/ bin/ tmp/* Gemfile* Movefile movefile movefile.yml movefile.yaml wp-config.php wp-content/*.sql.gz *.orig .DS_Store wp-content/* /* /wp-content/languages/ /wp-content/
ℹ️ info | rsync --progress -e 'ssh kusanagi@[secret]' -rlpt --compress --omit-dir-times --delete --dry-run --include /wp-content/languages/ --include /wp-content/ --exclude /wp-content/\* --exclude .git/ --exclude .gitignore --exclude .gitmodules --exclude .env --exclude node_modules/ --exclude bin/ --exclude tmp/\* --exclude Gemfile\* --exclude Movefile --exclude movefile --exclude movefile.yml --exclude movefile.yaml --exclude wp-config.php --exclude wp-content/\*.sql.gz --exclude \*.orig --exclude .DS_Store --exclude wp-content/\* --exclude /\* :[secret]/ [secret]
receiving incremental file list
▬▬ Pulling Database ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
ドライランのテスト後、以下コマンドでローカル環境に同期します。
# wordmove pull -e production --all
本番サーバーデータをアップロードしたい場合
pushコマンドを使うことで、ローカル環境のデータを本番サーバーにアップロードできます。
# wordmove push -e production --all
wp_optionsテーブル内のURL修正について
Wordmove同期後は、wp_optionsテーブルのsiteurlとhomeに本番環境のURLアドレスが登録されています。ローカル環境ののURLに変更しないと本番環境のURLにリダイレクトされます。Sequel Aceを使ってsiteurlとhomeのURLアドレスを忘れずに変更しましょう。
【wp_optionsテーブル内の状態】

動作チェック
ブラウザのURLアドレスバーに、https://kyoro.wp/と入力後、KUSANAGIサーバーで公開しているサイトがローカル環境に反映されていることを確認してください。

wp-adminのBAISC認証について
WordmoveでKUSANAGIサーバーからコンテンツ(DB・ファイル)をpullしてローカルに反映後、wp-adminにアクセスしようとするとBASIC認証が出て、本番と同じ認証情報を入れても通らないという状況があります。
これは「本番環境の .htaccess や .htpasswd を一緒にpullしてしまった」ことが原因です。
ローカル環境は、以下2箇所の.htaccess 内のコードをコメントアウトしBASIC認証を止めます。
(1)srcディレクトリ直下の.htaccessファイル内のコメント化

(2)src/wp-adminディレクトリ直下の.htaccessファイル内のコメント化

まとめ
Wordmoveは、SSH接続とシンプルなYAML設定だけで、ローカルとステージング間のWordPress同期を自動化できる便利なツールです。KUSANAGI環境のように最適化されたサーバーでも、事前に必要なディレクトリ構成や認証情報を整えておけば、手間なく同期運用が可能です。本記事が、WordPress開発フロー効率化に繋がることができれば幸いです。
今回の環境構築にあたっては、以下の記事を大いに参考にさせていただきました。この場を借りて感謝申し上げます。

