08 « 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 10

git WEBアプリケーション開発環境 

開発チームとサーバ構成
gitsystem2.png

○開発チーム
 リーダーのAさんとBさんの2名体制、開発作業は各自のPCで行う。

○サーバ構成
 リポジトリサーバ:ソースコードはこのサーバで集中管理する。
 ステージングサーバ:関係各位への確認用
 公開サーバ:別セグメントに配置しているため、リポジトリサーバと直接の通信はできない。


ユーザの作成(root@reposサーバ)
・gitグループを作成
[root@repos]$ groupadd git

・AさんとBさん用のアカウントを作成(gitグループに所属させる)
[root@repos]$ adduser a_user -G git
[root@repos]$ adduser b_user -G git

・パスワードの設定
[root@repos]$ passwd a_user
[root@repos]$ passwd b_user

・サーバ管理者のAさんに sudo権限を付けておきます
[root@repos ~]$ visudo
---(下記を最終行に追加)---------------------------
a_user ALL=(ALL) ALL
------------------------------

・Aさん用のアカウントをステージングサーバと公開サーバにも作成しておきます
[root@stage]$ adduser a_user
[root@www]$ adduser a_user


中央リポジトリの作成(Aさん@reposサーバ)
・reposサーバにリポジトリ格納用のディレクトリを作成します
[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

・webappリポジトリ用のディレクトリを作成してそこに移動します
[a_user@repos]$ mkdir /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

しかし、このままだとグループがAさん(a_user)になっているため、Aさん以外は書込むことができません。 そこで「webapp.git」ディレクトリ以下全てを gitグループに変更しておきます。
[a_user@repos]$ chgrp -R git /var/repos/webapp.git

以上で webappリポジトリの作成完了です。

Bさん用PCの設定(Bさん@PCB)
・gitをインストールして初期設定をしておきます

・適当なディレクトリに移動します
[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.

・webappディレクトリが作成されます
[b_user@PCB]$ ls
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 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

テスト用ファイルの作成
反映されています。

Aさん用PCの設定(Aさん@PCA)
・gitをインストールして初期設定をしておきます

・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]$ vi test.html
Hello World
こんにちわ世界 ←(追記)

・変更をリポジトリに追加します
[a_user@PCA]$ git add test.html
[a_user@PCA]$ git commit -m "日本語訳を追記"

・変更を中央リポジトリに送信します
[a_user@PCA]$ git push

↓ここからBさんのPC
・このときBさんのPCには、Aさんの変更が反映されていません
[b_user@PCB]$ cat test.html
Hello World

・変更を受信します
[b_user@PCB]$ git pull

・Aさんの変更が反映されました
[b_user@PCB]$ cat test.html
Hello World
こんにちわ世界

ステージングサーバへのデプロイ(Aさん@stageサーバ)
・ステージングサーバのドキュメントルートディレクトリを一度削除します
[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

・次回からは 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

・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

・フックにエラーがないことを確認
[a_user@repos]$ /var/repos/webapp.git/hooks/post-receive
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を公開サーバで展開します


以上です。
スポンサーサイト



Posted on 2012/09/16 Sun. 13:26 [edit]

category: サーバ

thread: サーバー  -  janre: コンピュータ

TB: 0    CM: 0

16