cafe24에서 서버호스팅을 결제한 후 세팅한 과정에 대한 글로 기본적인 세팅 과정에 대해 기록했다.
cafe24에서 서버호스팅 구입 시 안내에는 centOS, ubuntu, fedora 등 원하는 OS로 설치해준다고 하여 Ubuntu server로 신청했지만, 실제 설치 시 차후 기술 지원은 CentOS 이외에는 어렵다는 이야기에 CentOS로 진행했다.
기본적으로 Cafe24에서 웹서비스를 바로 운용할 수 있도록 세팅을 해준 상태로 설치해주기 때문에 데몬만 실행해주면 바로 사용할 수 있다.
# sudo -u apache /home/apache/bin/httpd -k start</pre>
트래픽, 접속량 등을 제어하기 위한 throttle을 설치하려 했지만 apache2.x을 지원하지 않아 대신 CBand를 설치했다. CBand는 apxs를 요구하는데 httpd-devel에 포함되어 있다.
# yum -y install httpd-devel
# wget http://dembol.org/downloads/cband/mod-cband-0.9.7.5.tgz
# tar xfz mod-cband-0.9.7.5.tgz
# cd mod-cband-0.9.7.5
# ./configure --with-apxs=/usr/sbin/apxs
# make
# make install
CBand 설치는 아파치 2.x 에서의 트래픽 제한 글을 참고했다.
네임서버의 경우 dnsever를 사용하는 것을 권장한다. 직접 설치하고자 한다면 How to config BIND 9 for Linux를 참고해 설치하면 된다.
각각의 계정을 생성해주고 아파치에 설정, 데이터베이스를 생성, 주소를 연결하는 등의 처리를 위한 쉘 스크립트다.
#!/bin/bash
# 계정 생성을 자동으로 처리합니다.
# 1. 서버 아이디 생성 (useradd) / 비밀번호
# 2. /home/에 디렉토리 생성, chmod, chown 설정
# 3. /home/$account/public_html 기본 파일 복사
# 4. 도메인이 있다면
# /etc/named.conf 추가
# 5. /home/apache/conf/extra/httpd-vhosts.conf 에 해당 계정 virtualhost 추가 (도메인과 서브도메인)
# 6. 데이터베이스 추가
homedir="/home"
httpd="/home/apache/bin/httpd -k"
mysql="/home/mysql/bin/mysql -u root -p"
httpdown="apache"
htdocs="public_html"
namedconf="/etc/named.conf"
zone="standard.zone"
domain="localdomain.localname"
conf="/home/apache/conf/extra/httpd-vhosts-account.conf"
echo "계정 생성을 자동으로 처리합니다."
funcacc () {
while [ ! $account ]
do
echo -n "### 계정을 입력하세요 : "
read account
if [ ! $account ]; then
echo ">>> 계정명을 넣어 주시기 바랍니다."
unset account
elif (( $(cat /etc/passwd |grep -c "^$account:") > 0 )) ;then
echo ">>> 계정이 이미 존재합니다. 다시 입력바랍니다 "
unset account
fi
done
while [ ! $password ]
do
echo -n "### 비밀번호를 입력하세요 : "
read password
if [ ! $password ]; then
echo ">>> 비밀번호를 넣어 주시기 바랍니다."
fi
done
echo -n "### 도메인을 입력하세요 (없으면 그냥 엔터) : "
read yourdomain
echo "계정은 $account 입니다."
echo "비밀번호는 $password 입니다."
}
funcacc
# 계정 생성 /home/$account
useradd $account -s "/bin/bash" -d "$homedir/$account"
# 계정 비밀번호 설정
echo $password | passwd $account --stdin
# 홈디렉토리 권한 설정
chown "$account"."$httpdown" "$homedir/$account"
chmod 711 "$homedir/$account"
echo "initdate $(date +%Y-%m-%d\ %H:%M)" >> $homedir/$account/.userinfo
# public_html 생성
if [ $htdocs ] && [ ! -d "$homedir/$account/$htdocs" ] ; then
mkdir "$homedir/$account/$htdocs"
chown "$account"."$account" "$homedir/$account/$htdocs"
chmod 711 "$homedir/$account/$htdocs"
fi
#named 추가
if [ $yourdomain ] ; then
echo "zone \"$yourdomain\" IN {type master; file \"$zone\"; };" >/tmp/named.conf
cat /tmp/named.conf >> $namedconf
/usr/sbin/rndc -p 953 reload
fi
# /home/apache/conf/extra/httpd-vhosts.conf 에 해당 계정 virtualhost 추가 (도메인과 서브도메인)
echo
echo > /tmp/hosting
echo "### 등록일: $dat 계정명: $account ###" >> /tmp/hosting
echo "<VirtualHost *:80>" >> /tmp/hosting
echo " DocumentRoot $homedir/$account/$htdocs" >> /tmp/hosting
# 개인 도메인의 유무
if [ ! $yourdomain ]; then
echo " ServerName $account.domain.co.kr" >> /tmp/hosting
echo " ServerAlias www.$account.domain.co.kr" >> /tmp/hosting
else
echo " ServerName www.$yourdomain" >> /tmp/hosting
echo " ServerAlias $yourdomain $account.domain.co.kr www.$account.domain.co.kr" >> /tmp/hosting
fi
echo " CBandLimit 1Gi " >> /tmp/hosting
echo " CBandPeriod 1D " >> /tmp/hosting
# 로그 파일 셋팅
if [ ! $yourdomain ]; then
echo " ErrorLog logs/$account.$domain-error_log" >> /tmp/hosting
echo " CustomLog logs/$account.$domain-access_log combined" >> /tmp/hosting
else
echo " ErrorLog logs/$yourdomain-error_log" >> /tmp/hosting
echo " CustomLog logs/$yourdomain-access_log combined" >> /tmp/hosting
fi
echo "</VirtualHost>" >> /tmp/hosting
echo ">>> 다음 내용이 $conf 에 등록되었습니다"
echo "=================================================="
cat /tmp/hosting
echo "=================================================="
cat /tmp/hosting >> $conf
# $httpd restart
# restart로 재시작하면 cband가 리셋되버리는 문제점이...
$httpd graceful
# 데이터베이스 설정
dbname="$account"
if [ $dbname ]; then
echo dbname is $dbname
pass=$password
echo "dbpasswd is $pass"
echo "create database $dbname;" > /tmp/dbadd.sql
echo "grant all privileges on $dbname.* to $account@localhost identified by '${pass}';" >> /tmp/dbadd.sql
chmod 700 /tmp/dbadd.sql
echo
echo ">>> 다음 sql 문이 실행됩니다"
echo
echo "=================================================="
cat /tmp/dbadd.sql
echo "=================================================="
echo
echo ">>> 디비가 다음과 같이 추가후 검색되었습니다.(해당디비가 나오면 정상추가)"
echo ">>> rt 데이터베이스 비밀번호를 입력해주세요."
$mysql mysql < /tmp/dbadd.sql
rm -rf /tmp/dbadd.sql
fi
rm -rf /tmp/hosting
rm -rf /tmp/dbadd.sql
echo "세팅이 완료되었습니다."
위와 같이 쉘로 직접 작업하는 것은 여러가지 문제가 발생할 소지가 있기 때문에 가능하다면 Cpanel, Webmin 과 같은 관리도구를 설치해 사용하는 것을 권장한다.