ミライハック
  • Home
  • Categories
  • About

>> Home / インフラ

git pushで本番環境にデプロイ

∵ Takayoshi Saito ∴ 2013-06-17 ∞ 2'

git pushでデプロイしたい

ローカルレポジトリにgit commitした後に、問題なければリモートレポジトリにgit pushすることになりますが、git pushしただけではリモートレポジトリの情報が更新されるだけでデプロイはされません。今までデプロイ作業は自宅サーバーにログインして、git pullを行なっていたのですが、それは面倒なのでgit pushのタイミングでデプロイを自動化することにしました。まず、レポジトリを立てるところから順を追って解説します。

リモート側にGitレポジトリを立てる

$ mkdir repo
$ cd repo
$ git init
$ git config --bool core.bare true
$ cp -rf /srv/www ./
$ git add *
$ git commit -m "www add"
$ cd /srv
$ rm -rf www
$ git clone /srv/repo www

その後、repo/.git/の中にあるフックを編集して、アップデートのフックでgit pullが走るようにします。

$ cd /srv/repo/www/.git/hooks
$ mv post-update.sample post-update
$ vi post-update
 #!/bin/bash
 #
 # An example hook script to prepare a packed repository for use over
 # dumb transports.
 #
 # To enable this hook, rename this file to "post-update".
 $ cd /srv/www && git --git-dir=.git pull

ローカル側にGitレポジトリのクローンを作成

$ git clone ユーザー名@サーバー名:/srv/repo/
$ cd www
$ touch test.txt
$ git add test.txt
$ git commit -m "test.txt add"
$ git push

これで本番環境にオートデプロイされます。本番環境ではpushリクエストを受け取ったら、それをフックとしてgit pullを実行し、ドキュメントルートのスクリプトを更新します。

クラスタサーバー構成の場合どうするか

クラスタサーバー構成の場合、複数台のサーバーでlsyncdを構成しておくと、カーネルのinotify機能をトリガーにしてrsyncが自動実行されるため、複数台のサーバー間の同期を行うことができます。PHPやPerlの場合はこれで大丈夫ですが、Javaなどコンパイルが必要な言語に関してはいったんwarにしてJenkinsでデプロイしたほうが良いかもしれません。

Search

Categories
  • LInux
  • インターネット
  • インフラ
  • エッセイ
  • ゲーム
  • システム開発
  • セキュリティ
  • データサイエンス
  • 国際関係
  • 政治
  • 歴史
  • 社会学
  • 自己紹介
  • 行ってきた

Pages
  • 齊藤貴義
  • 職務経歴
  • スクレイピング・ハッキング・ラボ サポートページ
  • 『爆速開発を支えるClaude Code上級者テクニック』サポートページ

2026 © Takayoshi Saito | Twitter GitHub | Built on Zola