よくあるデプロイの方法だといろいろセットアップが多くてハードルが高いので(一度セットアップすれば簡単ですが)、ベアリポジトリをサーバー内に立ててそこに git push
したらフックを蹴っ飛ばして自動的にデプロイする方法はどうかなと思って試した。
この方法ならインフラを構築するためのプロビジョナーにあらかじめ仕込んでおいてすぐに導入できる気がする。
ベアリポジトリの作成
ウェブサーバーに以下のコマンドでベアリポジトリをつくる。
$ git init --bare --share ~/example.com.git
以上で空のベアリポジトリが出来上がる。
次に同じサーバー内の WordPress をこのベアリポジトリにコミットしてプッシュ。
$ git init
$ git remote add origin ~/example.com.git
$ git add .
$ git commit -m "first commit"
$ git push origin master
この時に .gitignore
が適切じゃないと WordPress 側でファイルをアップロードした時とかにコンフリクト祭りになるので以下の URL の .gitignore
をコミットしておく。
フックの作成
Git でベアリポジトリに push
した後で、ドキュメントルートから自動的に pull できるようにする必要がある。
上のベアリポジトリの例では ~/example.com.git/hooks/post-update
に以下のように記述する。
#!/usr/bin/env bash
cd /var/www/html
git --git-dir=.git pull origin master
このスクリプトにはブランチの名前等が引数で飛んで来るので、それを使って特定のブランチの時だけデプロイとかもできそう。
あとこの部分で CI 的なものをぶんまわすといいかも。
開発環境から pull する
たとえば別の開発環境から pull
する時にそのディレクトリにすでに WordPress がある時は以下のコマンドで。
ローカル環境が VCCW の場合は以下の通り。
$ cd /var/www/html
$ git init
$ git remote add production example.com:~/example.com.git
$ git fetch production
$ git reset --hard FETCH_HEAD
あとは、以下のような感じでプラグインがデプロイされるかを確認。
$ wp plugin install jetpack
$ git add .
$ git commit -m "add jetpack"
$ git push production master
あえて remote
の名前を origin
ではなく、production
にしているのは、origin
にもっと信頼性が高いサーバー(たとえばGitHubなど)を設定して、そっちにプッシュすることを想定。
このあたりは好みで。