git

【git】VPSにbareリポジトリを作成してpost-receiveで/var/www/htmlに自動デプロイする方法

投稿日:

はじめに

n

本記事では、VPSの/home/username配下にbareリポジトリを作成し、そこにpushした際にpost-receiveフックで/var/www/htmlへ自動的にデプロイ(pull)する仕組みを構築する手順を解説します。Gitを使ったシンプルなCI/CDの基礎として、サーバー運用や簡易デプロイ環境を手早く整えたい方におすすめです。

nn

想定環境・前提

n

    • n

    • VPS(Linux系ディストリビューション)

n

    • SSH接続権限を持つユーザー(username

n

    • Webドキュメントルート:/var/www/html

n

    • ローカルPCにGitがインストール済み

n

nn

全体の流れ

n

    1. n

    2. /home/username以下にbareリポジトリを作成

n

    1. hooks/post-receiveを編集して自動pullを設定

n

    1. ローカルからbareリポジトリへpush

n

    1. post-receiveがトリガーされて/var/www/htmlを更新

n

nn

1. bareリポジトリの作成

n

1-1. SSHでVPSにログイン

n

$ ssh username@your.vps.ip.address

nn

1-2. bareリポジトリ用ディレクトリを作成

n

$ cd /home/usernamen$ mkdir project.gitn$ cd project.gitn$ git init --bare

n

上記で/home/username/project.gitがbareリポジトリとして初期化されます。

nn

2. post-receiveフックの設定

n

push受信後に/var/www/htmlへ反映させるため、hooks/post-receiveを作成・編集します。

nn

2-1. hooksディレクトリへ移動

n

$ cd /home/username/project.git/hooks

nn

2-2. post-receiveファイル作成

n

$ vim post-receive

nn

2-3. スクリプト内容を記述

n

#!/bin/bashn# デプロイ先ディレクトリnTARGET_DIR=/var/www/htmln# bareリポジトリの場所nGIT_DIR=/home/username/project.gitnn# ログ出力用nLOGFILE=/home/username/deploy.lognn# 古いログを残す場合は mv などでローテートしてくださいnnecho "$(date +'%Y-%m-%d %H:%M:%S') deploy start" >> $LOGFILEnn# 作業ディレクトリに強制的にチェックアウトnGIT_WORK_TREE=$TARGET_DIR git --git-dir=$GIT_DIR checkout -f >> $LOGFILE 2>&1nnecho "$(date +'%Y-%m-%d %H:%M:%S') deploy end" >> $LOGFILEn

n

ファイルを保存後、実行権限を付与します。

n

$ chmod +x post-receive

nn

3. デプロイ先ディレクトリの権限設定

n

Webサーバー(例:Apache/nginx)が/var/www/htmlを読み書きできるよう権限を調整します。

n

$ sudo chown -R www-data:www-data /var/www/htmln$ sudo chmod -R 755 /var/www/html

n

必要に応じてユーザーグループを調整してください。

nn

4. ローカルリポジトリからのpush

n

ローカルPCで既存プロジェクトを初期化、または既存リポジトリを登録してpushします。

nn

4-1. リモートを登録

n

$ cd ~/my_projectn$ git init    # 初期化済みなら不要n$ git remote add production ssh://username@your.vps.ip.address/home/username/project.git

nn

4-2. first push

n

$ git add .n$ git commit -m "Initial commit"n$ git push production master

n

push後、VPS上の/var/www/htmlにファイルが反映されていれば成功です。

nn

5. 動作確認

n

    • n

    • ブラウザで http://your.vps.ip.address/ を開き、コンテンツが表示されるか確認

n

    • VPS上の/home/username/deploy.logを確認

n

nn

6. トラブルシューティング

n

6-1. push時にエラーが出る

n

$ git push production masternfatal: unable to fork

n

    • n

    • SSH接続可能か、~/.ssh/authorized_keysをチェック

n

    • hooks/post-receiveのパーミッションを再確認

n

nn

6-2. デプロイ先が空のまま

n

    • n

    • hooksスクリプト内のパス(GIT_WORK_TREEGIT_DIR)に誤りがないか

n

    • post-receiveに実行権が付与されているか

n

    • ログファイルにエラーメッセージが出力されていないか

n

nn

7. 応用例:ブランチごとにデプロイ先を変える

n

スクリプト内で分岐してブランチ名ごとに異なるディレクトリを指定できます。

n

#!/bin/bashnBRANCH=$(git rev-parse --symbolic --abbrev-ref $1)nif [ "$BRANCH" = "master" ]; thenn  TARGET=/var/www/htmlnelif [ "$BRANCH" = "staging" ]; thenn  TARGET=/var/www/staging_htmlnelsen  exit 0nfinnecho "Deploy $BRANCH to $TARGET"nGIT_WORK_TREE=$TARGET git --git-dir=$GIT_DIR checkout -fn

nn

参考サイト

n

n

n

nn

以上で、VPS上にbareリポジトリを構築し、post-receiveフック経由で/var/www/htmlへ自動デプロイする基本的な手順の解説は完了です。ぜひ自分の環境で試してみてください。

-git

Copyright© Code Custom , 2025 All Rights Reserved.