Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
21
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@miya0001

Git を使って WordPress をサーバーにデプロイ

よくあるデプロイの方法だといろいろセットアップが多くてハードルが高いので(一度セットアップすれば簡単ですが)、ベアリポジトリをサーバー内に立ててそこに 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など)を設定して、そっちにプッシュすることを想定。

このあたりは好みで。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
21
Help us understand the problem. What are the problem?