cafe24 서버 호스팅 구입 후 기본 세팅 과정

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 과 같은 관리도구를 설치해 사용하는 것을 권장한다.

김용균

안녕하세요, 김용균입니다. 문제를 해결하기 위해 작고 단단한 코드를 작성하는 일을 합니다. 웹의 자유로운 접근성을 좋아합니다. 프로그래밍 언어, 소프트웨어 아키텍처, 커뮤니티에 관심이 많습니다.

이 글 공유하기

이 글이 유익했다면 주변에도 알려주세요!

페이스북으로 공유하기트위터로 공유하기링크드인으로 공유하기Email 보내기

주제별 목록

같은 주제의 다른 글을 읽어보고 싶다면 아래 링크를 확인하세요.

August 13, 2011

루비(Ruby) 입문 #1

연재할 듯 글을 시작했으나 연재하지 않고 있습니다. ( … ) 이름 이쁜 프로그래밍 언어 루비. 루비 온 레일즈가 각광 받는데 궁금해서 전부터 배우고 싶었던 언어였고, 휴가를 이용해 배워보려고. 루비를 일단 설치해야 하는데 RoR이 최종 목표이므로 …

July 12, 2011

사무실 이사

사무실 이사를 했다. 좁은 사무실 내에 인원이 많아지다보니 무질서한 커뮤니케이션 또한 잦아져 온전히 업무에 집중하기 어렵다는 판단 하에 사무실을 분리하기로 결정했다. 비도 오고 그래서 이사하기에 좋은 날씨는 아니었지만 짐을 내릴 땐 날씨가 괜찮아 다…