LoginSignup
6
13

More than 5 years have passed since last update.

GitBucketとサーバの自動デプロイ環境構築

Last updated at Posted at 2017-06-16

開発サーバにpushをしたら、webサーバに自動デプロイされる環境を構築する

前回の記事GitBucketを自サーバに構築しようでGitBucketの構築方法を書いたので、今回はそれと連動させて、webサーバに自動デプロイされるような環境を作りたいと思います。今回は、開発サーバ兼テストサーバということで、ローカルからサーバのbareリポジトリ、およびGitBucketのリポジトリ(GitBucketでも管理できたら楽かなと思い)にpushし、それをnon-bareリポジトリであるwwwフォルダがpullするような構築作業を行います。
まず、下に今回の一連の流れのイメージ図を示します。

スライド1.png

1. Gitのインストール

まず、gitコンパイルに必要なgccおよび、MakeMakerをインストールしてきます。

$yum -y install gcc
perl-ExtUtils-MakeMakerを導入
$yum -y install perl-ExtUtils-MakeMaker

続いて、gitに必要なツール群をインストールします。

$yum -y install curl-devel expat-devel gettext-devel openssl

準備が整ったので、gitをダウンロードします。ひとまずsrcディレクトリにダウンロードをします。

$cd /usr/local/src
$wget https://www.kernel.org/pub/software/scm/git/git-2.7.2.tar.gz
ファイルを解凍する
$tar xzvf git-2.7.2.tar.gz

続いて、gitのコンパイルおよびインストールを行います。

$make prefix=/usr/local all
$make prefix=/user/local install

2. SSHの設定

ローカルからサーバにアクセスするために、sshの設定を行います。
パスワードを毎回聞かれないようにするため、公開鍵認証を用います。まず鍵を生成します。

$ssh-keygen -t rsa

ローカルで作成した公開鍵をサーバに投げてください。
詳細設定は省略。 ssh公開鍵などで検索すると出てきます。
./configも設定しおきましょう。ssh ホスト名 でアクセスできるようになります。

cd ~/.ssh
vi config

以下を記述
host ホスト
  HostName     アドレス
  Port         ポート
  User         ユーザ名
  IdentityFile ~/.ssh/id_rsa

3. GitBucketのリポジトリ作成

前回の記事GitBucketを自サーバに構築しよう
で構築したGitBucketのサイトに行って、リポジトリを作成してください。GitHubとほぼ同じ方法で作成できます。作成したら、GitHubと同じ要領で、commitしpushを行ってください。

4. リモートリポジトリ(bareリポジトリの作成)

次にサーバの方にリモートリポジトリを作成します。これはbareリポジトリで作成をしてください。
好きなディレクトリ(ここではわかりやすいように、ホームディレクトリとします)に移動し、bareリポジトリを作成します。

$cd
$mkdir git_remote
$cd git_remote
$git init --bare test.git

5. pushの設定

ローカルリポジトリに移動し、configファイルにリモートリポジトリの設定を行います。
.git/configファイルの[remote "origin"]のurlに以下を追記します。

url = ホスト名:/bareリポジトリのパス/git_remote/test.git

こうすることで、./git/configには二つのurlが記述されることになります。まずはGitBucketのリポジトリのurlと、先ほど作成したbareリポジトリです。これで、ローカルからpushすると、GitBucketのリポジトリとbareリポジトリの両方にpushされます。一度pushしましょう。sshの設定を行っているので、パスワードを入力せずにpushすることが可能だと思います。

6. 自動デプロイ環境の構築

最後に、自動デプロイ環境を構築していきます。
まずはリモートサーバのwwwにフォルダにファイルをクローンします。

$cd /var/www
$git clone /bareリポジトリのパス/git_remote/test.git

これで、wwwディレクトリにtestディレクトリが作成されたと思います。
自動デプロイはhook機能を使って構築していきます。

$cd /bareリポジトリまでのパス/git_remote/test.git/hooks
$mv post-receive.sample post-receive
$vi post-receive 
以下を記述
cd /var/www/test
git --git-dir=.git pull

実行権限を与え、pullされるかどうか実際に実行してみます。

$chmod +x post-receive
$./post-receive

ここで注意してほしいのですが、root権限で作業を行い設定をしていると、post-receiveを実行した際、下のようなエラーが表示されると思います。

remote: error: cannot open .git/FETCH_HEAD:

これはroot権限で作業行っていたため、.gitが開けないことが原因で起こるエラーです。
なので、www配下にあるtestディレトリのユーザ権限を以下のコマンドで変更しておきましょう。

$chown -R ユーザ名 /var/www/test

これで、すべての環境が整いました。ローカルからpushをすると、デプロイされ、
webページが更新されていると思います。またGitBucketのサイトにアクセスして、しっかりとコミットされているとことを確認してみてください。
これで、テストサーバでの確認をし、OKであれば本番サーバにpullするという環境も、構築をすることができると思います。

<参考にさせていただいたサイト>

「gitでシンプルなデプロイ環境を作る」
http://qiita.com/zaburo/items/8886be1a733aaf581045

6
13
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
6
13