httpd.conf


<VirtualHost *:80>

        DocumentRoot /home/crplab/tomcat/webapps/ROOT

        ServerName servername.net

        ServerAlias *.servername.net

        #php_admin_value doc_root /home/shift

        #pbp_admin_value user_dir /home/shift/public_html

        CBandLimit 1500MB

        CBandPeriod 1D

        JkMount /* worker2

        JkMount /*.jsp worker2

</VirtualHost>


연동할때 꼭 이렇게 해줘야 합니다.

만약 *.jsp 만 했으면 jsp 일부가 먹통이 되는 경우가 있으니 주의합시다.


이거때문에 하루종일 삽질...ㅠ

Posted by RainC
,

DigtialOcean (해외 클라우드 서비스)






디지털오션은 클라우드 서비스를 제공합니다.

워낙 저렴하고 서비스가 좋아서 저도 지금 디지털 오션을 사용하고 있는데요.

월 5천원(1$) 에 1코어, 램 512, SSD 20기가를 제공합니다.

그리고 시간당 요금이 적용되고, 사용한 만큼 요금을 내면되고, 또 아무리 많이 사용해도 5달러를 못 넘는다는거에요.

기본적인 클라우드 서비스인 전원 켜기, 재시작, 끄기 기능이 포함되어 있습니다.

그리고 또 국내 클라우드 서비스랑은 또 다른게, 클라우드 콘솔 접근이 가능하다는것입니다.

클라우드 서버 OS 안에 문제가 생겼을때 트러블 슈팅을 하라고 기능을 냅둔것 같네요 ㅋㅋ..

또한, 디지털 오션에서는 클라우드 관리가 가능한 여러가지 API 를 제공하는것도 큰 장점입니다. 이를 이용해서

어플리케이션 또는 응용 프로그램을 개발해서 클라우드 관리가 가능합니다.


이 링크는 디지털 오션 API 를 이용해 외국에 거주하고 있는 개발자가 직접 만든 어플리케이션 입니다.

아래 사진은 디지털오션 API 입니다. 클라이언드 ID와 API Key 를 통해 클라우드 관리가 가능하게끔 만들어 두었군요.




그리고 더이상 클라우드를 사용하고 싶지 않을때 클라우드를 제거하면, 그 전까지 사용했던 요금을 내면 됩니다.

언제든지 OS 를 변경 가능하고, 또 언제든지 커널 변경이 가능하고, 스냅샷 기능, 또 하드웨어 사양을 변경할수 있습니다.

하드웨어 사양은 최대 8코어 램 16기가로 변경이 가능하고, 신청할땐 24코어 까지 신청이 가능합니다.

이 외에 클라우드 기능의 중요한 기능들이 몇몇 포함되어 있다고 보시면 될것 같습니다.

암튼 제가 생각하기엔 진짜로 진정한 클라우드 서비스를 제공하는곳은 디지털 오션이라고 생각합니다.

단점은 속도 이외엔 정말 완벽한 클라우드 서비스라고 생각합니다.

미국에 거주하고 계신 개발자들은 디지털오션을 많이 사용할것 같네요..

디지털 오션 서버는 1Gbps 속도까지 보장해주니..

아래 사진은 디지털오션 관리 페이지입니다.








국내에서도 디지털 오션 사용하고 계신 분들을 조금 보았는데..


속도때문에 잘 안쓰려는 사람들도 보이더라구요 ㅠㅜ


솔직히 속도 하나만 좋으면 다 좋은데말이죠..


디지털오션이 한국에오면 정말 소원이 없을듯...



이상 포스팅 여기까지였습니다~



-CRPLab RainC

Posted by RainC
,

우선 Apache에 Cband 모듈을 설치해서 /etc/httpd/modules/ 에 mod_cband.so 파일을 넣습니다.



그리고 /etc/httpd/conf/httpd.conf 을 수정합니다.


LoadModule cband_module modules/mod_cband.so

#cband 모듈 불러오기



CBandDefaultExceededURL http://trafic.crplab.kr/index.html

#트래픽이 초과됬을때 이동되는 페이지


<IfModule mod_cband.c>

        <Location /cband-status>

                SetHandler cband-status

                Order Deny,Allow

                Deny from All

                Allow from 127.0.0.1                         127.0.0.1 이외엔 접속할수 없도록 제한함.


        </Location>

        <Location /cband-me>                             

                SetHandler cband-status-me

                Order deny,Allow

                Deny from All

                Allow from All

        </Location>

</IfModule>

#cband 상황을 웹으로 표시해줍니다.



VirtualHost 도메인/cband-me 로접속하면 그 VirtualHost 의 트래픽 현황을 확인할수 있습니다.


cband-status 는 모든 VirtualHost 의 트래픽을 보여주기때문에 보안상 127.0.0.1 만 접근이 가능하도록 설정해주시는것이 좋습니다.


Posted by RainC
,

가끔 root 유저가 아닌 일반 유저에서 톰켓을 돌리고 싶을때 이방법을 활용하면 됩니다.


작업환경


CentOS 6.4 , 디지털오션서버, Tomcat 7, jdk 버젼 : 1.7.0_40



준비물.


우선 Tomcat 7 , httpd(apache) 가 있어야하고 jdk 가 설치되어 있어야 합니다.







1. 우선 아파치랑 Tomcat 랑 연동할수 있도록 설정합니다.


/etc/httpd/conf/httpd.conf 에 톰켓이랑 연동하는 Connecter 모듈을 불러오도록 코드 한줄을 넣고,


/etc/httpd/modules/ 에 mod_jk.so 를 넣어주시면 됩니다.


만약 /etc/httpd/moduels/mod_jk.so 라는 모듈이 없으면 직접 파일을 넣거나 컴파일 해서 사용하셔도 됩니다.


http://apache.mirror.cdnetworks.com//tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.37-src.tar.gz


여기서 Tomcat Connecter 를 받으셔서 mod_jk.so 를 컴파일할수 있습니다.


mod_jk.so 를 컴파일 하려면 apxs 패캐지가 필요한데, apxs 를 입력하면 없는 명령어라고 나오는 경우도 가끔 있네요..


yum install httpd-devel.x86_64


이럴땐 이 명령어로 추가 패캐지를 설치해주시면 해결됩니다.

이제 위에 링크로 들어가서 Tomcat Connector 압축을 풀고

cd tomcat-connectors-1.2.37-src
./buildconf.sh                      '// 만약 autoconf 에러가 나면 yum install autoconf 로 autoconf 를 설치하면 됩니다.
./configure --with-apxs
make

를 하면 이제 mod_jk.so 파일을 얻을수 있습니다. 이제 mod_jk.so 을  /etc/httpd/modules/ 에 넣고 

/etc/httpd/conf/httpd.conf 에 들어가서 

LoadModule jk_module modules/mod_jk.so


Tomcat Connecter 모듈을 불러올수 있도록 저걸 입력해줍니다.


jk_module 에 worker.properties 와 uriworkermap.properties 설정 파일들을 로드할수있게 이것도 입력해주시구


<IfModule jk_module>

        JkWorkersFile /etc/httpd/conf/workers.properties

        JkLogFile logs/mod_jk.log

        JkLogLevel info

        JkMountFile /etc/httpd/conf/uriworkermap.properties

</IfModule>


마지막으로 연동이 잘 되었는가를 테스트하기위해 VirtualHost 를 하나 작성합니다.


DocumentRoot, ServerName ,ServerAlias, JkMount 등 경로에 알맞게 입력해주셔야 합니다.


<VirtualHost *:80>

        DocumentRoot /home/crplab/tomcat/webapps/ROOT                   

        ServerName digitalocean.crplab.kr                                             

        ServerAlias *.digitalocean.crplab.kr

        JkMount /*.jsp worker1

        JkMount /home/shift/tomcat/webapps/host-manager/*.jsp worker1

        JkMount /home/shift/tomcat/webapps/manager/*.jsp worker1

</VirtualHost>


이제 httpd.conf 설정은 끝났으니 

/etc/httpd/conf/ 에 uriworkermap.properties 작성합니다.


/*.do = worker1

/*.jsp = worker1


이렇게 쓰고 저장하고 나옵니다.



그리고 /etc/httpd/conf/workers.properties 를 작성합니다.


worker.list=worker1,ajp13 

worker.worker1.port=8010

worker.worker1.host=localhost

worker.worker1.type=ajp13

worker.worker1.lbfactor=1

workers.java_home=/usr/java/jdk1.7.0_40


이것도 일단 이렇게 쓰고 저장합니다.


이제 아파치에서 해줄일은 끝났고, tomcat 에서만 잘 설정해주시면 연동이 끝납니다.


우선 Tomcat 이 jdk 를 인식해야하니, 톰켓 안에 있는 catalina.sh 파일을 수정해서 java 경로를 설정해줄것입니다.


JAVA_HOME=/usr/java/jdk1.7.0_40 을 입력해줍니다.


이제 /home/rainc/tomcat/conf/server.xml 을 수정해서 아파치랑 연동합니다.


이부분을 지우고,


<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->

<Connector port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443" /> 


밑에걸로수정해줍니다.

<Connector port="8080" maxHttpHeaderSize="8192"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" />



그리고 밑에 내려보면 AJP 포트를 설정하는 부분이 있는데,

이부분을

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


이렇게 변경해주세요.

<Connector port="8009" maxHttpHeaderSize="8192" tomcatAuthentication="false"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" protocol="AJP/1.3" />



그리고 여기서 엔진이름을 지정해줘야하는데, 아까 worker.properties 에서 설정한걸 맞추면 됩니다.


<Engine jvmRoute="worker1" name="Catalina" defaultHost="localhost">


그리고 호스트 부분은 도메인으로 하고, appBase 는 ROOT 로 설정해주세요.


<Host name="digitalocean.crplab.kr" appBase="ROOT"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">


이제 설정이 모두 끝났습니다.


톰켓 폴더로 들어가서 bin 폴더로 들어가면

catalina.sh 파일이 있습니다. start 옵션을 주면 tomcat 이 작동합니다.


[root@CRPLab bin]# ./catalina.sh start

Using CATALINA_BASE:   /home/rainc/tomcat

Using CATALINA_HOME:   /home/rainc/tomcat

Using CATALINA_TMPDIR: /home/rainc/tomcat/temp

Using JRE_HOME:        /usr/java/jdk1.7.0_40

Using CLASSPATH:       /home/rainc/tomcat/bin/bootstrap.jar:/home/rainc/tomcat/bin/tomcat-juli.jar

[root@CRPLab bin]#


작동 여부를 볼려면 ps -aux | grep java 명령어로 톰켓이 작동하는지 여부를 확인할수 있습니다.

종료할때는 ./catalina.sh stop 으로 종료가 가능합니다.

그리고 도메인주소:8080/index.jsp 들어가서 Tomcat 설정 페이지가 나오는지 확인하시면 됩니다.

글 내용에 문제가 있거나 잘못된 부분이 있으면 지적 부탁드리겠습니다.


감사합니다.



Posted by RainC
,

Tomcat 7, CentOS 6.4 기준으로 작성할 예정입니다.


오늘은 여기까지.

Posted by RainC
,

CRPLab VirtualHost Script 입니다.


가상 호스트 작성을 좀더 편리하게 작성이 가능합니다.


트래픽 주기 설정을 하시려면 추가 확장 모듈(cband) 가 필요합니다.


http://quota.kr/linux/1003 여길 들어가시면 CentOS 전용 cband 확장 모듈을 설치하시고, httpd 를 재시작 하면 됩니다.


이 스크립트로 사용자 설정에 맞게 올바르게 설정해 주셔야 스크립트가 정상적으로 작동합니다.


TIP. /etc/skel/ 에 public_html , docs 폴더를 만들면 a라는 사용자를 만들면 사용자 a 디렉토리 안에 public_html 와 docs 폴더가 자동으로 생성되어 있습니다. public_html 안에 index.html 을 넣어주면 VirtualHost 설정 완료 페이지를 만들수 있습니다.




#!/bin/sh

hr="---------------------------------"

echo "CRP Lab VirtualHost 설정 스크립트"

echo

echo

echo "만들 계정명을 입력해주세요."

read -p "사용자 이름 : " id


if [ "$id" = "y" ] && [ "$id" = "Y" ];then

 exit

fi



echo "패스워드를 설정합니다."

echo "패스워드는 계정_crplab 형식으로 설정해주세요."

adduser $id

passwd $id

echo "계정 생성이 완료되었습니다."

sleep 2

clear

echo "/home/$id/public_html , /home/$id 퍼미션을 설정합니다."


chmod 710 /home/$id

chgrp apache /home/$id

chown $id /home/$id/public_html

chgrp apache /home/$id/public_html

chmod 755 /home/$id/public_html


echo "권한 설정이 완료되었습니다."


echo "VirtualHost 설정을 위해, 도메인을 설정합니다."

echo

echo "도메인을 입력해주세요."

read -p ">" domain


if [ "$domain" = "n" ] && [ "$domain" = "" ];then

 exit

fi


echo "관리자 이메일을 설정합니다."

echo "이메일을 입력해주세요."

echo "없으면 noemail 을 입력해주세요"

read -p ">" email


if [ "$email" = "n" ] && [ "$email" = "" ];then

 exit

fi


echo "트래픽을 설정합니다."

echo "트래픽을 설정합니다."
echo "꼭 MB, GB 단위를 붙여주셔야 합니다."
read -p ">" traffic

if [ "$traffic" = "n" ] && [ "$traffic" = "" ];then
 exit
fi

echo "트래픽 갱신 주기를 설정합니다."
echo "1초당 트래픽 갱신은 1S, 1일마다는 1D, 1주일은 1W"
read -p ">" refresh

echo "" >> /etc/httpd/conf/httpd.conf
echo "

<VirtualHost *:80>
        DocumentRoot "/home/$id/public_html"
        ServerName $domain
        ServerAlias *.$domain
        #php_admin_value doc_root /home/$id
        #pbp_admin_value user_dir /home/$id/public_html
        CBandLimit $traffic
        CBandPeriod $refresh
</VirtualHost>" >> /etc/httpd/conf/httpd.conf
echo

sed -i "s/___님/$id/g" /home/$id/public_html/index.html
sed -i "s/도메인 : __/도메인 : $domain/g" /home/$id/public_html/index.html
sed -i "s/계정이름 : __/계정 이름 : $id/" /home/$id/public_html/index.html
sed -i "s/트래픽 : __/트래픽 : $traffic/" /home/$id/public_html/index.html
sed -i "s/갱신주기 : __/갱신주기 : $refresh/" /home/$id/public_html/index.html

## sed 명령어 = 어떤 대상 파일에 있는 문자열을 다른 문자열로 치환해주는 명령어입니다.
## 사용방법은 이러합니다. sed -i "s/바꿀내용/바뀔내용/" 대상파일
##  이외에 정규식을 이용하여 치환할수 있습니다. 자세한 내용은 



echo "이 아이피랑 도메인이랑 연결되어 있는지 확인해주세요."
echo "Server IP"
ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'
echo "--------"
echo
echo
ping $domain -c 2

echo "핑 테스트가 끝났습니다."
echo "모든 설정이 끝났습니다. 웹 서비스를 재시작합니다."
echo "설정된 계정이름은 $id , 도메인은 $domain 입니다"
echo "트래픽은 $traffic , 갱신 주기는 $refresh 입니다."
echo
echo "CRPLab"
/etc/init.d/httpd restart


스크립트에 문제가 있거나 불편사항이 있으시다면 덧글로 남겨주시기 바랍니다.


감사합니다.

Posted by RainC
,

작업환경 : CentOS 6.4


httpd 버젼 2.2.15


tail -f 로 error.log 를 둘러보다가..

Apache has memory leak, you may encounter this when running apache for some time -
[emerg] (28)No space left on device: Couldn’t create accept lock
or
[crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed
or
[Wed Aug 14 00:00:09 2012] [error] (28)No space left on device: Cannot create SSLMutex


꼭 이러면서 아파치가 재시작이 안되곤 합니다.


이럴땐 명령어 한줄로 간단히 해결됩니다.


ipcs -s | grep apache | awk ' { print $2 } ' | xargs ipcrm sem


또는

ipcs -s | grep apache | sudo perl -alne 'qx(ipcrm -s $F[1])' 







Posted by RainC
,

앞으로 많은 방문 부탁 드립니다.~~


IT 소식, 또는 서버 운영에 필요한 팁들을 올리겠습니다.


SNS에서 저희 CRPLab 소식을 받으시려면

페이스북 : http://fb.com/CRPLab


카카오스토리 : 친구 찾기 -> "CRP Lab" 검색 하시면 됩니다.


감사합니다.

Posted by RainC
,