git WEBアプリケーション開発環境
開発チームとサーバ構成

○開発チーム
リーダーのAさんとBさんの2名体制、開発作業は各自のPCで行う。
○サーバ構成
リポジトリサーバ:ソースコードはこのサーバで集中管理する。
ステージングサーバ:関係各位への確認用
公開サーバ:別セグメントに配置しているため、リポジトリサーバと直接の通信はできない。
ユーザの作成(root@reposサーバ)
・gitグループを作成
・AさんとBさん用のアカウントを作成(gitグループに所属させる)
・パスワードの設定
・サーバ管理者のAさんに sudo権限を付けておきます
・Aさん用のアカウントをステージングサーバと公開サーバにも作成しておきます
[root@repos]$ groupadd git
・AさんとBさん用のアカウントを作成(gitグループに所属させる)
[root@repos]$ adduser a_user -G git
[root@repos]$ adduser b_user -G git
[root@repos]$ adduser b_user -G git
・パスワードの設定
[root@repos]$ passwd a_user
[root@repos]$ passwd b_user
[root@repos]$ passwd b_user
・サーバ管理者のAさんに sudo権限を付けておきます
[root@repos ~]$ visudo
---(下記を最終行に追加)---------------------------
a_user ALL=(ALL) ALL
------------------------------
---(下記を最終行に追加)---------------------------
a_user ALL=(ALL) ALL
------------------------------
・Aさん用のアカウントをステージングサーバと公開サーバにも作成しておきます
[root@stage]$ adduser a_user
[root@www]$ adduser a_user
[root@www]$ adduser a_user
中央リポジトリの作成(Aさん@reposサーバ)
・reposサーバにリポジトリ格納用のディレクトリを作成します
・gitグループが書込みできるようにパーミッションを変更します
・webappリポジトリ用のディレクトリを作成してそこに移動します
・webappリポジトリを作成します
※「--shared」オプションを付けることによってディレクトリに setgidを付けてくれます
しかし、このままだとグループがAさん(a_user)になっているため、Aさん以外は書込むことができません。 そこで「webapp.git」ディレクトリ以下全てを gitグループに変更しておきます。
以上で webappリポジトリの作成完了です。
[a_user@repos]$ sudo mkdir -p /var/repos
・gitグループが書込みできるようにパーミッションを変更します
[a_user@repos]$ sudo chgrp git /var/repos
[a_user@repos]$ sudo chmod 775 /var/repos
[a_user@repos]$ sudo chmod 775 /var/repos
・webappリポジトリ用のディレクトリを作成してそこに移動します
[a_user@repos]$ mkdir /var/repos/webapp.git
[a_user@repos]$ cd /var/repos/webapp.git/
[a_user@repos]$ cd /var/repos/webapp.git/
・webappリポジトリを作成します
[a_user@repos]$ git init --bare --shared
※「--shared」オプションを付けることによってディレクトリに setgidを付けてくれます
[a_user@repos]$ ls -l
-rw-rw-r-- 1 a_user a_user 23 9月 15 12:51 2012 HEAD
drwxrwsr-x 2 a_user a_user 4096 9月 15 12:51 2012 branches
-rw-rw-r-- 1 a_user a_user 126 9月 15 12:51 2012 config
-rw-rw-r-- 1 a_user a_user 73 9月 15 12:51 2012 description
drwxrwsr-x 2 a_user a_user 4096 9月 15 12:51 2012 hooks
drwxrwsr-x 2 a_user a_user 4096 9月 15 12:51 2012 info
drwxrwsr-x 4 a_user a_user 4096 9月 15 12:51 2012 objects
drwxrwsr-x 4 a_user a_user 4096 9月 15 12:51 2012 refs
-rw-rw-r-- 1 a_user a_user 23 9月 15 12:51 2012 HEAD
drwxrwsr-x 2 a_user a_user 4096 9月 15 12:51 2012 branches
-rw-rw-r-- 1 a_user a_user 126 9月 15 12:51 2012 config
-rw-rw-r-- 1 a_user a_user 73 9月 15 12:51 2012 description
drwxrwsr-x 2 a_user a_user 4096 9月 15 12:51 2012 hooks
drwxrwsr-x 2 a_user a_user 4096 9月 15 12:51 2012 info
drwxrwsr-x 4 a_user a_user 4096 9月 15 12:51 2012 objects
drwxrwsr-x 4 a_user a_user 4096 9月 15 12:51 2012 refs
しかし、このままだとグループがAさん(a_user)になっているため、Aさん以外は書込むことができません。 そこで「webapp.git」ディレクトリ以下全てを gitグループに変更しておきます。
[a_user@repos]$ chgrp -R git /var/repos/webapp.git
以上で webappリポジトリの作成完了です。
Bさん用PCの設定(Bさん@PCB)
・gitをインストールして初期設定をしておきます
・適当なディレクトリに移動します
・webappリポジトリのクローンを作成します
・webappディレクトリが作成されます
・webappディレクトリに移動します
・ファイルを作成してリポジトリに追加します
・変更を中央リポジトリに送信します
・中央リポジトリに反映されていることを確認してみます。
・適当なディレクトリに移動します
[b_user@PCB]$ cd work
・webappリポジトリのクローンを作成します
[b_user@PCB]$ git clone b_user@repos:/var/repos/webapp.git
Cloning into 'webapp'...
a_user@repos's password: ←(パスワードを入力)
warning: You appear to have cloned an empty repository.
Cloning into 'webapp'...
a_user@repos's password: ←(パスワードを入力)
warning: You appear to have cloned an empty repository.
・webappディレクトリが作成されます
[b_user@PCB]$ ls
webapp
webapp
・webappディレクトリに移動します
[b_user@PCB]$ cd webapp
・ファイルを作成してリポジトリに追加します
[b_user@PCB]$ echo "Hello World" > test.html
[b_user@PCB]$ git add test.html
[b_user@PCB]$ git commit -m "テスト用ファイルの作成"
[b_user@PCB]$ git log
commit 42a4d66d62baf987c64221206944dae2d82bd33d
Author: b_user
テスト用ファイルの作成
[b_user@PCB]$ git add test.html
[b_user@PCB]$ git commit -m "テスト用ファイルの作成"
[b_user@PCB]$ git log
commit 42a4d66d62baf987c64221206944dae2d82bd33d
Author: b_user
テスト用ファイルの作成
・変更を中央リポジトリに送信します
[b_user@PCB]$ git push origin master
※初回のpushのみ「origin master」の指定が必要です。次回からは「git push」のみでOK・中央リポジトリに反映されていることを確認してみます。
[b_user@PCB]$ ssh b_user@repos
[b_user@repos]$ cd /var/repos/webapp.git/
[b_user@repos]$ git log
commit 42a4d66d62baf987c64221206944dae2d82bd33d
Author: b_user
テスト用ファイルの作成
反映されています。
[b_user@repos]$ cd /var/repos/webapp.git/
[b_user@repos]$ git log
commit 42a4d66d62baf987c64221206944dae2d82bd33d
Author: b_user
テスト用ファイルの作成
Aさん用PCの設定(Aさん@PCA)
・gitをインストールして初期設定をしておきます
・webappリポジトリのクローンを作成します
・ファイルを編集して一行追記します
・変更をリポジトリに追加します
・変更を中央リポジトリに送信します
↓ここからBさんのPC
・このときBさんのPCには、Aさんの変更が反映されていません
・変更を受信します
・Aさんの変更が反映されました
・webappリポジトリのクローンを作成します
[a_user@PCA]$ cd work
[a_user@PCA]$ git clone a_user@repos:/var/repos/webapp.git
[a_user@PCA]$ cd webapp
[a_user@PCA]$ ls
test.html
↑Bさんがテスト用に作成したファイルがあることが分かります 。[a_user@PCA]$ git clone a_user@repos:/var/repos/webapp.git
[a_user@PCA]$ cd webapp
[a_user@PCA]$ ls
test.html
・ファイルを編集して一行追記します
[a_user@PCA]$ vi test.html
Hello World
こんにちわ世界 ←(追記)
Hello World
こんにちわ世界 ←(追記)
・変更をリポジトリに追加します
[a_user@PCA]$ git add test.html
[a_user@PCA]$ git commit -m "日本語訳を追記"
[a_user@PCA]$ git commit -m "日本語訳を追記"
・変更を中央リポジトリに送信します
[a_user@PCA]$ git push
↓ここからBさんのPC
・このときBさんのPCには、Aさんの変更が反映されていません
[b_user@PCB]$ cat test.html
Hello World
Hello World
・変更を受信します
[b_user@PCB]$ git pull
・Aさんの変更が反映されました
[b_user@PCB]$ cat test.html
Hello World
こんにちわ世界
Hello World
こんにちわ世界
ステージングサーバへのデプロイ(Aさん@stageサーバ)
・ステージングサーバのドキュメントルートディレクトリを一度削除します
・WEBコンテンツ格納用ディレクトリのオーナーをAさんに変更します
・webappリポジトリのクローンを作成します
・次回からは git pull すればデプロイ完了です
リポジトリサーバにWEBサーバが同居している場合は、gitのフックを使い自動的に「リポジトリにpush」→「ドキュメントルートにデプロイ」することができます。
・gitグループがドキュメントルートに書込みを出来るようにしておきます(setgidも付けます)
・webappリポジトリのクローンを作成します
・フックを作成します
・フックにエラーがないことを確認
開発用PCで git pushすれば同時にデプロイされます。
[a_user@stage]$ sudo rm -rf /var/www/html
・WEBコンテンツ格納用ディレクトリのオーナーをAさんに変更します
[a_user@stage]$ sudo chown a_user /var/www
・webappリポジトリのクローンを作成します
[a_user@stage]$ cd /var/www/
[a_user@stage]$ git clone a_user@repos:/var/repos/webapp.git html
[a_user@stage]$ git clone a_user@repos:/var/repos/webapp.git html
・次回からは git pull すればデプロイ完了です
[a_user@stage]$ cd /var/www/html && git pull
リポジトリサーバにWEBサーバが同居している場合は、gitのフックを使い自動的に「リポジトリにpush」→「ドキュメントルートにデプロイ」することができます。
・gitグループがドキュメントルートに書込みを出来るようにしておきます(setgidも付けます)
[a_user@repos]$ sudo rm -rf /var/www/html
[a_user@repos]$ sudo mkdir /var/www/html
[a_user@repos]$ sudo chgrp git /var/www/html
[a_user@repos]$ sudo chmod 2775 /var/www/html
[a_user@repos]$ sudo mkdir /var/www/html
[a_user@repos]$ sudo chgrp git /var/www/html
[a_user@repos]$ sudo chmod 2775 /var/www/html
・webappリポジトリのクローンを作成します
[a_user@repos]$ git clone /var/repos/webapp.git /var/www/html
・フックを作成します
[a_user@repos]$ vi /var/repos/webapp.git/hooks/post-receive
---(下記を追加)---------------------------
#!/bin/sh -
PATH="/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin"
cd /var/www/html/
git --git-dir=.git pull
exit 0
------------------------------
[a_user@repos]$ chmod 775 /var/repos/webapp.git/hooks/post-receive
---(下記を追加)---------------------------
#!/bin/sh -
PATH="/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin"
cd /var/www/html/
git --git-dir=.git pull
exit 0
------------------------------
[a_user@repos]$ chmod 775 /var/repos/webapp.git/hooks/post-receive
・フックにエラーがないことを確認
[a_user@repos]$ /var/repos/webapp.git/hooks/post-receive
Already up-to-date.
Already up-to-date.
開発用PCで git pushすれば同時にデプロイされます。
公開サーバへのデプロイ
公開サーバは色々な制約があることが多いので、gitでアーカイブを作成して手動で展開することにします。
・アーカイブの作成
・アーカイブの作成
[a_user@PCA]$ cd work/webapp/
[a_user@PCA]$ git pull
[a_user@PCA]$ git archive --format=tar --prefix=html/ HEAD > ../html.tar
作成した html.tarを公開サーバで展開します
[a_user@PCA]$ git pull
[a_user@PCA]$ git archive --format=tar --prefix=html/ HEAD > ../html.tar
以上です。
16
| h o m e |