2009-11-17 Bookmark

서버 2009.11.17 21:16

아파치와 톰캣을 활용한 대용량 웹서비스 운영
http://www.ibm.com/developerworks/kr/library/opendw/20061017/

jconsole은 jdk1.5에서부터 기본제공되는 툴로 JMX표준을 이용해 간단하게 JVM상의 Thread, Heap Memory 및 VM정보를 모니터링하게 해주는 툴이다.
다음과 같이 셋팅 해 주면 원격서버의 메모리 Leak현상 및 JVM상태를 모니터링 할 수 있다.

1.톰캣을 사용한다면 Catalina.sh나 Catalina.cmd에 항목추가(인증없이 사용할 때)
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=사이트이름"

2.사용자인증을 추가해서 사용할 때
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Djava.rmi.server.hostname=사이트이름 -Dcom.sun.management.jmxremote.password.file=$CATALINA_HOME/conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=$CATALINA_HOME/conf/jmxremote.access"; 

3. jmxremote.password 파일 샘플
user1 password1 
user2 password2

4. jmxremote.access 파일 샘플
user1 readonly
user2 readwrite

5. jconsole실행방법
   JDK가 인스톨된 디렉토리의 bin에서 jconsole을 실행시킨다.


6.  Overview화면


7. Memory화면



8. Threads화면




Trac은 다른건 다 좋은데 일정관리 측면에서는 빈약한게 사실이다. 물론 timetracking 플러그인 등 몇가지를 설치하면 비슷하게 흉내낼수는 있지만 레드마인처럼 간트차트를 보여주는건 아니기 때문에 여러가지로 미약하고 보통 MS Project같은걸 병행해서 쓰면서 일정관리를 하게 된다.
하지만 구굴링 결과 Trac에서도 간트차트를 보여주는 플러그인이 있었다 -.-
일본친구들이 만든 플러그인인데 강순권님의 블로그에 가보면 자세한 설치방법을 볼 수 있고 한글화도 잘 되어 있다.

주의사항 : Python2.4 이상에서만 작동함

아래는 플러그인 스샷






최근에 나오는 OS들은 인터넷으로 연결된 표준시간서버에 접속해 정확한 시간을 가져와서 표시해 준다.
우분투 데스크탑 같은 경우 윈도우상에서 아주 쉽게 설정할수가 있는데 우분투 서버환경에서도 간단한 셸스크립트를 이용하면 동일한 효과를 가져올 수 있다. 먼저 다음과 같은 셸 스크립트를 작성한다.
#!/bin/bash
date
old_time=`date +%Y%m%d%H%M%S`
old_time_for_insert=`date '+%Y-%m-%d %H:%M:%S'`
ntpdate -b time.nuri.net
#time.bora.net
set_time_first=`date +%Y%m%d%H%M%S`
if [ $set_time_first -lt $old_time ]; then
ntpdate -b time.kriss.re.kr
#ntp2.epidc.co.kr time.bora.net #kriss.re.kr   
fi
set_time_second=`date +%Y%m%d%H%M%S`
if [ $set_time_first -lt $old_time ]; then
ntpdate -b "$old_time_for_insert" #       
fi
date
그다음 작성한 셸스크립트파일을 rtime 이라는 이름으로 저장한후 실행속성을 주고 /usr/local/bin으로 이동시킨다.
shell>chmod 755 rtime
shell>sudo mv rtime /usr/local/bin

그리고 이 스크립트 화일을 cron에 등록시켜 두면 매일아침마다 서버시간을 동기화 할 수 있을 거다.
shell>sudo crontab -l 
0 6 * * * sudo rtime


기본적으로 trac은 anonymous 유저에게 어느정도 열려있는 편이다. 즉 wiki, timeline, ticket등 대부분 기능들의 view권한이 주어진다는 얘기다. 하지만 프로젝트의 성격상 외부에 공개하기가 꺼려질때는 anonymous 유저들이 접속하는경우 로그인페이지를 보여주고 싶어질 때가 있다. 이때는 trac의 AccountManagerPlugin와 기타조합으로 비슷한 환경을 구축하면 된다.

1. AccountManagerPlugin 설치
  - install
easy_install http://trac-hacks.org/svn/permredirectplugin/0.11/

(easy_install이 제대로 안될 경우 여기서 직접 소스를 받아 압축 해제 후 python ./setup.py install 을 해준다.)

  - trac.ini 수정
[components]
acct_mgr.admin.accountmanageradminpage = enabled
acct_mgr.api.accountmanager = enabled
acct_mgr.db.sessionstore = enabled
acct_mgr.htfile.abstractpasswordfilestore = enabled
acct_mgr.htfile.htdigeststore = enabled
acct_mgr.htfile.htpasswdstore = enabled
acct_mgr.http.httpauthstore = enabled
acct_mgr.notification.accountchangelistener = enabled
acct_mgr.notification.accountchangenotificationadminpanel = enabled
acct_mgr.pwhash.htdigesthashmethod = enabled
acct_mgr.pwhash.htpasswdhashmethod = enabled
acct_mgr.svnserve.svnservepasswordstore = enabled
acct_mgr.web_ui.accountmodule = enabled
acct_mgr.web_ui.emailverificationmodule = disabled
acct_mgr.web_ui.loginmodule = enabled
acct_mgr.web_ui.registrationmodule = disabled
trac.web.auth.loginmodule = diabled

[account-manager]
password_file = /home/trac/.htpasswd    <------ 패스워드 파일의 저장위치
password_store = HtPasswdStore            <------ 기본 아파치 인증방식 사용

  - 아파치 웹서버상의 권한 설정 부분 삭제
<LocationMatch "/trac/[^/]">
     AuthType Basic
     AuthName "Type your ID, Password"
     AuthUserFile /home/trac/.htpasswd
     Require valid-user
</LocationMatch>

위의 부분을 삭제한다.

  - anonymous 권한 셋팅
  anonymous에 할당 된 권한을 체크 후 삭제한다.

브라우저로 접속하면 기본 로그인 페이지대신 에러페이지가 뜨는 것을 볼 수 있다.
이때는 PermRedirectPlugin을 사용하면 바로 로그인페이지로 이동시킬 수 있다.

2. PermRedirectPlugin 설치
  - install
여기서 소스를 다운후 python ./setup.py install로 설치한다.

  - trac.ini 수정
[components]
permredirect.* = enabled

  - 브라우져로 접속해 보면 로그인 폼이 뜨는 것을 확인할 수 있다

하지만 AccountManagerPlugin을 설치하면 XMLRpc 플러그인이 정상작동하지 않는다. 이럴땐 다음과 같이 HttpAuthPlugin을 설치하여 해결한다.

3. HttpAuthPlugin 설치
  - install
여기서 소스를 받은 다음 python ./setup.py install로 설치한다.

  - trac.ini 수정
[components]
httpauth.* = enabled

[httpauth]
paths = /xmlrpc, /login/xmlrpc



리눅스상에서도 대부분 rpm버전을 깔 수 있지만 특수한 경우 mysql을 컴파일해야만 할 때가 있다.
다음과 같은 절차로 컴파일하면 된다.

1. mysql홈페이지에서 mysql 소스 다운(tar.gz파일)

2. 압축을 해제하고 그 디렉토리에서 ./configure 실행
./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --sysconfdir=/etc --without-debug --with-charset=utf8 --with-extra-charsets=all --with-plugins=innobase
   --prefix : 설치될 경로
   --localstatedir : 디비파일이 설치될 경로
   --sysconfdir : 환경설정파일이 저장될 경로
   --without-debug : 디버그옵션 off 로 성능 향상
   --with-plugins=innobase : 트랜잭션사용을 위해 innobase 선택

3. make

4. make install

5. 기본 테이블을 만들어주는 스크립트 실행
/usr/local/mysql/bin/mysql_install_db
위의스크립트로 테이블생성이 안될 경우에는 useradd mysql 로 mysql계정을 생성시켜 준다.

6. 데몬 실행
/usr/local/mysql/bin/mysqld_safe &
 - 이때 다음과 같은 에러가 발생하고 데몬이 뜨지 않는 경우가 있다.

14:46:27 mysqld_safe Logging to '/usr/local/mysql/var/localhost.localdomain.err'.
090520 14:46:27 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
090520 14:46:27 mysqld_safe mysqld from pid file /usr/local/mysql/var/localhost.localdomain.pid ended

- 이럴 때는 다음과 같이 권한을 설정해 준다.
chown -R mysql.mysql /usr/local/mysql
cd /var/run
mkdir mysqld
chown mysql mysqld
chgrp mysql mysqld

7. innodb형식으로 테이블 생성
트랜잭션을 사용하기 위해 테이블생성시 다음과 같이 INNODB옵션을 준다.
CREATE TABLE Temp( col1 varchar(10) not null,
                                        col2 varchar(10)) TYPE=INNODB;

8. 디비인스턴스 및 유저생성
shell> mysql -uroot -p비밀번호 
 
mysql>CREATE DATABASE databasename_utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;  
mysql>GRANT ALL PRIVILEGES ON *.* TO 'userid'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; 
mysql>GRANT ALL PRIVILEGES ON *.* TO 'userid'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;



자바서비스넷에서 본 내용인데 당장 필요하지는 않지만 필요한 상황이 오면 많이 유용할 듯 하다.

타켓: 웹로직 8.1.6 -> 톰캣 5.5.27 
1. 중요 JAR위치 - ojdbc14.jar : 반드시 TOMCAT(c:\tomcat5\common\lib)에 위치 ( WEB-INF\lib 금지) - servlet-api.jar : 반드시 TOMCAT(c:\tomcat5\common\lib)에 위치 (WEB-INF\lib 금지)
2. CallableStatement 사용할때 Orable Array 사용시 - ConnectionPool.getConnection() 메소드
//웹로직 및 톰캣 겸용 if(datasource == null) { Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); DataSource ds = (DataSource)envContext.lookup(DBProperty.WMS_JNDI_NAME);
//톰캣전용: ARRAY 전달용도(Oracle전용) if(ds instanceof BasicDataSource) ((BasicDataSource)ds).setAccessToUnderlyingConnectionAllowed(true); datasource = ds; }
- 호출 메소드
//톰캣전용 처리 if(conn instanceof PoolableConnection) conn = ((DelegatingConnection)conn).getInnermostDelegate();
3. "유형길이 초과문제" - 조치: ojdbc14.jar를 교체 : 웹로직에 포함된 10g 드라이버 사용(1,505KB) : tomcat5\common\lib에 위치 - 원인: CURSOR 처리
-------------------------------------------------------------------
일반 환경설정
1. gc 로그남기는 방법 - 파일 : tomcat5\bin\Catalina.bat
set JAVA_OPTS=-verbose:gc -Xloggc:d:\gc.log %JAVA_OPTS% -Djava.util.logging.manager=org.apache.juli.ClassLoadrLogManager -Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
같이 앞에다가 -verbose:gc -Xloggc:d:\gc.log 를 붙여줌.
2. Random Connection Close Problem 처리하기 SqlJob에서 두번 close() 금지. (DB자원 사용후 null 처리)
3. auto commit 처리 - 톰캣의 Connection은 기본적으로 auto-commit 됨 : 웹로직은 auto-commit: false - conn.setAutoCommit(false)을 추가해야 함 : 위치: ConnectionPool.getConnection() , getHelpDeskConnection()
원본보기



지난번 포스트와 같이 TOW를 사용하면 단 몇분만에 trac을 설치할 수 있다. 하지만 설치되는 subversion과 trac의 버전이 조금 낮은 관계로 다음과 같이 visualsvn과 mysql을 이용해 최신버전의 trac을 설치할수 있다

1. Mysql 5.1 버전 설치
  여기 에서 다운로드 후 설치

2. trac용 디비 인스턴스 생성
  mysql>CREATE DATABASE trac_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

3. VisualSVN설치
   3.1 설치
  http://www.visualsvn.com/server/download/ 에서 다운로드 후 설치
  설치 시 secure connection 해제, 경로는 default, 포트는 80으로 설정


   3.2. 설치 후 실행화면


   3.3. 레파지토리 및 유저 생성




   3.4. VisualSVN설치종료 및 브라우져 접속 화면


4. Trac 설치
   4.1 http://www.visualsvn.com/server/trac/ 에서 VisualSVN용 trac을 다운로드

   4.2 C:\Program Files\VisualSVN Server\ 밑에 압축 해제

5. Python mysql 설정
   5.1 여기에서 ez_setup.py 다운로드


   5.2 c:\Program Files\VisualSVN Server\trac\python 디렉토리에 ez_setup.py를 복사 후 python\python ez_setup.py 로 설치


   5.3 MySQL_python-1.2.2-py2.5-win32.egg 파일을 여기서 다운로드 후 G:\Program Files\VisualSVN Server\trac\python\Lib\site-packages 에 복사


   5.4 c:\Program Files\VisualSVN Server\trac\python\Scripts\ 에서 easy_install mysql_python실행


6. Trac 레파지토리 생성
   6.1 C:\VisualSVN Server\trac에서 trac-admin 을 이용해 프로젝트를 생성.
  예)trac-admin C:\Trac\SpringStudy initenv


   6.2 프로젝트 명 입력


  6.3 데이터베이스에 mysql url 입력
  예)mysql://root:password@127.0.0.1/trac_db

  6.4 Repository Type는 기본인 svn을 선택하고 Path to repository에는 c:\Repositories\SpringStudy 입력



   6.5  트랙 레파지토리 설치완료


7. 아파치에 trac관련 정보 설정
   7.1 c:\Program Files\VisualSVN Server 에 있는 httpd-wrapper.bat파일에 다음 내용 추가

set PYTHONHOME=%~dp0\Trac\python

   7.2 c:\Program Files\VisualSVN Server\conf\httpd.conf 에 다음 내용 추가
LoadModule python_module trac/python/mod_python_so.pyd
LoadModule authz_user_module bin/mod_authz_user.so
<Location /trac>
    SetHandler mod_python
    PythonInterpreter main_interpreter
    PythonHandler trac.web.modpython_frontend
    PythonOption TracEnvParentDir C:\Trac
    PythonOption TracUriRoot /trac
    AuthName "Trac"
    AuthType Basic
    AuthBasicProvider file
    AuthUserFile "C:/Repositories/htpasswd"
    Require valid-user
</Location>
  
8. admin 계정에 관리자 권한을 부여
   trac-admin (c:\Trac\프로젝트설치폴더) permission add (SVN에등록된사용자) TRAC_ADMIN
  

9. Mylyn 연동을 위한 xmlrpcplugin 설치
   9.1   http://trac-hacks.org/wiki/XmlRpcPlugin에서 플러그인 다운로드
 
  9.2 c:\Program Files\VisualSVN Server\trac\python 디렉토리에 압축된 파일안에 있는trank 압축해제


   9.3 C:\Program Files\VisualSVN Server\trac\python>python setup.py bdist_egg 실행

   9.4 /dist 에 있는 egg 파일을 c드라이브의 c:\Trac\SpringStudy\plugins 에 복사
 

   9.5 c:\Trac\SpringStudy\conf\trac.ini 파일에 다음 내용 추가
        [components]
        tracrpc.* = enabled

10  trac로고 변경
   10.1 trac.ini에 다음 내용 수정
[header_logo]
alt =
height = -1
link = http://192.168.10.100/trac/SpringStudy
src = common/trac_banner.png
width = -1
11. visual svn 재시작 및 trac 접속 화면




지난번에 우분투에서 trac을 설치하는 방법에 이어 이번엔 윈도우에서 trac을 설치하는 방법이다.
원래 윈도우에서 trac을 설치하는게 만만치 않은데 tow(trac on windows)라는 걸 이용하면 5분이면 충분하다.
(tow만드신분이 한국분이신데 다시한번 노고에 감사드린다.)

1. TOW다운 받기
- 여기서 바이너리를 다운한다. (0.3 alpha 버전도 있지만 일단 0.2.2a버전을 까는것으로 한다.)
- 0.2.2a 버전에도 base 버전이 있고 standard버전이 있는데 차이점은 다음과 같다.

Base 패키지 구성
- python 2.4.4
- trac 0.10.4
- clearsilver 0.9.14
- apache 2.2.6
- mod_python 3.3.1
- subversion 1.4.5
- svn-python 1.4.5
- sqlite 3.5.2
- pysqlite 2.3.5
- easy_install

Standard 패키지 구성
- Base 패키지 포함
- Added Web Admin plugin
- Added Account Manager plugin
- Added XML-RPC plugin
- Added Eclipse Trac Integration plugin
- Added TracNav plugin
- Added WYSIWYG Editor plugin
- Added trac.ini Admin plugin
- Added TOC macro


- mylyn연동 까지 해야되기 때문에 standard버전을 깔도록 하자

2. 압축해제
- 디폴트인 c:\tow 로 풀리도록 하자. 굳이 경로를 바꾸려면 여기를 참조하면 된다.

3. start-tow.bat 파일 실행하면 끝이다. 정말 간단하지 않은가?  다시한번 제작자에게 감사의 말씀을 전하고 싶다.

4. start-tow.bat 를 실행한 후 브라우저로 접속했을 때 internal server에러가 났을 경우엔 trac.ini 파일내용 중 logging부분을 다음과 같이 변경해 주면 된다.

[logging]
log_level = WARNING
log_type = file

5. start-tow.bat파일을실행했을 때 다음과 같은 에러메세지가 표시되면서 서버가 뜨지 않으면 http://www.dll-files.com/dllindex/dll-files.shtml?msvcr71 에서 msvcr72.dll 을 다운로드 후 windows\system32 밑에 복사해 준다.

httpd: Syntax error on line 493 of C:/TOW/Apache/conf/httpd.conf: Cannot load C:
/TOW/Apache/modules/mod_python.so into server: \xc1\xf6\xc1\xa4\xb5\xc8 \xb8\xf0
\xb5\xe2\xc0\xbb \xc3\xa3\xc0\xbb \xbc\xf6 \xbe\xf8\xbd\xc0\xb4\xcf\xb4\xd9.

6. 서비스로 등록하기
매번 배치화일을 실행해야 한다면 번거로울 수 있다. 다음과 같이 하면 윈도우의 서비스에 등록시켜 자동으로 시작되도록 할 수 있다.

환경변수 등록
 - 원래 배치화일에 있던 환경변수 값들을 윈도우 시스템 환경변수에 등록해 준다.
   (PATH항목은 기존에 있는 PATH 항목의 뒤에 붙여준다.)
TOW_HOME=C:\TOW
TOW_TRAC_PRJ=C:\TOW\TracRepo\Projects
TOW_TRAC_REPO=C:\TOW\TracRepo
TOW_SVN_PRJ=C:\TOW\Projects
TOW_SVN_REPO=C:\TOW\SvnRepo
APACHE_HOME=C:\TOW\Apache
PYTHON_HOME=C:\TOW\Python
PYTHONPATH=C:\TOW\Python;C:\TOW\Python\DLLs;C:\TOW\Python\Scripts;C:\TOW\Python\lib;
SQLITE_HOME=C:\TOW\SQLite
SVN_HOME=C:\TOW\Subversion
PATH=C:\TOW\Subversion\bin;C:\TOW\Python;C:\TOW\Python\DLLs;C:\TOW\Python\Scripts;C:\TOW\Python\Lib;C:\TOW\Apache\bin;C:\TOW\Apache\modules;C:\TOW\SQLite;

- xp일 경우 환경변수를 등록 한 다음 서비스에서 traconwindows를 스타트 했을 때 정상적으로 동작하지 않으면 재부팅 후 다시 스타트하면 제데로 될 것이다.

 - 아파치 httpd.exe 를 이용 윈도우 서비스에 등록을 해준다.

cd c:\TOW\Apache\bin
c:\TOW\Apache\bin\httpd.exe -k install -n "TraconWindows"
  서비스를 삭제할 때는 httpd.exe -k uninstall -n "TraconWindows" 와 같이 해주면 된다.
(만약 위와 같이 등록했을 때 액세스가 거부되었습니다 라는 메세지가 나오면 administrator 계정으로 다시 로그인 한 후 재시도해 본다)

7. 신규 정보 생성

1) 사용자 등록
C:\TOW>add-user.bat <UserName> <Password>

2) 프로젝트 등록 하는 방법
C:\TOW>create-svn-repo.bat <ProjectName>
C:\TOW>create-trac-repo.bat <ProjectName>
해준 후 http://localhost:8080/projects/<ProjectName>으로 접속.




처음 우분투를 설치하면 ssh와 ftp 서버가 설치되지 않기 때문에 다음과 같이 설치할 수 있다.

1.SSH
  • 설치
    $sudo apt-get install ssh
  • 포트 변경
    $sudo vi /etc/ssh/sshd_config
        # port 22 에서 '#' 를 제거하고 원하는 포트로 변경
  • ssh 재시작
    $sudo /etc/init.d/ssh restart

2.FTP
  • vsftp 설치
    $sudo apt-get install vsftpd
  • 환경설정 파일 수정
    $sudo vi /etc/vsftpd.conf
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
  • 데몬 재시작
    $sudo /etc/init.d/vsftpd restart
  • 로그파일 위치
    default 위치 ; /var/log/vsftpd.log




티스토리 툴바