톰캣 설치 · 4 min read · Feb 14, 2026

렉스와 함께 톰캣 설치 및 웹 애플리케이션 배포

렉스와 함께 톰캣 설치 및 웹 애플리케이션 배포

이 튜토리얼에서는 톰캣 설치를 관리하고 렉스를 사용하여 웹앱을 반복 가능한 방식으로 배포하는 방법을 보여줍니다. 이 튜토리얼에서는 Debian Squeeze를 사용할 것이지만, 렉스는 다른 배포판에서도 사용할 수 있습니다.

렉스 소개

렉스는 Perl로 작성된 도구로, 여러 서버의 관리 및 배포를 쉽게 해줍니다.

웹사이트에서: Rex를 사용하면 중앙 지점에서 모든 박스를 관리하고 구성 관리 및 소프트웨어 배포의 전체 프로세스를 통해 관리할 수 있습니다.

렉스 프로젝트의 시작점은 Rexfile입니다. 렉스는 이 파일을 구문 분석하고 서버에서 정의된 작업을 실행합니다. 이를 Makefile처럼 생각하면 되지만 Perl로 작성되어 있습니다.

모든 Rexfile은 작업으로 나뉩니다. 서버를 설치하고 구성하기 위한 모든 논리적 단계에 대해 작업을 정의할 수 있습니다.

소프트웨어 받기

작업 공간에만 렉스가 필요합니다. 서버에는 추가 소프트웨어가 필요하지 않습니다. 서버에 대한 ssh root 액세스만 필요합니다.

rexify.org/get/에서 렉스를 다운로드할 수 있습니다. CentOS, Debian, Ubuntu, Fedora, Mageia 및 OpenSuSE용 패키지가 제공됩니다. 소스는 CPAN에서 사용할 수 있습니다.

Debian의 경우, Rex 저장소를 sources.list.d 디렉토리에 추가하기만 하면 됩니다.

echo 'deb http://rex.linux-files.org/debian/ squeeze rex' >> /etc/apt/sources.list

그 후, apt 키링에 GPG 키를 추가합니다.

wget -O - http://rex.linux-files.org/DPKG-GPG-KEY-REXIFY-REPO | apt-key add -

그리고 소프트웨어를 설치합니다. core 도구에 대해 rex를 설치하고 배포 모듈에 대해 rex-apache-deploy를 설치합니다.

apt-get update && apt-get install rex rex-apache-deploy

Rexfile 준비 및 첫 번째 작업 실행

먼저 tomcat이라는 디렉토리를 만들고 그 안으로 이동합니다.

mkdir tomcat; cd tomcat

그 후, github에서 Rex 예제 모듈을 lib 디렉토리로 체크아웃합니다. tomcat 및 apache 모듈이 있습니다.

git clone https://github.com/krimdomu/rex-example-modules.git lib

이제 Rexfile을 생성하고 좋아하는 편집기로 엽니다. vim을 사용하는 경우, 구문 강조를 활성화하기 위해 다음 줄을 사용할 수 있습니다.

:set ft=perl  
:syn on
# 파일: Rexfile
# 먼저 strict 및 warnings를 활성화합니다.
use strict;
use warnings;
# 필요한 모든 예제 모듈을 포함합니다.
use ALLMODS;    # 이 줄은 rex 예제 모듈의 포함 경로를 설정합니다.
use apache;     # apache 모듈 포함
use apache::module;
use tomcat;     # tomcat 모듈 포함
use tomcat::user;
use tomcat::role;
# 서버에 로그인할 사용자 및 비밀번호 설정
user "root";
password "test";
# 비밀번호 인증 활성화.
pass_auth;
# 키 인증을 사용하려면 다음을 사용하고 "pass_auth" 줄을 주석 처리합니다.
# public_key "/path/to/your/public.key";
# private_key "/path/to/your/private.key";
# "tomcat"이라는 서버 그룹 정의.
# 배포할 모든 서버를 이 그룹에 넣습니다.
group tomcats => "tc01", "tc02";
desc "Apache 및 Tomcat 설치 및 구성";
task "prepare", group => "tomcats", sub {
   apache::setup();
   apache::module::setup({name => "jk"});
   tomcat::setup();
   tomcat::role::add_manager();
   tomcat::user::add_manager({
      username => "manager",
      password => "passw0rd",
   });
   apache::restart();
   tomcat::restart();
   # 서비스가 시스템 부팅 시 시작되도록 합니다.
   service apache2 => "ensure", "started";
   service tomcat6 => "ensure", "started";
};

이제 파일을 저장하고 터미널을 열어 tomcat 디렉토리로 이동합니다.

서버에서 생성된 작업을 실행하려면 다음 줄과 같이 호출합니다.

rex prepare

정의된 작업을 보려면 -T 옵션을 사용하여 확인할 수 있습니다.

rex -T

Apache/modjk 구성

apache와 tomcat 설치 후, apache/modjk를 구성하여 요청을 tomcat으로 리디렉션해야 합니다.

이를 위해 files라는 디렉토리를 만들고 그곳에 구성 파일을 저장합니다.

mkdir files
## 파일: files/worker.properties
## 이 파일은 rex에 의해 관리됩니다.
##
worker.list=tc,jkstatus
worker.tomcat.port=8009
worker.tomcat.host=<%+ $::Network->{"networkconfiguration"}->{"eth0"}->{"ip"} %>
worker.tomcat.type=ajp13
worker.tomcat.lbfactor=1
worker.tomcat.reference=worker.template
worker.tc.type=lb
worker.tc.balance_workers=tomcat
worker.tc.sticky_session=false
worker.jkstatus.type=status
worker.template.type=ajp13

여기에서 볼 수 있듯이, 파일에 특별한 변수가 있습니다. 렉스에는 내장된 템플릿 시스템이 있습니다. 이 표현식을 사용하면 네트워크 장치 eth0의 IP를 얻을 수 있습니다.

## 파일: files/modjk.conf
## 이 파일은 rex에 의해 관리됩니다.
##
JkWorkersFile /etc/apache2/worker.properties
JkLogFile /var/log/apache2/mod_jk.log
JkShmFile /var/log/apache2/jk.shm
JkMount /* tc
# jkstatus 마운트 포인트 추가
JkMount /jkmanager/* jkstatus

    JkMount jkstatus

실제 시나리오에서는 server.xml도 있을 것입니다. 그러나 이 튜토리얼에서는 AJP 커넥터를 활성화하기 위해 파일을 패치할 것입니다.

이제 Rexfile을 열고 두 번째 작업 configure를 추가합니다.

desc "Apache 및 Tomcat 구성";
task "configure", group => "tomcats", sub {
   # 기본 vhost 제거
   unlink "/etc/apache2/sites-enabled/000-default";
   # 파일을 업로드하되 템플릿으로 파일을 구문 분석합니다.
   file "/etc/apache2/worker.properties",
      content   => template("files/worker.properties"),
      owner     => "root",
      group     => "root",
      mode      => 640,
      on_change => sub { apache::restart(); };
   # 구성 파일 업로드
   file "/etc/apache2/conf.d/modjk.conf",
      source    => "files/modjk.conf",
      owner     => "root",
      group     => "root",
      mode      => 640,
      on_change => sub { apache::restart(); };
   # ajp 접근을 허용하도록 server.xml 패치
   # 실제 사용 시 이 파일에 대한 템플릿 사용
   my $content = cat "/etc/tomcat6/server.xml";
   $content =~ s/<\/Service>/\n<\/Service>/;
   file "/etc/tomcat6/server.xml",
      content   => $content,
      on_change => sub { tomcat::restart(); };
};

이제 configure 작업을 실행하여 서버를 구성할 수 있습니다.

rex configure

애플리케이션 배포

서버를 배포하고 구성한 후, 서버가 제공해야 할 애플리케이션을 업로드해야 합니다.

간단한 배포 작업을 위한 렉스 모듈인 Rex::Apache::Deploy가 있습니다. 이미 설치했습니다.

이 방법에서는 psi-probe를 배포할 것입니다. code.google.com에서 다운로드할 수 있습니다. packages라는 폴더를 만들고 zip 아카이브를 추출한 후 probe.war 파일을 해당 디렉토리에 복사합니다.

mkdir packages  
cd packages  
wget http://psi-probe.googlecode.com/files/probe-2.2.3.zip  
unzip probe-2.2.3.zip

이제 Rexfile을 열고 다른 use 명령에 다음 줄을 추가합니다.

# tomcat에 대한 배포 지원 포함
use Rex::Apache::Deploy "Tomcat";

그리고 deploy라는 세 번째 작업을 생성합니다.

desc "애플리케이션 배포";
task "deploy", group => "tomcats", sub {
   # tomcat 애플리케이션의 컨텍스트 경로 설정
   context_path "/psiprobe";
   # 앱 배포.
   deploy "packages/probe.war",
      username => "manager",
      password => "passw0rd",
      port     => 8080;
};

모든 것을 하나로 묶기

이제 모든 3개의 작업을 차례로 실행할 수 있으며 결과는 콘텐츠를 제공할 준비가 된 서버입니다. 마지막으로, 모든 작업을 실행하는 배치를 정의하여 그렇게 많은 코드를 작성할 필요가 없도록 할 수 있습니다.

Rexfile을 열고 다음 줄을 추가합니다.

desc "모든 작업 prepare, configure 및 deploy 실행";
batch all => "prepare", "configure", "deploy";

-b 옵션으로 이 배치를 실행할 수 있습니다.

rex -b all

이제 모든 작업이 실행된 후, 서버의 /psiprobe에서 방금 배포된 애플리케이션에 접근할 수 있습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.