JAVA_OPTS 환경 변수에 user.language, region 을 정의해 주면 된다. 그러면 Tomcat 서버가 구동될때에 JAVA 파라메터로 추가해 로케일을 적용해 주면 UTF-8 에 Windows 10 에 로케일을 버리고 English 언어와 US 로케일이 적용되어 영문으로 로그가 출력된다.
Tomcat 8 로 넘어오면서 manager 페이지 접근을 위한 패스워드 암호화 방법에 조금 변화가 있었다. 이에 대해서 기술한다.
Manager 페이지 접근 권한 – context.xml
기본값으로 /manager 페이지에 대한 접근은 localhost 로 제한이 걸려 있다. 이것은 manager 앱에 대한 context.xml 파일에 설정되어 있는 내용인데, 파일 경로는 $CATALINA_HOME/webpps/manager/META-INF/context.xml 이다. 다음과 같이 접근 제한된 부분에서 외부접속을 위한 설정을 해준다.
XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0"encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
과거에 Tomcat Multi Instance 설치에 관해서 쓴 글이 있다. Multi Instance 설치에서 핵심은 CATANINA_HOME과 CATALINA_BASE 를 분리하는데 있다.
오늘은 한발 더 들어가서 배포를 위한 설정과 시작, 종료 스크립트의 변경등에 대해서 이야기해보고자 한다.
Multi Instance 구성
Tomcat 을 다운로드 받아 압축을 풀면 그것이 곧 CATALINA_HOME 이 된다. 그리고 CATALINA_BASE 를 위해서 conf 디렉토리를 복사해주고 bin, lib, logs, temp, webapps, work 디렉토리를 생성해준다. 그리고 더블어서 war 파일을 배포를 위한 디렉토리를 Deployments 를 생성해주고 PID 저장을 위한 run 디렉토리도 생성해준다.
Tomcat 인스턴스를 위한 디렉토리
ZSH
1
Deployments bin conf lib logs run temp webapps work
CATALINA_HOME 에서 복사해주는 디렉토리는 conf 밖에 없다는걸 상기해야 한다.
setenv.sh 작성
catalina.sh 스크립트를 보면 Tomcat 를 위한 설정등은 setenv.sh 를 읽어오도록 되어 있다.
setenv.sh 할용
ZSH
1
2
3
4
5
if[-r"$CATALINA_BASE/bin/setenv.sh"];then
."$CATALINA_BASE/bin/setenv.sh"
elif[-r"$CATALINA_HOME/bin/setenv.sh"];then
."$CATALINA_HOME/bin/setenv.sh"
fi
CATALINA_BASE/bin/setsenv.sh 를 먼저 확인하고 없으면 CATALINA_HOME/bin/setenv.sh 를 찾도록 되어 있다.
setenv.sh 에는 CATALINA_OPTS, JAVA_OPTS 등의 환경변수등을 설정할 수 있다. 환경변수에 대해서는 catalina.sh 파일을 열어보면 자세히 나온다.
위와같이 Context 에서 docBase 로 war 파일을 지정하면 된다. 이렇게하면 war 파일을 읽어서 webapps 디렉토리에 압축을 해제하게 된다.
이렇게해야 하는 이유가 있는데, war 파일을 배포하는 디렉토리의 소유권을 배포계정으로 하고 others 에 읽기(read) 퍼미션만 준다. 즉, 운영계정과 배포 계정을 분리해서 운영할 수 있게 된다는 것이다.
배포는 conf/CATALINA/${virtualhost}/ 디렉토리에 context 이름으로 xml 파일을 작성해도 배포가 된다. Multi Instance 를 구성하게 되면 Manager 가 없게 된다. 그런데, 많은 사람들은 이를 CATALINA_HOME/webapps/manager 디렉토리를 CATALINA_BASE/webapps 디렉토리에 복사해 넣는다. 하지만 그렇게 하지 않아도 된다.
이를 ${catalina.base}/conf/Catalina/localhost/manager.xml 파일로 작성한다.
그러면 Tomcat 은 이를 읽어서 manager context 를 실행 준다.
왜 이렇게 하나?
CATALINA_HOME 과 CATALINA_BASE 를 분리하면 좋은 점이 업그레이드를 해야할 경우 나타난다.
몇몇 프로젝트하는 곳에서 Tomcat 설치된 것을 보면 CATALINA_HOME 에 startup.sh 파일이나 catalina.sh 파일을 직접 수정하는 경우를 볼 수 있다. 만일 보안 업데이트가 발생해 이를 Tomcat 업데이트를 해야한 경우라면 startup.sh, catalina.sh 파일을 새롭게 수정해줘야 한다.
하지만 CATALINA_HOME 과 CATALINA_BASE 를 분리하면 CATALINA_HOME 은 건드린게 없기 때문에 그냥 새로운 버전의 Tomcat 으로 바꿔치기하면 그만이다.
Jboss EAP 6 를 설치하고 난후 도메인:포트 만 넣고 접속을 하면 다음과 같이 Jboss EAP 6 에서 제공하는 페이지가 나온다.
내가 설정하지도 않았는데도 위와같이 Jboss EAP 6 에서 기본적으로 제공을 해준다. 이것을 안나오게 하고 싶다면 standalone-*.xml, domain.xml 파일에서 virtual-server 의 enable-welcome-root 값을 false 로 변경해주면 된다.
WebLogic 은 Administrator 를 위한 Web GUI 콘솔을 제공한다. 브라우저를 통해서 관리자로 로그인을 하면 Web 을 통해서 각종 설정들을 할 수 있게 된다.
하지만 Web 을 사용할 수 없는 환경이라면 무용지물이 된다. 이럴때 WebLogic Scripting Tools(WLST)를 사용하면 된다. 자바로 만들어지는 Tools 로서 Web GUI 화면 대신에 터미널상에서 실행되며 대화형식으로 Web GUI 콘솔에 모든 기능을 사용할 수 있다.
실행하기
실행은 먼저 WebLogic 서버의 전역 변수를 소스(Source) 함으로써 WLST 실행환경을 조성해 준다.
Jython scans all the jar files it can find at first startup.Depending on the system,thisprocess may takeafew minutes tocomplete,andWLST may notreturnaprompt right away.
Welcome toWebLogic Server Administration Scripting Shell
Type help()forhelp on available commands
wls:/offline>
이제부터는 대화형으로 명령어를 입력하고 결과를 받아보는 형식으로 진행이 된다. 위와같이 처음 접속을 하면 offline 으로 되는데 먼저 Admin 으로 로그인을 해보자. 이는 Web GUI 콘솔 로그인과 동일한 효과를 가지고 온다.
ZSH
1
2
3
4
5
6
7
8
9
10
11
12
wls:/offline>username='Weblogic'
wls:/offline>password='14321'
wls:/offline>URL='t3://127.0.0.1:7001'
wls:/offline>connect(username,password,URL)
Connecting tot3://127.0.0.1:7001 with userid Weblogic ...
WebLogic 은 weblogic.Deployer 라는 Command Line 명령어를 이용해서 배포를 할 수 있습니다. 이를 통해서 GUI 화면인 WebLogic Admin Console 없이도 터미널을 이용해서 쉽고 빠르게 배포를 할 수 있는 것입니다.
setWLSEnv.sh 실행
터미널의 Command Line 에서 weblogic.Deployer 를 사용하기 위해서는 반드시 환경실행 파일을 먼저 실행해야 합니다. setWLSEnv.sh 라 불리우는 이 파일은 weblogic.Deployer 를 실행하기 위한 각종 라이브러리 클래스와 명령어 PATH를 세팅해 줍니다.
Task15initiated:[Deployer:149026]deploy application healthCheck on Server AdminServer.
Task15completed:[Deployer:149026]deploy application healthCheck on Server AdminServer.
Target state:deploy completed on Server AdminServer
배포가 완료 되었다. 하지만 여기에는 한가지 문제가 있습니다.
애플리케이션은 유지보수가 됩니다. 그래서 많은 변화가 일어나고 변화된 내용을 WebLogic 서버에 배포해야 합니다. 그런데, 배포할 파일 이름이 healthCheck.war 로 모두 동일하다면 WebLogic 서버에 배포하기 위해서는 기존의 배포된 파일을 제거하고 새로운 파일을 배포해야 합니다. 이는 사람이 수동을 다 해줘야 합니다.
버전 배포하기
만일, 배포시에 애플리케이션을 구분하기 위해서 버전정보를 준다면 WebLogic 서버는 자동으로 기존의 배포된 애플리케이션은 회수되고 새로운 버전의 애플리케이션이 활성화해주어 서비스를 지속할 수 있도록 해줍니다.
Target state:redeploy completed on Server AdminServer
기존의 1.0.1 버전보다 높아진 1.0.2 를 사용했고 재배포하기 위해서 -redeploy 를 사용했습니다.
지금까지 배포 방법에는 한가지 문제가 있습니다. 전부다 Admin 서버를 대상으로 배포를 진행했다는 것입니다. weblogic.Deployer 는 배포할 서버를 지정해줄 수가 있습니다. 서버뿐만 아니라 Cluster 를 지정함으로써 Cluster 내에 포함된 모든 서버에 배포를 적용할 수도 있습니다.
타켓(Target) 지정 배포하기
배포 대상 서버, Cluster 을 타켓이라고 합니다. -targets 옵션을 주어서 지정할 수 있습니다.
WebLogic 의 Admin 서버가 구동될때에 각종 옵션들을 주고 싶다면 “USER_MEM_ARGS” 쉘 환경변수로 지정하고 ‘startWebLogic.sh’ 를 실행하면 그것이 적용된다. Systemd 에서 이러한 환경변수들은 ‘/u01/app/weblogic/config/domains/mCloud/servers/AdminServer/etc/default/adminserver’ 파일에 다음과 같이 정의해 줍니다.
WebLogic 11g Silent 설치 에대한 글입니다. Oracle 제품군들을 설치하기 위해서는 GUI 환경이라야 한다고 생각하겠지만 GUI 환경이 아니더라도 설치가 가능한데, 이러한 방법을 Slient 설치하록 합니다. WebLogic 11g 도 Silent 설치를 지원 합니다.
Silent 설치에 핵심은 설치를 위한 각종 자료를 XML 파일로 작성하는 것입니다. ‘각종 자료’라고 함은 설치할 디렉토리, 설치할 컨포넌트등을 정의하는 것입니다.
설치 환경
설치 환경은 다음과 같습니다.
OS: Ubuntu16.04 64bit
Hostname: weblogic1.localdomain
설치 준비
호스트네임 변경
호스트네임을 변경해줍니다. 과거에는 파일을 조작해야 했지만 다음과 같이 hostnamectl 명령어를 이용합니다.
호스트네임 변경
ZSH
1
2
3
4
5
6
7
hostnamectl set-hostname wlserv1
hostnamectl set-hostname wlserv1--static
hostnamectl set-hostname"Server1 of Oracle Weblogic"--pretty
hostnamectl set-hostname wlserv1--transient
vim/etc/hosts
192.168.96.30wlserv1.systemv.pe.krwlserv1
로그인을 다시하면 변경된 호스트네임이 반영됩니다.
계정생성
계정은 Oracle 제품군 설치를 위해서 oinstall 그룹과 weblogic 계정을 다음과 같이 생성합니다.
Oracle 은 자사의 제품군에 대한 설치를 위해 디렉토리 구조를 정의놨는데 이것을 OFA(Optimal Flexible Architecture) 라고 부릅니다. OFA 는 단순하게 디렉토리만을 정의한것이 아니라 파일시스템, 스토리지 확장등을 모두 고려해 연구해 Oracle 에서 발표한 것입니다.
<May10,20179:46:32PM KST><Info><WebLogicServer><BEA-000377><Starting WebLogic Server with Java HotSpot(TM)64-Bit Server VM Version24.80-b11 from Oracle Corporation>
<May10,20179:46:33PM KST><Info><Security><BEA-090065><Getting boot identity from user.>
Enter username toboot WebLogic server:
그런데, 위와같이 인증을 위한 프롬프트가 나옵니다. 이는 Admin 서버와 통신을 위한 것으로 Admin 웹 콘솔 로그인을 위한 계정을 입력해주면 됩니다.
하지만 매번 이렇게 할려면 매우 힘든 일이고 기동 스크립트는 자동화가 필요한 부분이라 이부분을 자동인증으로 하기 위한 방법을 설명합니다. 이 방법은 다음 링크에도 잘 기술되어 있습니다.
WebLogic 11g 기동시 JAVA OPTION 넣기위해서 setDomainEnv.sh 나 commonEnv.sh 를 수정하는 경우가 있다. 하지만 이렇게 하면 WebLogic 11g 를 구성하는 Admin, NodeManager, ManagedServer 에 각각 따로따로 적용해주기위해서 앞에서 언급한 쉘 스크립트에 조건식을 줘야 한다.
setDomainEnv.sh 나 commonEnv.sh 는 WebLogic 서버에서 전역적으로 사용하는 것이기 때문에 특정한 부분을 위해서 수정하는 경우는 지양해야 한다.
최신의 WebLogic 11g 에서는 이러한 특정부분만을 위해 적용할 수 있는 JAVA OPTION 변수를 제공하는데 그것이 바로 USER_MEM_ARGS 이다. 쉘 환경변수로서 이것을 활용하면 Admin, NodeManager, ManagedServer 기동시에 JAVA OPTION을 줄 수 있다.
예를들어 Admin 서버를 기동할때에 사용하는 스크립트인 ${DOMAIN_HOME}/startWebLogic.sh 를 보자.