自前のサーバーにGitリポジトリを作成してプッシュでサイト更新する

  • 6
    いいね
  • 0
    コメント

概要

FTPなどでのサイト更新から脱却したい人、Git hubとか外部のサービス使いたくない人向け。

最終的に実装したい機能

  • 自分のサーバーにGitリモートリポジトリを作成しローカルから利用できる
  • リモートリポジトリへプッシュするとmasterブランチの内容でサイトが更新される

前提条件

対象サーバーは、以下の作業が完了している前提。

  • Apacheのインストール
  • ドメインの取得・設定

ディレクトリ構成

var
 └www
   │
   ├git
   │ └プロジェクト名.git ←リモートリポジトリ ※1
   │
   └html
     └プロジェクト名 ←※1をクローンしたもの
       └index.html etc...

実装

既にサーバーにgitを導入済みで、「サーバーへログイン→git pull」でサイト更新している人は、手順5だけでよい。

各作業は必要に応じてsudoで実行。

手順1:サーバーにgitをインストール

サーバーでgitコマンド使えない(インストールされていない)人のみ。

サーバー(CentOSの場合)
$ sudo yum -y install git

or

サーバー(Ubuntuの場合)
$ sudo apt-get install git

サーバー内でgitコマンドが使えるようになったことを確認する。

手順2:リモートリポジトリを作成

サーバー
# gitリポジトリを置くための「/var/www/git」ディレクトリを作成
$ cd /var/www
$ mkdir git

# 適当なリポジトリを作成
$ cd /var/www/git
$ mkdir プロジェクト名.git
$ cd プロジェクト名.git
$ git --bare init --shared

/var/www/git/プロジェクト名.gitが完成

手順3:web公開用のディレクトリをgit cloneで作成

サーバー
$ cd /var/www/html
# 手順2で作ったリポジトリをクローンしてくる
$ git clone /var/www/git/プロジェクト名.git

/var/www/html/プロジェクト名が完成

手順4:Apacheを設定

webから「ドメイン名.com」でアクセスされたら「/var/www/html/プロジェクト名」を参照するようにする。

confファイルに設定を記述する。

サーバー(CentOSの場合)
$ sudo vi /etc/httpd/conf.d/hoge.conf

or

サーバー(Ubuntuの場合)
$ sudo vi /etc/apache2/sites-available/hoge.conf

以下を追記。

vhosts.conf
<VirtualHost *:80>
        ServerName ドメイン名.com
        ServerAlias ドメイン名.com
        DocumentRoot /var/www/html/プロジェクト名
</VirtualHost>

追記後、Apacheを再起動する。

手順5:フックを作成

gitフックとは、プッシュなどされた際に発火する処理。
(あらかじめ書いておいたスクリプトをプッシュ時に実行させたりできる)

今回は、プッシュされたら/var/www/html/プロジェクト名へcdしてgit pullするだけのスクリプトを作る。

サーバー
$ vi /var/www/git/プロジェクト名.git/hooks/post-receive

内容は以下。

/var/www/git/プロジェクト名.git/hooks/post-receive
#!/bin/sh
cd /var/www/html/プロジェクト名/
git --git-dir=.git pull

仕上げ:実行権限や書き込み権限を調整する

ここまでの工程で、ディレクトリの権限などについては特に触れなかった。
なのでこのままでは、例えば「sudoで作成したディレクトリはroot権限になるため、git pullできずにフックが失敗する」などの問題が起きるかもしれない。

それらを回避するために必要に応じて所有者やグループを変更する。

サーバー
$ sudo chown ユーザー名:グループ名 -R /var/www/git/プロジェクト名.git
$ sudo chown ユーザー名:グループ名 -R /var/www/html/プロジェクト名

ポイントは、プッシュするユーザーが、gitとhtml両方のディレクトへの書き込み権限を持っていること。

フックには実行権限をつけておく。

サーバー
$ sudo chmod +x /var/www/git/プロジェクト名.git/hooks/post-receive

確認:ローカルからリポジトリへプッシュしてみる

ローカルマシンからssh経由でリポジトリをクローンする。
(もちろん以下はSourceTreeとかでやってもよい)

ローカル
$ git clone ssh://ユーザー名@ドメイン名:/var/www/git/プロジェクト名.git

〜ファイルを追加したりしてコミットする(省略)〜

リモートリポジトリへプッシュ。

ローカル
$ git push origin master

ブラウザからプロジェクト名.comへアクセスし、内容が反映されているか確認する。