56
77

More than 3 years have passed since last update.

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

Last updated at Posted at 2017-02-11

概要

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コマンド使えない(インストールされていない)人のみ。

サーバー(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へアクセスし、内容が反映されているか確認する。

56
77
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
77