kudo
共用サーバーにGitリモートリポジトリを設置、pushで公開できるようにする
Gitを使える共用サーバーにリモートリポジトリを設置し、リポジトリにpushがあった時にサイトのデータを更新する。
という設定をいたしました。
その設定方法をご紹介します。
1. さいしょに
サーバーの要件は次の通りです。
- サーバーに対してSSH接続できる。
- サーバーにGitがインストールされている。
以下説明は、次の構成例を前提に説明しております。
- サーバーのホスト名: tips-note.sample
- git共用リポジトリ: /var/git/repos/test1
- WebサイトDocumentRoot: /var/html
- WebサイトURL: http://tips-note.sample/
2.サーバー側のGIT設定
サーバーにssh接続してログイン後、以下の設定を行います。
a. 共用リポジトリを作成します。
$ mkdir -p /var/git/repos
# 共用リポジトリ作成時は --bare オプションをつける。
$ git init --bare /var/git/repos/test1
共用リポジトリとは
ワーキングツリーを持たないリポジトリ形式です。多人数でgitの情報を共有する場合によく利用します。
参考: https://git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a-Server
b. pushされた時に実行するスクリプトを調整します。
gitは、操作されたタイミングでスクリプトを実行するgithooksという仕組みがあります。
pushの場合ですと、pushを受け、完了後に実行されるpost-receiveスクリプトがございます。
共用リポジトリ側にhooks/post-receiveという名前でスクリプトを設置すると有効になり、実行されます。
リポジトリ作成時に標準でサンプルが入っております。基本はそれを有効化して利用します。
# git作成時のサンプルは.sampleとして配置されているのでリネームして有効か、調整します。
$ mv /var/git/repos/hooks/post-receive.sample /var/git/repos/hooks/post-receive
$ vi /var/git/repos/hooks/post-receive
githooksとは
参考: https://git-scm.com/docs/githooks
調整したpost-receive
#!/bin/sh
#リポジトリ名
reponame=test1
#サーバー上のWebサイトドキュメントルート物理パス
docrootdir=/var/html
#サーバー上のgit共用リポジトリ物理パス
baregitdir=/var/git/repos/${reponame}
# gitがPWDでなくGIT_DIRを優先してカレントディレクトリを決定するため意図的に破棄。
unset GIT_DIR
#Webサイトのドキュメントルートを作成。
if [ ! -e ${docrootdir} ]; then
mkdir -p ${docrootdir}
echo "create docroot directory."
fi
#ドキュメントルートディレクトリをgitリポジトリとして初期化する。
#..ここのリポジトリはデプロイ用で、共用リポジトリではありません。
if [ ! -e ${docrootdir}/.git ]; then
if [ -e ${docrootdir}/vendor-original-dir ]; then
#サーバーの仕様で操作できないサーバー独自ファイルやディレクトリがある場合、
#ここでgitignoreに登録する。
echo "vendor-original-dir/*" >> ${docrootdir}/.gitignore
fi
cd ${docrootdir}
#サーバー独自のファイルがある場合、直接cloneできないため、各ステップの処理を明示的に実行する。
git init
git remote add origin ${baregitdir}
git fetch
git checkout -t origin/master
echo "initialize git."
fi
#ドキュメントルートのファイルをgitのmasterブランチの状態で更新する。
git -C ${docrootdir} fetch origin;
git -C ${docrootdir} reset --hard origin/master;
3. クライアント側でテスト
pushしてサイトを確認します。
$ git clone tips-note.sample:/var/git/repos/test1
$ cd test1
$ echo "Hi!" > ./index.html
$ git add ./index.html
$ git commit -m "initial commit."
$ git push origin master
ブラウザでhttp://tips-note.sample/を開いて、pushしたindex.htmlの「Hi」が見えていれば完了です。
4. さいごに
利用するサーバーにより、許可されている操作や権限が異なります。
実際に運用する際は、デプロイ先の.gitディレクトリを参照不可にするなど配慮が必要です。
ご利用のサーバーに応じてご調整くださいませ。