WordPressでブログを運営していると、サイトのデザインの変更や、wp-config.phpやfunction.phpやなどのPHPファイルを編集による設定変更、WordPress・プラグインのアップデートなど様々な作業があると思います。
PHPファイルの編集やアップデートする際は慎重になる必要があると思いますが、ときにはミスをして画面が真っ白みたいなことになりますよね...(私は何度もやらかしました)
そのため動作確認用のステージング環境や開発用のローカル環境を用意している方も多いと思いますが、それぞれの環境で同じ作業をするは面倒ですし、手動だとローカルでやったときと違うオペレーションをしてしまう可能性もあります。
そんな問題を解決するためにコマンド一つでローカル環境↔ステージング環境↔本番環境で作業内容を反映できるシェルスクリプトを自作しました!
本記事では、そのシェルスクリプトのダウンロード方法・初期設定・実行方法について解説します。
あくまで自分で使うために作成したシェルスクリプトのため、不具合により予期しない動作をする可能性もございます。
その際はご自身でトラブルシューティングしていただく必要も出てくるため、ブログを始めたばかりでWordPressの知識があまりない方のご使用は非推奨とします。
ご使用する際もバックアップを取るなど、元の環境を復元できる準備を必ず行って下さい。
また、本記事で紹介するシェルスクリプトが原因で本番環境が壊れるなどした場合においても一切の責任は負いかねますのでご了承ください。
この記事で分かること
- コマンド一つで WordPressのローカル、ステージング、本番環境の間で同期を取る方法
手順
- 同期処理のシェルスクリプトをダウンロードする
- 作業ディレクトリに同期処理の設定ファイルをコピーする
- 各環境情報を環境変数として設定する
- Basic認証関連ファイルを設定する
- 各環境のwp-config.phpの内容を設定する
- 同期を実行する
1. 同期処理のシェルスクリプトをダウンロードする
Githubの下記URLにあるwp-syncというリポジトリに同期処理が実装されたシェルスクリプトや設定ファイル等をアップロードしてあります。
https://github.com/hiroya232/wp-sync
同期スクリプトは実際に運用しながら随時更新しているのでこのリポジトリの内容と本記事の内容が異なるタイミングがある可能性があります。
その際は記事更新までお待ちいただければと思います。
アクセスすると↓のような画面になりますので、緑色のCodeをクリックしてリポジトリのURLをコピーします。
コピーしたら、ターミナルを開いて任意のディレクトリで下記コマンドでリポジトリをローカルにクローン(ダウンロード)します。
git clone https://github.com/hiroya232/wp-sync.git
これでダウンロードは完了です。
上記コマンドを実行したディレクトリにwp-syncというディレクトリが作成されていて、その中に今回必要なファイル一式が格納されています。
.
├── Dockerfile
├── merge-local-into-prd.sh
├── merge-local-into-stg.sh
├── merge-prd-into-local.sh
├── merge-prd-into-stg.sh
├── merge-stg-into-local.sh
├── merge-stg-into-prd.sh
├── src
│ ├── .env
│ ├── .gitignore
│ ├── .htaccess-basic-auth
│ ├── .htpasswd
│ ├── .vscode
│ ├── docker-compose.yml
│ ├── php.ini
│ ├── temp
│ ├── wp-config-local.php
│ ├── wp-config-prd.php
│ └── wp-config-stg.php
├── srdb.class.php
└── srdb.cli.php
各ファイルの説明は下記の通りです。気になる方は目を通してみて下さい!
ファイル名 | 内容 |
---|---|
Dockerfile | ローカル環境のWordPressのコンテナに関する設定。(※同期処理には使用しません) |
merge-local-into-prd.sh | ローカル環境→本番環境に同期する処理。 |
merge-local-into-stg.sh | ローカル環境→ステージング環境に同期する処理。 |
merge-prd-into-local.sh | 本番環境→ローカル環境に同期する処理。 |
merge-prd-into-stg.sh | 本番環境→ステージング環境に同期する処理。 |
merge-stg-into-local.sh | ステージング環境→ローカル環境に同期する処理。 |
merge-stg-into-prd.sh | ステージング環境→本番環境に同期する処理。 |
src/ | 各WordPressの作業ディレクトリにコピーする必要のあるファイルをまとめたディレクトリ。 |
src/.env | ローカル環境構築・同期処理の実行をする際に必要になる設定値(環境変数)。 |
src/.gitignore | 作業ディレクトリ配下をソース管理する際に追跡対象から除外すべきファイルを指定するファイル。不要であれば削除してもOK。(※同期処理には使用しません) |
src/.htaccess-basic-auth | ステージング環境で設定するBasic認証の設定内容。 |
src/.htpasswd | Basic認証のユーザ名・パスワード。 |
src/.vscode | ローカル環境でデバッグ実行する際の設定ファイル。(※同期処理には使用しません) |
src/docker-compose.yml | ローカル環境の全てのコンテナに関する設定。(※同期処理には使用しません) |
src/php.ini | WordPressを動作させているPHPの設定ファイル。メディアのファイルアップロードサイズ上限など様々な内容を設定できる。 |
src/temp/ | 同期処理中でダンプしたDBを格納するためのディレクトリ |
wp-config-local.php wp-config-prd.php wp-config-prd.php | 各環境のwp-config.php の内容。 |
srdb.class.php srdb.cli.php | DBのドメインに関するデータを書き換えるために使用する Search-Replace-DB というツールの実行ファイル。 |
2. 作業ディレクトリに同期処理の設定ファイルをコピーする
ダウンロードしたファイルのうちsrcディレクトリ配下にあるファイルは基本的にWordPressごとに設定が必要なものなので、ローカル環境のpublic_htmlと同じディレクトリにsrcディレクトの中身のみをコピーして下さい。
以下のような状態になっていればOKです。
.
├── .env
├── .gitignore
├── .htaccess-basic-auth
├── .htpasswd
├── .vscode
├── docker-compose.yml
├── php.ini
├── temp
├── wp-config-local.php
├── wp-config-prd.php
└── wp-config-stg.php
3. 各環境情報を環境変数として設定する
各環境のサーバの情報やドメイン名など、同期処理を実行するにあたって必要な情報を.env
に環境変数として設定していきます。
各環境変数の設定値は下記の通りです。
環境変数名 | 設定内容 | 設定例 |
---|---|---|
LOCAL_DOMAIN STG_DOMAIN PRD_DOMAIN | 各環境のドメイン名。 | localhost:8000 stg.example.com example.com |
STG_SSH_DESTINATION PRD_SSH_DESTINATION | ステージング/本番環境を構築しているサーバのホスト名・ユーザ名。 同期処理中でSSH接続する際の宛先。 | xs◯◯◯◯◯◯@xs◯◯◯◯◯◯.xsrv.jp |
STG_SSH_PORT PRD_SSH_PORT | ステージング/本番環境を構築しているサーバのポート番号。 同期処理中でSSH接続する際の宛先。 | 10022 |
LOCAL_PUBLIC_DIR_PATH STG_PUBLIC_DIR_PATH PRD_PUBLIC_DIR_PATH | ローカル/ステージング/本番環境の公開ディレクトリパス | public_html /home/xs◯◯◯◯◯◯/example.com/public_html/stg.example.com /home/xs◯◯◯◯◯◯/example.com/public_html |
STG_PUBLIC_DIR_PATH_WITH_DESTINATION PRD_PUBLIC_DIR_PATH_WITH_DESTINATION | ステージング/本番環境の公開ディレクトリのパス。ホスト名・ユーザ名付き。 | ${STG_SERVER_HOST}:/home/xs◯◯◯◯◯◯/example.com/public_html/stg.example.com ${PRD_SERVER_HOST}:/home/xs◯◯◯◯◯◯/example.com/public_html |
LOCAL_DB_HOST STG_DB_HOST PRD_DB_HOST | ローカル/ステージング/本番環境のそれぞれのDBホスト名。 | 127.0.0.1 mysql12016.xserver.jp |
LOCAL_DB_PORT | ローカル環境のDBポート番号。 | 3307 |
LOCAL_DB_NAME STG_DB_NAME PRD_DB_NAME | ローカル/ステージング/本番環境のそれぞれのDB名。 | wordpress xs◯◯◯◯◯◯_wp◯ |
LOCAL_DB_USER STG_DB_USER PRD_DB_USER | ローカル/ステージング/本番環境のそれぞれのDBユーザ名。 | wordpress xs◯◯◯◯◯◯_wp◯ |
LOCAL_DB_PASSWORD STG_DB_PASSWORD PRD_DB_PASSWORD | ローカル/ステージング/本番環境のそれぞれのDBパスワード。 | - |
HTPASSWD_PATH_WITH_DESTINATION | Basic認証に用いる.htpasswdファイルが有るディレクトリのパス。 | ${STG_SERVER_HOST}:/home/xs◯◯◯◯◯◯/example.com/htpasswd/stg.example.com |
WP_SYNC_REPOSITORY_PATH | 一つ前の手順「シェルスクリプトをダウンロードする」でダウンロードしたwp-syncディレクトリのパス | ~/workspace/wp-sync |
WORDPRESS_CACHE_DIR_PATH | WordPressのキャッシュディレクトリのパス。 | wp-content/cache |
WORDPRESS_IMAGE_BUILD_CONTEXT | ローカル環境構築時に起点となるディレクトリ。 基本的に一つ前の手順「シェルスクリプトをダウンロードする」でダウンロードしたwp-syncディレクトリのパスを設定すればOK。 | ~/workspace/wp-sync |
DB_CONTAINER_NAME | ローカル環境のDBコンテナの名前。 任意の名前を入力する。 | db_{ドメイン名} |
DB_CONTAINER_PORT | ローカル環境のDBコンテナのポート番号。 LOCAL_DB_PORTと一致させる。 | $LOCAL_DB_PORT |
WORDPRESS_CONTAINER_NAME | ローカル環境のWordPressコンテナの名前。 任意の名前を入力する。 | wordpress_{ドメイン名} |
WORDPRESS_CONTAINER_PORT | ローカル環境のDBコンテナのポート番号。 空いている任意のポート番号を入力する。 | 8000 |
REDIS_CONTAINER_NAME | ローカル環境のRedisコンテナの名前。 任意の名前を入力する。 | redis_{ドメイン名} |
REDIS_CONTAINER_PORT | ローカル環境のRedisコンテナのポート番号。 空いている任意のポート番号を入力する | 6379 |
4. Basic認証関連ファイルを設定する
本番→ステージング、ステージング→本番のように同期処理を行った際にBasic認証の設定・解除を行う処理が実行されるため、
その際必要になる設定を行います。
設定が必要なのは下記2ファイルです。
- .htaccess-basic-auth
- .htpasswd
.htaccess-basic-auth
「2. 各環境情報を環境変数として設定する」で設定したHTPASSWD_PATH
から${STG_SERVER_HOST}:
を除いた文字列をAuthUserFile
に設定します。
AuthUserFile "/home/xs◯◯◯◯◯◯/example.com/htpasswd/stg.example.com"
AuthName "Member Site"
AuthType BASIC
require valid-user
.htpasswd
「2. 各環境情報を環境変数として設定する」で設定したHTPASSWD_PATH
にある.htpasswd
のファイルの内容をそのままコピペします。
{ユーザ名}:{パスワード}
5. 各環境のwp-config.phpの内容を設定する
各環境のwp-config.phpの内容をそれぞれ下記3つのファイルにコピペします。
- wp-config-local.php
- wp-config-stg.php
- wp-config-prd.php
これで同期処理実行の準備は整いました!
次の手順で動作確認をしていきます。
6. 同期を実行する
まずは試しに本番→ローカルの同期処理を実行してみます。
何かあってもすぐ復元できるように、実行する前に必ず本番環境の(必要であればローカル環境も)バックアップを取って下さい。
ステージング環境があるならステージング→ローカルで試した方が無難です。
ターミナルで作業ディレクトリへ移動して、下記コマンドでシェルスクリプトを実行します。
sh {wp-syncのパス}/merge-prd-into-local.sh
すると、更新されたファイルの数にもよりますが、大体数秒〜10数秒くらいで同期が完了します。
$ sh {wp-syncのパス}/merge-prd-into-local.sh .
【ローカルのDBをバックアップ】
mysqldump: [Warning] Using a password on the command line interface can be insecure.
【完了】
【本番のDBをダンプ】
【完了】
・
・
・
64 updates were actually made
It took 0.36004281 seconds
Check the output for errors. You may need to ensure verbose output is on by using -v or --verbose.
【完了】
同期処理自体は問題なく終了しているのにうまく反映されていない場合はキャッシュが関係している可能性があるので、
ブラウザキャッシュ・サーバキャッシュ・Redisキャッシュの削除をしてみて下さい。
同期実行時にPHP のエラーでarray_column()
が使用できませんといったようなものが出た場合は Xserver の CLI 用の PHP のバージョンが古いことが原因である可能性があるので、下記サイトを参考にバージョンアップしてみてください。Xserver の管理画面から確認できるものとは別のものになります。
https://pgmemo.tokyo/data/archives/1350.html