2009년 01월 07일
서버 어플리케이션 배포 스크립트
배포 작업의 최소 단위는 다음 복사, 실행, 루트 사용자로 실행 세 가지 기능이다. 이를 조합하여 배포 작업을 쉽게 기술할 수 있다. Fabric의 Bash 판이다.
간단한 사용 예. JDK 설치:
조금 어려운 아파치 HTTP 서버 설치와 시작:
명령행에서 target_hosts 에 나열된 호스트를 대상으로 작업을 차례로 실행할 수 있다.
이렇게

user=blog
_put()
{
src=$1
dst=$2
host=$3
scp -pr $src ${user}@${host}:$dst
}
_run() {
cmd=$1
host=$2
ssh -l ${user} $host $cmd
}
_sudo() {
cmd=$1
host=$2
ssh -l root $host $cmd
}
간단한 사용 예. JDK 설치:
- 설치된 JDK 제거한다.
- 로컬의 .jdk1.6.0_10 디렉토리를 대상 호스트의 app의 하위 디렉토리로 복사한다.
- jdk1.6.0_10의 Soft Link jdk를 만든다.
jdk_install()
{
host=$1
echo "Install JDK on $host"
_run "mkdir -p app ; rm -rf app/jdk1.6.0_10 app/jdk" $host
_put ./jdk1.6.0_10 app/ $host
_run "cd app && ln -sf jdk1.6.0_10 jdk" $host
}
조금 어려운 아파치 HTTP 서버 설치와 시작:
- 설치된 아파치 HTTP 서버 제거한다.
- 바이너리 패키지를 대상 호스트로 복사한다.
- 바이너리 패키지 압축을 푼다.
- 일반 계정으로 실행하여도 80포트를 사용할 수 있도록 httpd 실행 파일의 소유주를 root로 변경하고 setuid를 설정한다.
- 바이너리 패키지를 삭제한다.
- 설정 파일을 대상 호스트로 복사한다.
httpd_install()
{
host=$1
echo "Install httpd on $host"
_run "mkdir -p app ; rm -rf app/httpd-2.2.10" $host
_put $source_dir/src/main/httpd-2.2.10-linux.tar.gz ./ $host
_run "tar xvzf httpd-2.2.10-linux.tar.gz -C app --exclude manual" $host
_sudo "cd /home/blog/app/httpd-2.2.10/bin && chown root httpd && chmod +s httpd" $host
_run "rm httpd-2.2.10-linux.tar.gz" $host
_put "$source_dir/src/main/environment-release/httpd/*" app/httpd-2.2.10/ $host
}
- 열 수 있는 파일 디스크립터 수를 만 개로 설정하고 아피치 서버를 시작한다.
httpd_start()
{
host=$1
echo "Start httpd on $host"
_run "ulimit -n 10000 && app/httpd-2.2.10/bin/apachectl start" $host
}
명령행에서 target_hosts 에 나열된 호스트를 대상으로 작업을 차례로 실행할 수 있다.
#!/bin/sh
#
# Tasks
#
target_hosts="
10.0.1.1 10.0.1.2
"
for host in $target_hosts
do
echo "Host $host"
for task in $@
do
$task $host
done
done
이렇게
$ ./deploy.sh httpd_stop httpd_install httpd_start
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- Apache HTTP Server 자동 설치 by 이피
- Embedded Linux (2) by S2nNAMU
- Maven by 너구라
- Linux - CentOS 5.2 - oracle 10gr2 silent install by overdose
- Apache and Python with ModPython #3 by FnWinter
# by | 2009/01/07 14:24 | 트랙백 | 덧글(0)







☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]