....

개발용 서버 설치 본문

Linux

개발용 서버 설치

idkook 2013. 8. 11. 06:21

== 설치프로그램 목록 ==

* CentOS 6.4

   * 최소설치

* Apache2

   * 모든 웹요청에 대한 Frontend 처리를 담당.

* JDK7

* Tomcat7

  * 개발된 어플리케이션을 배포하고 테스트할 WAS

* Resin 4

  * Java기반의 인프라 어플리케이션을 실행할 WAS

* Subversion

  * 어플리케이션 리소스 형상관리

* Trac

  * 이슈관리, 위키를 이용한 공용 문서 관리



== CentOS 6.4 ==

* 기본적인 디렉토리 및 파티션 설정등은 생략

* Base Server 패키지로 X를 제외하고 최소설치

* 설치 완료 후 다음 명령으로 OS 업데이트

  * yum update


* 방화벽에 포트를 오픈

 > HTTP(80), HTTPS(443), HTTP8080(8080)

 > vi /etc/sysconfig/iptables

  >> -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT  ## Apache

       -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT  ## Apache

       -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT  ## WAS Tomcat

       -A INPUT -m state --state NEW -m tcp -p tcp --dport 9080 -j ACCEPT  ## WAS Resin


* 방화벽 재시작

 > service iptables restart


* SELinux 비활성화 (해당 단계를 건너뛸 경우 OTL을 맛보게 되는 수 있음.)

 > vi /etc/sysconfig/selinux

 >> 다음 내용으로 수정한다.

 >> SELINUX=disabled

 > reboot


* 어플리케이션을 실행할 일반 유저 권한 생성

 > useradd app

 > passwd app

 >> [사용할 암호를 지정]


* app 계정에서 sudo 명령을 사용할 수 있도록 한다.

  > ## 암호도 입력할 필요가 없도록 할 경우

  > echo 'app ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/app

  > ## 암호를 입력하도록 할 경우

  > echo 'app ALL=(ALL) ALL' >> /etc/sudoers.d/app


* 환경설정 프로파일을 생성하고 작성한다.

* 안의 내용은 필요시 계속 추가한다.

  > vi /etc/profile.d/내맘대로.sh

  > #!/bin/sh

  > CATALINA_HOME=/app/tomcat

  > ......


== 필요한 프로그램 설치 ==

 * 컴파일 지원을 위해 gcc를 설치한다.

 > yum install gcc

 * 콘솔상에서 편안한 파일전송을 위해 lrzsz를 설치

 > yum install lrzsz


== Java Developement 설치 ==

* CentOS에서 제공하는 Open JDK를 설치

> yum install java-1.7.0-openjdk-devel


[root@dev ~]# java -version

java version "1.7.0_25"

OpenJDK Runtime Environment (rhel-2.3.10.4.el6_4-x86_64)

OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)


== Apache2 설치 ==

* yum으로 httpd-devel을 설치 

  * 동적 모듈 컴파일을 대비해 httpd-devel을 설치한다.

  * yum install httpd-devel


* mod_python 설치

  * Trac 연동을 위해 설치. CentOS Repository에서 없어졌다...

> cd /usr/local/src
> http://archive.apache.org/dist/httpd/modpython/mod_python-3.3.1.tgz
tar xvzpf mod_python-3.3.1.tgz
cd mod_python-3.3.1
./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/bin/python -prefix=/etc/httpd/modules
make && make install


* 기타 yum으로 설치할 수 있는 module 설치

 > yum install mod_ssl mod_dav_svn


* 다음 내용을 /etc/httpd/conf/httpd 에서 수정

 > # 서버의 이름을 지정한다. (안할 경우 시작할때마다 경고가 출력된다)

 > ServerName dev.domainname.co.kr

 > # 아파치가 실행될 유저를 지정한다.

 > User app

 > Group app


* 직접 관리하는 아파치용 config 파일을 만들어둔다.

 > touch /etc/httpd/conf.d/service.conf


* 아파치에 대한 추가 기본설정 지정

vi /etc/httpd/conf.d/service.conf

> ## SSL로 강제로 redirect 시킬 어플리케이션 컨텍스트를 정규식으로 지정

> ## 이곳에 지정하는 컨텍스트는 http로 서비스를 수행하지 않는다.

> <LocationMatch "^/(manager|tomcat|svn|trac|hudson)/">

>         #   Force clients from the Internet to use HTTPS

>         RewriteEngine           on

>         RewriteCond             %{HTTPS} !=on

>         RewriteRule             (.*) https://%{HTTP_HOST}%{REQUEST_URI}

> </LocationMatch>

>

> ## 인증이 필요한 컨텍스트 정의(트랙과 SVN으로 사용할 컨텍스트를 동시에 처리)

> <LocationMatch "^/(svn|trac)/">

>         AuthType Basic

>         AuthName "Subversion Repository"

>         AuthUserFile /etc/httpd/conf/htpasswd

>         Require valid-user

> </LocationMatch>


* 인증에 사용할 htpasswd 파일을 생성한다.
> htpasswd -c /etc/httpd/conf/htpasswd <username>
> #암호 두번 입력해서 확인

* 서비스 자동 시작 처리

> chkconfig --level 345 httpd on

> chkconfig --list | grep httpd


== Subversion 설치 ==

* yum 으로 설치

 > yum install subversion


* 저장소 디렉토리 생성 및 sample 저장소 생성

 > mkdir /app/repos/svn

 > chown app.app /app/repos/svn -R

 > cd /app/repos/svn

 > svnadmin create sample


* 다음 내용을 /etc/rc.local에 추가하고 실행한다.

 > svnserve -d -r /app/repos/svn


* apache에 svn 컨텍스트 지정

> vi /etc/httpd/conf.d/service.conf

> ## Subversion module

> ## 인증, HTTPS제한은 apache공통에서 처리했으므로 생략

> <Location /svn>

>         DAV svn

>         SVNParentPath /app/repos/svn

> </Location>


* 아파치 재시작후 http://server/svn/sample 로 접속

  > Revision 0:/ 과 같은 내용이 보이면 성공.


== Trac 설치 ==

 * Trac설치에 필요한 프로그램 설치

 > yum install python-devel

 > yum install sqlite-devel


* Python easy_install을 이용해서 설치

 > easy_install SQLObject

 > easy_install Genshi

 > easy_install Babel

 > easy_install pysqlite

 > easy_install Trac


* Trac 테스트 프로젝트 생성 및 실행 테스트

 > mkdir /app/repo/trac

 > cd /app/repo/trac

 > trac-admin test initenv

 > chown app.app /app/repos/trac -R

 > tracd -p 80 /app/repo/trac/test --USER=app

 > 브라우져로 http://localhost/test 접속해서 화면이 표시되는지 확인.

 > ## 만약 tracd 실행시 권한 오류가 발생할 경우

    >> selinux가 활성화 되어 있는지 확인

    >> /app/repos/trac에 대한 app계정의 쓰기 권한이 있는지 확인


* 아파치에 Trac에 대한 설정을 지정

> vi /etc/httpd/conf.d/service.conf

> ## Trac module application

> ## 인증, HTTPS제한은 apache공통에서 처리했으므로 생략

<Location /trac>

        SetHandler mod_python

        PythonInterpreter main_interpreter

        PythonHandler trac.web.modpython_frontend

        PythonOption TracEnvParentDir "/app/repos/trac"

        PythonOption TracUriRoot "/trac"

        PythonOption PYTHON_EGG_CACHE /app/repos/trac-cache"

</Location>


* 서비스 시작 정지

> Apache 실행시 모듈로 로드되므로 Apache 서비스와 같이 관리된다.


== SSL 인증서 설치 ==

* yum으로 mod_ssl을 설치했다면 기본 인증서로 https를 바로 사용할 수 있지만 호스트명을 정식 URL로 하지 않은 경우 호스트명도 맞지 않고, 기간도 1년으로 좀 짧은 감이 있다.

* 정식 인증서를 사용하고자 한다면 아파치에 SSL인증서 설치하기를 검색하면 많이 나온다.

* 사설 CA인증서를 설치하려고 한다면 SSL CA 루트기관 구성하기.. 를 참조한다.


== Tomcat 7.0 설치 ==

* yum으로 설치하면 tomcat 6.0이 실행되므로 7.0을 다운로드 받아 설치한다.

 * 다운로드 : http://tomcat.apache.org/download-70.cgi 에서 tar.gz를 다운로드 받는다.

 > cd /usr/local/src/tomcat

 > wget http://mirror.apache-kr.org/tomcat/tomcat-7/v7.0.42/bin/apache-tomcat-7.0.42.tar.gz

 > tar xvzpf apache-tomcat-7.0.42.tar.gz

 > mv apache-tomcat-7.0.42 /app

 > ln -s /app/apache-tomcat-7.0.42 /app/tomcat


* 환경설정

 > vi /etc/profile.d/내맘대로.sh

 > ## Tomcat의 홈디렉토리를 지정하고, Tomcat서비스가 실행될 계정을 지정한다.

 > CATALINA_HOME=/app/tomcat

 > TOMCAT_USER=app

 > PATH=$PATH:$CATALINA_HOME/bin

 > export PATH CATALINA_HOME TOMCAT_USER


* 톰캣의 설정파일 수정은 생략한다. 

 > 일괄배포를 이용한 WAR deploy를 이용할 경우 그냥 이용해도 무리 없다.


* 아파치에 Tomcat으로 위임할 컨텍스트를 지정한다.

 > vi /etc/httpd/conf.d/service.conf

 > ## Tomcat 에서 제공하는 어플리케이션 매핑..

 > ProxyPass       /tomcat                 ajp://localhost:8009/tomcat

 > ProxyPass       /manager                ajp://localhost:8009/manager

 > ProxyPass       /probe                  ajp://localhost:8009/probe


== Resin 4 설치 ==

  * 재배포중 톰캣이 다운되더라도 인프라는 가동되어야 한다.

  * Nexus, Hudson등을 실행한다.

  * 수시로 재배포하는 Tomcat의 재시작 시간이 길어지는 문제도 해결할 수 있다.

  * Jetty 9은 Servlet3.1스팩을 지원하지만 도큐먼트에 아파치와 연동이 없어졌다. 

  * Jetty를 고려하였으나 hudson이 정상적으로 실행되지 못하는 문제를 해결할 수 없었다.

  * Resin Pro버젼은 유료이나 일반 버젼은 오픈소스이다.

  * Resin은 원격 배포 기능이 없고, Tomcat은 있다.

  * 위 사항을 고려하여 Resin을 인프라용 WAS로 사용한다.


  * 다운로드 사이트 : http://www.caucho.com/download/

  > mkdir /usr/local/src/resin

  > cd /usr/local/src/resin

  > wget http://www.caucho.com/download/resin-4.0.36.tar.gz

  > tar xvzpf resin-4.0.36.tar.gz

  > mv resin-4.0.36 /app

  > cd /app

  > ln -s resin-4.0.36 resin

  > chown app.app resin*


  * 환경설정

   > vi /etc/profile.d/내맘대로.sh

  >> RESIN_HOME=/app/resin

  >> PATH=$PATH:$CATALINA_HOME/bin:$RESIN_HOME/bin

  >> export PATH CATALINA_HOME RESIN_HOME


  * resin 환경설정

  > $RESIN_HOME/conf/resin.properties

  > ## 다음 줄들을 주석처리 (8080은 Tomcat에 양보하세요~)

  > app.http          : 9080

  > web.http         : 9080


  * 아파치 연동 (http://www.caucho.com/resin-4.0/admin/starting-resin-apache.xtp#CompilingApache)

  > ## 아파치연동용 모듈을 컴파일한다. (레진의 기본 실행 환경도 설정된다)

  > ## 64비트 환경일 경우 컴파일 옵션 추가 필요 (./configure --help)

  > cd $RESIN_HOME

  > ./configure --prefix=/app/resin --with-apxs=/usr/sbin/apxs --with-apache-libexec=/etc/httpd/modules --enable-64bit --with-setuid=app --with-setgid=app

  > make

  > make install


  * 아파치 설정

  > vi /etc/httpd/conf/httpd.conf

  > 파일 제일 하단에 Resin 컴파일시 임의로 추가된 설정이 있다.. 모두 삭제..


  > vi /etc/httpd/conf.d/service.conf

  > # mod_caucho Resin Configuration

  > LoadModule caucho_module modules/mod_caucho.so

  > 

  > <IfModule mod_caucho.c>

  >         ResinConfigServer localhost 6800

  >         CauchoConfigCacheDirectory /tmp

  >         CauchoStatus yes

  >         <Location /caucho-status>

  >                 SetHandler      caucho-status

  >         </Location>

  > 

  >         ## 연결할 어플리케이션 컨텍스트를 나열해서 caucho-request에 연결

  >         <LocationMatch "^/(resin-admin|resin-doc|nexus|hudson)+/">

  >                 SetHandler      caucho-request

  >         </LocationMatch>

  > </IfModule>


  * 아파치 재시작

  > service httpd restart
  > ## http://localhost/jetty 에 접속했을 때 Jetty관련 화면이 표시되면 성공이다.
  > 잘 표시되면 위에 테스트용 라인을 삭제한다.

  * 서비스 자동 로드
  > vi /etc/rc.local
  > su app -c "/app/resin/bin/resin.sh start"

== Nexus, Hudson 설치 ==
  * 궂이 쓰기도 민망할 정도....
  > mkdir /usr/local/src/webapps
  > cd /usr/local/src/webapps
  > wget http://ftp.daum.net/eclipse/hudson/war/hudson-3.0.1.war
  > wget http://download.sonatype.com/nexus/oss/nexus-2.6.0-05.war
  > cp hudson-3.0.1.war $RESIN_HOME/webapps/hudson.war
  > cp nexus-2.6.0-05.war $RESIN_HOME/webapps/nexus.war
  > $RESIN_HOME/bin/resin.sh restart
  

== 서비스 관리 ==

* Apache

  > # root 권한으로 실행되어야 한다.

  > sudo service httpd stop|start|status


* Tomcat

  > app 권한으로 실행되어야 한다.

  > $CATALINA_HOME/bin/catalina.sh {start|stop|...}


* Resin

  > app 권한으로 실행되어야 한다.

  > $RESIN_HOME/bin/resin.sh {start|stop|...}


* Subversion

  > root 권한으로 실행되어야 한다.

  > 시작

  >> svnserve -d -r /app/repos/svn

  > 정지

  >> pgrep svnserve | xargs kill -9

  > 상태

  > ps aux | grep svnserve



 









Comments