2014년 3월 30일 일요일

[jenkins] poll SCM


0. 환경

macbook-pro 13” 2012 mid / 10GB
parallels9 ubuntu 12.04 LTS
apache2 / tomcat7.0.52(수동설치) / java7


1. Build Periodically와 차이점

Build Periodically

  • 특별한 규칙이 필요없고 무조건 주기적으로 빌드를 실행한다. (매 10분 이라고 함)

Poll SCM

  • Cron Expression을 이용하여 주기를 지정함
  • 지정된 주기에 형상관리 툴(git)의 버전을 확인하여 변동이 있을 경우만 실행됨

참고자료


2. Cron Expression

작성중


* 참고자료


Written with Dec7.

2014년 3월 29일 토요일

[ubuntu] 명령어


시스템

종료, 재시작

# 종료
sudo shutdown -h 0

# 재시작
sudo reboot

관리

host 등록

sudo vi /etc/hosts

권한

# sudo 권한을 부여받기 위해 아래 sudoers 파일에 등록되어야 함
sudo vi /etc/sudoers
# sudoer파일 내 User privilege specification 아래입력
[userid] ALL=(ALL:ALL)ALL

참고: sudo권한

사용자

# 비밀번호 변경
sudo passwd [user_name]

소유권

# 파일의 소유권 변경, 오직 슈퍼사용자만 사용 가능
# chown (change the owner of a file)
chown [-R] [user][:group] target1 [target2 ..]

그룹

# 생성
addgroup 그룹명

# 삭제
delgroup 그룹
# 옵션-  -a [사용자명] 추가 / -d 삭제, / -r 그룹 패스워드 삭제 / 

참고: 그룹관리


유틸리티

tar

tar는 파일을 묶는 용도이므로 압축하는 과정이 아님

# 풀기
tar -xvf [file_name]
# 묶기
tar -cvf [file_name] file1 file2 file3 ...

# option
-x : tar 묶음 풀기
-c : tar 묶기 
-v : 풀리는 과정 보기
-f : file_name 지정
-z : gzip 압축 풀기

gzip

gzip이 파일을 압축함

#압축하기
gzip [file_name.tar]

#압축풀기
gunzip [file_name.tar.gz]

package

# 삭제
sudo apt-get autoremove [packagename]

# repository 추가
sudo add-apt-repository [repository 위치]]
sudo apt-get update

찾기

whereis

-명령어의 실행파일 위치, 소스파일위치, man파일 위치를 찾아주는 명령어
-명령어의 위치만 찾아주는 which에 비해 포괄적인 탐색 명령어

whereis [명령어|파일이름]
# option
    -b [find] : find 명령어의 실행파일 경로만 찾음
    -m [find] : find 명령어의 man 파일의 위치만 확인
    -s [find] : find 명령어의 소스파일만 확인
    -대문자 (-S, -B, -M)의 경우 찾을 경로를 추가하여 탐색

Written with Dec7.

[tomcat] ajp connection


0. 환경

macbook-pro 13” 2012 mid / 10GB
parallels9 ubuntu 12.04 LTS
apache2 / tomcat7.0.52(수동설치) / java7


1. 필요성

AJP는?

  • Tomcat 설치시 AJP (Apache Jserv Protocol)를 이용하여 HTTP를 요청을 수신하는 Connector가 포함됨
  • Tomcat은 직접 HTTP 요청을 수신받아 처리할 수도 있지만 AJP를 이용하면 조금 더 낮은 단계에 있는 시스템(ajp를 지원하는 load balancing system, proxy server, apache httpd)에게 일부를 위임받아 처리하므로 성능상 유리함

참고자료


2. 진행흐름

libapache2_mod_jk 설치

  • mod_jk는 mod_jserv가 발전된 형태로 단순
  • Tomcat Web Container와 다양한 Web Server (Apache, iPlanet, Sun One 과 같은)를 연결하기 위해 사용됨
  • mod_jserv는 http와 https를 구분하지 못하지만 mod_jk는 ajp13_protocal를 사용하여 따로 처리

Apache Httpd에게 mod_jk의 존재를 알림

package로 설치했기 때문에 대부분의 설정이 완료된 상태지만 약간의 추가 설정이 필요하다.

필요없는 Tomcat Http Port 제거

tomcat은 기본적으로 4개 포트를 가진다. web service를 Tomcat으로만 구성할 경우 client의 요청을 http, https를 통해서만 받는다. 하지만 Apache Httpd와 연동할 경우 직접 요청을 받지 않으므로 http port를 제거할 수 있다.

시스템 내부적으로 사용할 Tomcat Redirect Port 변경 (8443 -> 443)

여기서 중요한 점은 redirect port (https)는 남겨둬야 한다. Apache Httpd에서 https로 요청받은 경우 Tomcat에게도 그래로 전달해야하기 때문이다. Apache Httpd의 https port는 기본적으로 443 port 이다.
(이 부분은 믿지마세요. 아직 ssl 설정을 잘 모름요 ㅠ)
(1~1024port는 system이 관리 참고)

Port Name 특징
server port server의 shutdown을 받는 port
http port http 서비스를 위한 port
redirect port https로 요청이 들어온 경우 설정된 port로 redirect
AJP port (Apache Jserv Protocol) web server의 요청을 처리하는 port

mod_jk의 worker 설정변경

Apache Httpd에서 Tomcat으로 정보를 전달할 Port를 설정한다.
당연히 Tomcat의 AJP Port를 입력한다.

참고


3. 설치방법

mod_jk package 다운

sudo apt-get install libapache2-mod-jk

Apache에 mod_jk 설정

# sudo권한으로 default를 연다.
sudo vi /etc/apache2/sites-available/default

# ssl관련 설정은 동일 directory내 default-ssl
# 파일명이 다를 수 있다고 함
<!--
    default 파일의 마지막 부분
    ssl은 비슷하다고 하나 되는지 아직 https로 test하지 못함 ㅠㅠ
    https 인증서는 돈을 내야 한다나 뭐라나...
-->

    <!-- 윗 부분 생략 -->
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

    <!--
    mount jk module
    자신의 웹서버 환경에 맞게 변경
    jKMount /*.do myworker, JkMount /*.jsp myworker
    -->
    JkMount /* ajp13_worker
</VirtualHost>

tomcat7의 port 재설정

<!--
 - $CATALINA_HOME="tomcat7의 directory 위치"
 - $CATALINA_HOME/conf/server.xml 을 열어서 아래 코드 중 일부 수정
 - 아래 코드는 주석이 제거됨
-->

<?xml version='1.0' encoding='utf-8'?>

<!-- server에 shutdown 신호를 전달하는 port -->
<Server port="8005" shutdown="SHUTDOWN">

    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
    <Listener className="org.apache.catalina.core.JasperListener" />
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

    <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
        type="org.apache.catalina.UserDatabase"
        description="User database that can be updated and saved"
        factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
        pathname="conf/tomcat-users.xml" />
    </GlobalNamingResources>

    <Service name="Catalina">
        <!--
        모든 요청이 Apache httpd를 통해 받으므로
        Http Port 제거(주석처리) -->
        <!-- <Connector port="8080" protocol="HTTP/1.1"
            connectionTimeout="20000"
            redirectPort="8443" /> -->

        <!--
        ajp port 번호기억 후 mod_jk에 설정저장
        redirect port는 8443 -> 443으로 변경 -->
        <Connector port="8009" protocol="AJP/1.3" redirectPort="443" />

        <!-- 이하 생략 -->
        <Engine name="Catalina" defaultHost="localhost">
            <!-- ... -->
        </Engine>
    </Service>
</Server>

mod_jk의 worker 설정변경

# sudo권한으로 workers.properties에 들어감
sudo vi /etc/libapache2-mod-jk/workers.properties
# 주석 제거됨
# tomcat의 directory 위치를 적는다
workers.tomcat_home=$CATALINA_HOME

# JDK의 directory 위치를 적는다
workers.java_home=$JAVA_HOME

ps=/
worker.list=ajp13_worker

# Tomcat의 server.xml에서 설정했던 AJP Port번호를 입력
worker.ajp13_worker.port=8009

worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13

worker.ajp13_worker.lbfactor=1

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp13_worker

4. 확인

서버 재시작

# 시스템 상황에 따라 실행방법이 다를 수 있음
sudo service tomcat7 restart
sudo service apache2 restart

# 실행이 안된다면 다른 인터넷 참고하시고 아무튼 재실행하시면 됨

정상시

  • localhost:80 접속시 tomcat의 webapps에 배포된 자료가 보여짐
  • 아래 command 입력시 다음과 같은 log가 보여짐
# command
tail /var/log/apache2/error.log

# log
[Sun Mar 30 11:30:06 2014] [notice] Apache/2.2.22 (Ubuntu) mod_jk/1.2.32 PHP/5.3.10-1ubuntu3.10 with Suhosin-Patch configured -- resuming normal operations

비정상시

apache2에 mod_jk의 설정이 안 되있는 경우

# apache2가 설치된 directory로 이동
cd /etc/apache2/

하위 폴더에 mods-enable과 mods-available이 존재한다.
보통 mods-available에 jk.conf라는 설정파일과, jk.load라는 실행파일이 있다. (이름은 다를 수 있다. ) 앞의 두 파일이 mods-enable에 symbolic link로 연결되어야 mod_jk가 실행될 수 있다.


* 참고자료


Written with Dec7.

[tomcat] multiple instance 설치


0. 환경

macbook-pro 13” 2012 mid / 10GB
parallels9 ubuntu 12.04 LTS


1. 필요성

배포 환경에 따라 서버환경도 달라짐

  • 실무 프로젝트의 배포 환경은 개발, 스테이징, 상용으로 구분
  • 개발단계
    - One Server, One Instance, Multiple Context의 환경을 주로 사용
  • 스테이징 단계
    - 기능 및 성능 테스트를 위한 환경, 상용단계와 거의 동일 환경
  • 상용 단계
    - 실제 서비스하여 고객이 접속하는 환경

스테이징 단계 이상부터 수용해야하는 상황

  • 한 서버에 2개 이상 WAS버전 구동 가능
  • 상위 버전 업그레이드 용이
  • 기존 서비스 변경 최소화
  • 서비스별 튜닝 설정 (WAS, JNDI, Http Connection)이 별도 구성
  • 하나의 Instance를 Shutdown해도 다른 서비스에 영향을 주지 않음
  • 운영 및 장애에 신속 대응

2. Tomcat의 구조

Directory 구조

directory 설명
lib Tomcat Engine이 사용하는 외부 라이브러리리(.jar) 공간
bin Tomcat이 실행하는 명령 스크립트 공간
conf Tomcat의 Web 서비스를 위한 설정 파일 공간
logs Log 파일 공간
temp Tomcat Engine에서 사용하는 임시 파일 공간
webapps Web application 배포 공간
work JSP 파일이 Servlet으로 Compile(.class)된 공간

구성방법

구분 특징
Tomcat Engine /lib, /bin directory만 사용
Tomcat Instacne /conf, /logs, /temp, /webapps, /work 사용
  • 하나의 Instacne는 하나의 JVM
  • directory를 물리적으로 구분함으로써 Multi Instance 환경 구성

4. 실행흐름

설정된 환경변수

CATALINA_HOME="Tomcat Engine 디렉토리"
CATALINA_BASE="Tomcat Instance 홈 디렉토리"
CATALINA_TMPDIR="Tomcat Instance가 사용하는 임시 디렉토리"
JAVA_HOME="Java 홈 디렉토리"
CLASSPATH="클래스 패스 설정 정보"

$CATALINA_HOME/bin/startup.sh 실행

실제로 catalina.sh를 실행

catalina.sh는 Tomcat 기동 준비

  1. CATALINA_HOME 환경변수를 통해 Tomcat Engine Directory 찾음
  2. CATALINA_BASE 환경변수에 있는 Directory를 찾아 Instance 기동

5. 설치방법

환경변수 설정

# OS 홈 디렉토리에 있는 .bash_profile
# vi ~/.bash_profile

JAVA_HOME="설치된 JDK directory 위치"
CATALINA_HOME="설치된 Tomcat Engine directory 위치"

각 Instance별 Directory 생성

mkdir [경로/instance_name1]
mkdir [경로/instance_name2]

필수 directory 복사

# Tomcat Engine directory로 이동
cd $CATALINA_HOME

# 각 필수 directory 복사
# cp의 -r 옵션은 그 하위폴더까지 복사한다는 의미를 가짐
cp -r * [경로/instance_name1]
cp -r * [경로/instance_name2]

필요없는 file/directory 제거

#instance_name1로 이동
cd [경로/instance_name1]

# 필요없는 file/directory 제거
rm -rf LICENSE NOTICE RELEASE-NOTES RUNNING.txt
rm -rf ./bin ./lib

# instance_name2도 동일하게 진행

[경로/instance_name]/conf/server.xml 수정

  • 하나의 머신을 Multi Instance로 가동하므로 Port관리가 중요
  • 실무에서는 각 Port번호를 정책적 관리가 필요
  • server port, http port, redirect port, ajp port를 다르게 설정

Port별 특징

Port Name 특징
server port server의 shutdown을 받는 port
http port http 서비스를 위한 port
redirect port https로 요청이 들어온 경우 설정된 port로 redirect
AJP port (Apache Jserv Protocol) web server의 요청을 처리하는 port

참고: websphere


6. 실행방법

각 instance의 경로를 재지정 (instance_name1 기준)

export CATALINA_BASE="[instance_name1의 경로]"

JAVA_OPTS, CATALINA_OPTS 환경변수를 상황에 맞게 설정

export JAVA_OPTS="-Djava.awt.headless=true -server -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"

export CATALINA_OPTS="-Denv=product -Denv.servername=[instance_name1]"

Tomcat Engine에서 시작 및 종료 스크립트를 실행

# 시작
$CATALINA_HOME/bin/startup.sh

# 종료
$CATALINA_HOME/bin/shutdown.sh

7. 기타 Tips

실행 Script 작성방법 [작성중]


8. 참고자료


Written with Dec7.

[tomcat] 수동설치


0. 환경

macbook-pro 13” 2012 mid / 10GB
parallels9 ubuntu 12.04 LTS

아파치 톰켓 다운


1. 설치

압축해제

tar -xzvf filename.tar.gz

tomcat7 이동

# 압축 푼 파일을 /usr/share/tomcat7으로 이동 (반드시 /usr/share일 필요는 없음)
sudo mv [directory_name] /usr/share/tomcat7

Java의 환경변수를 등록

# vi ~/.bash_profile

# JAVA_HOME: JDK의 설치 경로
# JRE_HOME: JRE의 설치 경로
JAVA_HOME="/usr/lib/jvm/java-7-oracle"
JRE_HOME="$JAVA_HOME/jre"
PATH="...(other path):$JAVA_HOME:$JRE_HOME"

2. Tomcat user 설정

tomcat은 기본적으로 Admin, Manager와 같은 관리 도구를 제공한다. tomcat을 관리하기 위한 도구이므로 아래의 로그인 정보 코드를 tomcat7/conf/tomcat-user.xml에 기록하여 사용한다.
tomcat이 제공하는 Applications를 사용하지 않는다면 설정이 필요 없다.

# tomcat7/conf directory 안에 있는 tomcat-user.xml 파일

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <role rolename="manager"/>
    <role rolename="admin-gui"/>
    <role rolename="admin-script"/>
    <role rolename="admin"/>

    <user username="user_id" password="user_pw" roles="manager-gui,admin-gui,manager,admin,manager-script,admin-script"/>
</tomcat-users> 

참고자료


3. 사용방법

서버 실행

sudo /usr/share/tomcat7/bin/startup.sh

서버 종료

sudo /usr/share/tomcat7/bin/shutdown.sh

기본 배포자료

# tomcat7/webapps 안에 directory 형태로 존재

http://127.0.0.1:8080/
http://127.0.0.1:8080/manager/html
http://127.0.0.1:8080/examples

4. 자동실행

script

# /etc/init.d/tomcat7에 추가
# terminal에서 아래와 같은 command로 간편하게 조작 가능
# service tomcat7 [start|stop|restart]
# ------------------------------------

# Tomcat auto-start
# description: Auto-starts tomcat
# processname: tomcat

case $1 in
    start)
        sh /usr/share/tomcat7/bin/startup.sh
        ;;
    stop) 
        sh /usr/share/tomcat7/bin/shutdown.sh
        ;;
    restart)
        sh /usr/share/tomcat7/bin/shutdown.sh
        sh /usr/share/tomcat7/bin/startup.sh
        ;;
esac

exit 0

권한변경

# service tomcat7 [start|stop|restart]를 누구나 실행할 수 있도록

sudo chmod 755 /etc/init.d/tomcat7

symbolic link를 연결

# linux 부팅시 자동실행 가능하도록 link 연결

sudo ln -s /etc/init.d/tomcat7 /etc/rc1.d/K99tomcat
sudo ln -s /etc/init.d/tomcat7 /etc/rc2.d/S99tomcat

참고자료

beginlinux.com
Deigo Benna’s Blog - install tomcat7 on ubuntu 12.10


Written with Dec7.

2014년 3월 27일 목요일

[tomcat] 용어


1. 용어

Tomcat

  • Tomcat은 대표적인 무료 WAS의 일종이지만 J2EE의 일부분(Servlet/JSP)만 구현했으므로 WAS가 아닌 Web Container

WAS (Web Application Server)

  • Web Server와 DB Server 중간다리 역할을 하는 미들웨어
  • 그 중간에 Web Application을 탑재하여 DB Server의 데이타를 사용목적에 맞게 가공하여 Web Server에 보내주는 역할
    JEE를 준수하여 구현했을 때 / 뒷단에서 비즈니스 로직 등을 처리
  • 분산환경을 만들어 가장 큰 이슈인 트렌잭션 처리를 적은 비용으로 효과적으로 처리하는 것이 목적

일반 Web Server

  • 사용자와 직접적으로 통신하는 front-end의 성격이 강함

* 참고자료

O’Reilly


Written with Dec7.

[tomcat] 자동설치


0. 환경

macbook-pro 13” 2012 mid / 10GB
parallels9 ubuntu 12.04 LTS


1. package 설치

sudo apt-get install tomcat7

2. 환경변수 추가(~/.bash_profile)

#환경변수를 추가할 file로 이동

#각 user의 home directory로 이동
cd ~
# 환경변수를 담아두는 .bash_profile을 vi 편집기로 실행
vi .bash_profile
# .bash_profile에 작성

#JAVA_HOME="JDK의 directory 주소"
JAVA_HOME="/usr/lib/jvm/java-7-oracle"

#JRE_HOME="JRE의 directory 주소(일반적으로 JDK의 하위 dir에 위치)"
JRE_HOME="$JAVA_HOME/jre"

#PATH 설정
PATH="$PATH:$JAVA_HOME:$JRE_HOME"

Written with Dec7.

[Java] term


1. JSE, JEE, J2EE 관계

일종의 규약 같은 것

JSE (Java Standard Edition)

JRE + JDK

JEE (Java Enterprise Edition)

Servlet/JSP, Mail, MQ, Corba, EJB, WS

J2EE

JEE의 윗 버전, Java 2 Enterprise Edition


2. JVM, JRE, JDK 관계

JVM (Java Vritual Machine)

  • 자바 소스코드(.java)로 만들어지는 자바 바이너리파일(.class)을 실행
  • 플랫폼에 의존적 (컴파일된 바이너리 코드는 어떤 JVM에서도 동작 가능하나, OS별 JVM은 다름)
  • 역할
    • 바이너리 코드를 읽고, 검증하고, 실행
    • 실행환경 (Runtime Environment) 규격 제공 / 필요한 라이브러리 및 기타 파일

JRE (Java Runtime Environment)

  • JVM이 자바 프로그램을 동작시킬 때 필요한 라이브러리 및 기타 파일을 가짐
  • JRE는 JVM의 실행환경을 구현했다고 볼 수 있음

JDK (Java Development Kit)

  • Java를 사용해서 응용 프로그램을 개발할 수 있게 해주는 도구
  • JDK는 JRE + 개발을 위해 필요한 도구 (javac, java 등)을 포함
    출처

* 참고자료

O’Reilly


Written with Dec7.