tsukarooohi's diary

CakePHP,CentOS,AWSなど勉強中の技術的記録として利用中。

フック処理を使った自動デプロイ

環境+設定内容は過去の記事を読んで頂ければと思います。
取り敢えずの目標
ローカルからmasterブランチにpushすればサーバの本番環境(www.example.com)
その他ブランチにpushすればサーバのテスト環境(debug.example.com)
それぞれにデプロイされる。


【作業ツリー】
サーバー
www.example.com
debug.example.com

ローカル
www.example.com

フック設定

vim ~/repos/www.example.com/httpdocs.git/hooks/post-update
# push されたブランチ名が BRANCH に入る
BRANCH=$(git rev-parse --symbolic --abbrev-ref $1)
#BRANCH="test"
if [ "${BRANCH}"="master" ]; then
	(
	cd /var/www/vhosts/www.example.com/httpdocs
	git --git-dir=.git fetch
	git --git-dir=.git reset --hard origin/master
	git --git-dir=.git clean -fdx
	)
else
	(
	cd ~/tmp
	git --git-dir=.git fetch
	git --git-dir=.git reset --hard origin/${BRANCH}
	git --git-dir=.git clean -fdx
	rsync -avr --delete --stats ./ /var/www/vhosts/debug.example.com/httpdocs
	)
fi

以上で完了。

社内での共同開発環境について

【作業者】
プログラマー数人
デザイナー数人

【やりたい事】
自動デプロイ

【作業ツリー】
サーバー
www.example.com
debug.example.com

ローカル
www.example.com


【案1】
サーバー側もGit管理

[リモートリポジトリ]
example.com.git

ローカル -> push -> サーバー
masterブランチ -> push -> www.example.com
その他ブランチ -> push -> debug.example.com

リモートリポジトリのフック処理で振り分ける。

[問題点]
案件によってはプログラマー、デザイナー間での作業引き継ぎの為のpushもある為push毎にデプロイはよろしくない。


【案2】
社内共有サーバーにリモートリポジトリ

ブランチ単位で作業開始 -> サーバーに反映させて動作確認に至るまでcommit,pushを各作業者が行う。
サーバーでの動作確認を行えるタイミングでのpushのみ社内共有サーバーのリモートリポジトリのフック処理(rsync)でデプロイ

[問題点]
複数案件が同時進行する為、結果複数ブランチがデプロイ対象になる。
先にデプロイしたブランチの確認時には別ブランチがデプロイされてる可能性が高い。


だめだ。
解決策が見つからない為まとめただけで終わろう。

自動デプロイまでの道のり(Gitolite編)

前々回書いた記事
自動デプロイまでの道のり(VirtualBox+Vagrant編)

前回書いた記事
自動デプロイまでの道のり(Apache環境用意編)

やっと本目的に近づいて来ました。
今回はGitoliteのインストール。

仮想環境にGitolite用のユーザーを作成する

vagrant ssh
sudo useradd git


一旦ローカルで作業

cd ~/.ssh
ssh-keygen -t rsa -f git-admin
scp -P 2222 ~/.ssh/git-admin.pub vagrant@127.0.0.1:~/


仮想環境へログイン

vagrant ssh
sudo mv ~/git-admin.pub /home/git/git-admin.pub
sudo chown git:git /home/git/git-admin.pub
sudo yum install perl-Time-HiRes


gitユーザーで作業

sudo su - git
mkdir ~/tmp;cd ~/tmp

他の方の記事を参考にさせて頂きながらの作業なのでGit自体のインストールがまだでしたw
取り敢えずyumで簡単インストール(gitユーザーではないです)

sudo yum install git
git --version
git version 1.7.1


では作業の続き

sudo su - git
git clone git://github.com/sitaramc/gitolite
mkdir -p ~/bin
gitolite/install -to ~/bin
~/bin/gitolite setup -pk ~/git-admin.pub

不要なファイルを削除

rm -rf ~/tmp
rm -rf ~/git-admin.pub

authorized_keysの確認

ls -l ~/.ssh

参照させてもらってた記事には

gitolite start
gitolite end

とかあるけど何やらだめなのでそのままログアウト


ローカルで

vim ~/.ssh/config
Host 127.0.0.1
    HostName 127.0.0.1
    User git
    Port 2222
    IdentityFile ~/.ssh/git-admin

これで好きな場所に管理用gitolite-adminをクローン

git clone 127.0.0.1:gitolite-admin


・・・ふとここで自分のやりたい事は自動デプロイでGitだけで事足りそうなのでこれ以上の検証はおあずけw

タイトルがステマっぽくなり申し訳ないです。

自動デプロイまでの道のり(Apache環境用意編)

前回書いた記事(自動デプロイまでの道のり(VirtualBox+Vagrant編))に続いて今回は
Apache
をインストールして簡単な動作確認まで行きたいと思います。

では上記以外にも細かいものも含め開始。

yumのアップデート

sudo yum upgrade

vimのインストール

sudo yum install vim

CentOS?の日本語設定
sudo vim /etc/sysconfig/i18n

- LANG="en_US.UTF-8"
+ LANF="ja_JP.UTF-8"

Apacheのインストール

sudo yum install httpd
sudo /sbin/chkconfig httpd on // 自動起動On
sudo /etc/rc.d/init.d/httpd start

Apacheの起動が確認出来たので1回再起動

sudo reboot

最終的にやりたい事がGitでmasterにpushするとwwwへ自動デプロイ
その他ブランチへのpushはdebug.へ自動デプロイしたいので最低限でバーチャルホストの設定

Webディレクトリの作成

sudo mkdir /var/www/vhosts
cd vhosts
sudo mkdir /var/www/vhosts/www.example.com
sudo chown vagrant:vagrant /var/www/vhosts/www.example.com

sudo mkdir /var/www/vhosts/www.example.com/{httpdocs,logs}
sudo chown vagrant:vagrant /var/www/vhosts/www.example.com/{httpdocs,logs}
--------------------------------------------------------------------------------
sudo mkdir /var/www/vhosts/debug.example.com
sudo chown vagrant:vagrant /var/www/vhosts/debug.example.com

sudo mkdir /var/www/vhosts/debug.example.com/{httpdocs,logs}
sudo chown vagrant:vagrant /var/www/vhosts/debug.example.com/{httpdocs,logs}
cd /etc/httpd/conf

本当だと当たり前でバックアップが必要です!

sudo vim httpd.conf
- Listen 80
+ #Listen 80
cd /etc/httpd/conf.d
sudo vim vhosts.conf
Listen 80
NameVirtualHost *:80
<VirtualHost *:80>

	ServerName 192.168.33.10
	DocumentRoot /var/www/vhosts/www.example.com/httpdocs

	ErrorLog /var/www/vhosts/www.example.com/logs/error.log
	CustomLog /var/www/vhosts/www.example.com/logs/access.log combined env=!no

	<Directory "/var/www/vhosts/www.example.com/httpdocs">

		Options ExecCGI IncludesNOEXEC FollowSymLinks
		AllowOverride All
		Order allow,deny
		Allow from all

	</Directory>

</VirtualHost>

Listen 8090
NameVirtualHost *:8090
<VirtualHost *:8090>

	ServerName 192.168.33.10:8090
	DocumentRoot /var/www/vhosts/debug.example.com/httpdocs

	ErrorLog /var/www/vhosts/debug.example.com/logs/error.log
	CustomLog /var/www/vhosts/debug.example.com/logs/access.log combined env=!no

	<Directory "/var/www/vhosts/debug.example.com/httpdocs">

		Options ExecCGI IncludesNOEXEC FollowSymLinks
		AllowOverride All
		Order allow,deny
		Allow from all

	</Directory>

</VirtualHost>
sudo /etc/rc.d/init.d/httpd restart

適当にwwwとdebugにindex.htmlファイル用意して表示確認

自動デプロイまでの道のり(VirtualBox+Vagrant編)

会社でも家でもGitでの管理はしているがそろそろpushでの自動デプロイをはかりたいと思い、色々調べてはいるがjenkinsとか中々に自分にはいきなりは難しそうなので、まずはサーバーをGit管理してみる事に。

また一点だけ不安もある。
よくある構成がGithub+jenkins+Webサーバーとかになるのかな?
要するにGitとWebサーバーを別々に運用してるならいいが、今回やろうと思ってる構成ではWebサーバー上でGit管理する形になる。
当然Gitのログもずっと同サーバー内に残るって事。
どんだけ容量が必要になってくるのかが分からないのが不安。

って事でまずは最近覚えた(遅っw)
VirtualBox+Vagrantで仮想環境構築
ホントはこの先をChef等で管理したいんだが全然知識不足な為今回は手動で最低限必要なものだけインストール予定。

では作業開始

Vagrant用ディレクトリ作成
mkdir Vagrant-Gitolite
cd Vagrant-Gitolite

Vagrant設定ファイルの雛形作成
vagrant init

作成させたVagrantfileを修正して
CentOS6.5
メモリー1G
の仮想環境を用意

config.vm.box = "gitolite"
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "1024"]
end
config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box"

Vagrant起動
vagrant up

仮想環境にログイン
vagrant ssh

では次回この仮想環境に
Apache
Gitolite
をインストールして動作確認