WEBの極み

WEB時代を生き残る情報とテクニック

*

gitをxserverに設置しgit pushで自動で本番環境にアップロードするための方法【初心者向け】

   

はまってしまったので、自分の整理もかねて紹介。
初心者向けとしたけれども、これをやろうとする人にそんな初心者はいないかもしれないけど。。

環境:MAC OS 10.11.4

参考にした記事はこちら。
エックスサーバーにGitを導入する手順
git pushで本番環境に”自動デプロイ”できる環境を作ってみよう!

エックスサーバーにGitを導入する手順の補足

「エックスサーバーにGitを導入する」部分は問題なく完了。
この記事でgitを導入する部分について

以下のように紹介されていた。

make 中に msgfmt が見つからないとエラーが出ました。
/bin/sh: msgfmt: command not found

とのことだが、私の場合はエラーは表示されなかったが、gitはうまくインストールされていなかった。
結局エラーを無視するというコマンドとして以下を利用することで、うまくgitをインストールすることができた。

本番環境にgitを設定する。

引き続きgitを本番環境に設定する。
私の場合は参考記事と若干ゴールが異なり、以下を目標としていた。

「gitで管理するファイルはpublic_html配下だけではなく、ドメイン直下のファイルもgitで管理する」

イメージ
example.com
  -public_html(公開するファイル)
  -application(呼び込み専用のファイル。セキュリティの問題を考え、直接アクセスできない場所に配置する。)

多くのサイトで紹介されているのはpublic_html配下にgitを置くやり方なので、今回は一つ上の階層にgitを置くやり方を紹介している。

まずは本番環境に接続したらターミナルから以下のコマンドを入力する。
ここでは「example.com」というドメインで行うことを想定する。

remote

これはexample.com直下のファイルは全てgitで管理するということを意味する。もちろんgitで管理する必要のないファイルも含まれてしまうが、それらは後から.gitignoreで対象外にすると良いだろう。puclib_html以下だけを管理すれば良いという場合は、public_html配下でgit initを行えば良い。

remote

ベアリポジトリの作成

次にベアリポジトリを作成する。ベアリポジトリとは、共有用のリポジトリでベアリポジトリは作業用のスペースを持たないということを意味する。

ベアリポジトリについて詳しく知りたいのならこの記事が参考になる。
ベアリポジトリとノンベアリポジトリ:理論編〜GitでWordpressのテーマを管理

ローカルからの更新は直接公開用のファイルを編集するのではなく、一旦ベアリポジトリに変更情報を送り、そこから公開用のファイルがgit pullするという流れを取るのが一般的らしい。

remote

これは先ほどgit initしたリポジトリをクローンして、example.gitという名前のベアリポジトリとすることを意味している。〜.gitとしているのは慣例でそうなっているとのこと。
example.gitとなっているとファイルのように思えるが、これはディレクトリを表している。

post-receiveの設定

example.gitの中身をlsコマンドで確認するとhooksフォルダがあるのがわかる。

remote

このhooksフォルダに移動してpost-receiveを作成する。

remote

post-receiveはgitのリファレンスサイトを見てみると

post-receive フックは処理が終了した後で実行されるもので、他のサービスの更新やユーザーへの通知などに使える。

とある。要するに、ローカル環境からgit pushしてexample.gitを更新した場合に実行されるファイルということになる。このファイルでは以下の処理を組み込む。

1. .gitがあるフォルダに移動
2. そのフォルダからexample.gitに対してpullを行う。

post-receiveファイルに保存する内容は以下のようになる。

viコマンドで編集しているが、ファイルを開いたら「i」でINSERTを行い、保存時は「:wq」とコマンドする。
(もっと詳しく知りたい場合は「viコマンド」などで検索するといい。)

「–git-dir=.git」は移動先のフォルダでgitコマンドを使うという意味っぽい。

このコマンドは本番環境でgit管理している場所から、pushで変更されたexample.gitをpullして変更を反映するということを意味している。

post-receiveには実行権限が必要なので、以下のコマンドも実行する。

remote

ローカルの設定

次にローカルの設定を行う。
まずはローカルにサーバーのgit情報をcloneする。

すでにローカルに開発しているデータがある場合は、一旦退避しておき、自動デプロイがうまくいってからファイルを戻してgit pushしたほうがいいかもしれない。
※私の場合、すでにローカルで開発しているフォルダがあったので、最初このcloneを行わず、ローカル環境から「git remote add」してうまくいかず、どハマりしてしまった。

local

自動更新されるかテストする。

最後にローカル環境でファイルを作成し、pushする。

local

まとめ

おさらいすると・・・

1.本番環境のgitで管理した場所でgit initを行う。
2.ベアリポジトリをサーバー上の公開していない場所に作成する。
(手順1.で作成した.gitをcloneする)
3.ベアリポジトリの「hooks/post-receive」を設定する。
(手順1.で作成した場所からベアリポジトリをpullする)
4.ローカル環境からベアリポジトリをcloneする。
5.ファイルを変更したらベアリポジトリにpushする。

このように見直してみると、ベアリポジトリを中心に、本番環境gitとローカルgitでやりとりするように設定されているのがよくわかる。

今回の手順ではexample.comに更新情報を送り、同じディレクトリの情報を再帰的に更新するという流れになっており、なんだか無駄なような気もする。とはいえ、この辺の仕組みにはあまり詳しくないので、変な応用はしたくないのでこの手順でよしとしよう。

しかし大分はまったなぁ。はまった時間は聞かないでほしい。

最後に

もしうまくいかないでこの記事にたどり着いた方がいれば、とにかく紹介した手順通りにやってみることをおすすめする。いきなり応用しようとするとどこでつまづいているのかがわからなくなるからだ。基礎あっての応用ということを忘れないようにしよう!(ということを自分に言い聞かせたい!)

 - WEB