Contents
はじめに
n
本記事では、VPSの/home/username配下にbareリポジトリを作成し、そこにpushした際にpost-receiveフックで/var/www/htmlへ自動的にデプロイ(pull)する仕組みを構築する手順を解説します。Gitを使ったシンプルなCI/CDの基礎として、サーバー運用や簡易デプロイ環境を手早く整えたい方におすすめです。
nn
想定環境・前提
n
-
- n
- VPS(Linux系ディストリビューション)
n
-
- SSH接続権限を持つユーザー(
username
)
- SSH接続権限を持つユーザー(
n
-
- Webドキュメントルート:
/var/www/html
- Webドキュメントルート:
n
-
- ローカルPCにGitがインストール済み
n
nn
全体の流れ
n
-
- n
- /home/username以下にbareリポジトリを作成
n
-
- hooks/post-receiveを編集して自動pullを設定
n
-
- ローカルからbareリポジトリへpush
n
-
- 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
を確認
- VPS上の
n
nn
6. トラブルシューティング
n
6-1. push時にエラーが出る
n
$ git push production masternfatal: unable to fork
n
-
- n
- SSH接続可能か、
~/.ssh/authorized_keys
をチェック
- SSH接続可能か、
n
-
- hooks/post-receiveのパーミッションを再確認
n
nn
6-2. デプロイ先が空のまま
n
-
- n
- hooksスクリプト内のパス(
GIT_WORK_TREE
やGIT_DIR
)に誤りがないか
- hooksスクリプト内のパス(
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へ自動デプロイする基本的な手順の解説は完了です。ぜひ自分の環境で試してみてください。