概要
FTPなどでのサイト更新から脱却したい人、デプロイ用の便利なツールとかを何故か使いたくない人向け。
最終的に実装したい機能
- 自分のサーバーにGitリモートリポジトリを作成しローカルから利用できる
- リモートリポジトリへプッシュするとmasterブランチの内容でサイトが更新される
前提条件
対象サーバーは、以下の作業が完了している前提。
- Apacheの導入(nginxでももちろんできるけど、記事中では設定例は示さない)
- ドメインの取得・設定
ディレクトリ構成
var
└www
│
├git
│ └プロジェクト名.git ←リモートリポジトリ ※1
│
└html
└プロジェクト名 ←※1をクローンしたもの(Webに公開される
└index.html etc...
実装
既にサーバーにgitを導入済みで、「サーバーへログイン→git pull」でサイト更新できる状態の人は、手順1−4を飛ばして、手順5だけでよい。
各作業は必要に応じてsudoで実行。
手順1:サーバーにgitをインストール
サーバーでgitコマンド使えない(インストールされていない)人のみ。
$ sudo yum -y install git
or
$ 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ファイルに設定を記述する。
$ sudo vi /etc/httpd/conf.d/hoge.conf
or
$ sudo vi /etc/apache2/sites-available/hoge.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
内容は以下。
#!/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へアクセスし、内容が反映されているか確認する。