🐳 Docker × WordPress × Wordmove でKUSANAGIサーバーと同期する

  • URLをコピーしました!

はじめに

前回の記事では、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開発フロー効率化に繋がることができれば幸いです。

今回の環境構築にあたっては、以下の記事を大いに参考にさせていただきました。この場を借りて感謝申し上げます。

Qiita
自分のWordPressのローカル開発環境(Mac用)を紹介してみる - Qiita はじめまして最近WordPressで個人のウェブサイトを作った(まだ構築中)のですが、出来たばっかりなので、誰も来ない。SNSで宣伝しようにもフォロワーさんイナイ。そんなぼ...
push.tokyo
僕のWordPress×dockerのローカル開発環境の使い方を丁寧に紹介します はる WordPressのdocker開発環境用にカスタマイズしたので、その環境の使い方をできるだけ丁寧に紹介したいと思います。 ブログも放置してましたが、また頑張りたいと思っ...

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次