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

색상을 바꿔요

눈에 편한 색상을 골라보세요 :)

Darkreader 플러그인으로 선택한 색상이 제대로 표시되지 않을 수 있습니다.