##WordPressのステージング環境から本番へ更新する労力を減らしたい
WordPressでサイトを作る際、ステージングと本番環境を分けるにはどうしたら良いかと考えたわけです。
当初使ったのが Duplicator というプラグインです。
そこそこうまく行ったんですが、ステージング→本番の切替えにかかる手間暇がだんだんと気になるようになってきました。画面をいくつも開いてチェックしパラメータを変更し、ファイルをダウンロードして転送してスクリプトを起動し、等々やっていると1回につき10分ぐらいは時間を取られるので、ちょっとした変更をサクッと反映させるには向きません。(それを自動化するスクリプトを組むのもちょっと気が重い)
1つの記事を投稿した後で「あっ、誤字見つけた」みたいに軽い修正を入れたい時ってありますよね。でもそのたびに10分作業しなきゃいけないとなると大変なので「いくつかまとめて修正しよう」と思いがちで、修正が遅れたり忘れたりということになりがちでした。
##プラグインなしでステージング→本番更新をする方法はないものか?
そこで、なんとか良い方法はないものかと当初はまた別なプラグインを探してみたものの、なかなか良さげなものが見つかりません。
そうこうするうちに、できればプラグインなしでやりたいなと思うようになりました。Duplicator を使った運用ではステージング環境をローカルに置き、そのデータをプラグインでファイルにまとめて本番用サーバーにアップロードして更新していましたが、ひょっとしたらDBを一括コンバージョンすれば行けるんじゃないか? と。
ステージング用/本番用のDB一括コンバージョンを試してみた
つまり、ステージングと本番で違うのはURLのドメイン名部分だけなので、そこを一括でコンバージョンしてしまえば簡単なスクリプトでデプロイできるんじゃないかというわけです。
実際やってみたら、できました。mysqldumpでステージング環境のDBをダンプし、sedで1行、
sed -e 's/A\.xxx\.jp/B\.xxx\.jp/g'
という感じのコードでコンバージョンして本番DBのほうでロードしてやるだけでした。
##VPSサーバーのサブドメインでステージング/本番を切替え
最終的にはステージング環境/本番環境とも同じVPS上に置いてこんな構成にしました。
ステージング環境は管理者のみがアクセス出来るようにIPアドレス制限をかけ、画像フォルダは本番と共有、ステージングの準備ができたら CONV_AtoB スクリプト一発で本番へデプロイします。
CONV_AtoBでやっているのは
- DB-A をダンプ
- sed でURLを変換
- DB-B へロード
というだけです。一方的に情報発信するだけの単純な構成のサイトだったらこんな方法でもいけるようですね。
コメントがつくようなサイトだともう一工夫必要でしょうし、画像ファイルを共用していていいのか? という問題もありますが、とりあえず今日はこのへんで。