목차
리눅스에 jboss를 설치해서 웹 애플리케이션 배포한 경험을 기록한다.
설치환경: redhat 8.8 64 bit
설치경로: /home/계정/app 하위
설치모드: standalone
jboss는 standalone, domain 모드가 있는데 standalone모드는 단일 인스턴스로 각각 관리하는거고
domain모드는 여러개의 인스턴스를 도메인이라는 그룹으로 관리하는 걸 의미한다.(내가 이해한바)
jboss eap 설치파일 다운로드(로그인 필요)
압축해제
설치경로에 zip파일을 업로드 후 압축 해제한다.
unzip jboss-eap-7.4.zip
설정 변경(접속 허용)
외부에서 접속할 수 있도록 아래 설정을 변경한다.(처음에는 로컬에서만 접근 가능하도록 되어 있음)
vi ~/app/jboss-eap-7.4/standalone/configuration/standalone.xml
여기서는 모든 IP 접근 허용으로 했지만 실 운영환경에서는 상황에 맞게 변경해야 한다.
관리자 모드도 외부에서 접속할 수 있도록 전부 허용했다.
jboss 서비스 구동(백그라운드)
cd jboss-eap-7.4/bin
./standalone.sh &
jboss 서비스 종료(참조용)
cd jboss-eap-7.4/bin
./jboss-cli.sh --connect command=shutdown
외부에서 접속 테스트
아래처럼 인덱스 페이지가 뜨면 성공이다.
Administration Console 클릭 시 관리자 콘솔화면이 표시가 될텐데 초기계정은 보안상의 이유로 비활성화 되어 있어 만들어야 한다.
계정 만들려면 bin 경로로 이동 후 아래 쉘을 실행한다.
sh add-user.sh
난 계정명을 "admin"으로 만들었는데 원래 있는 계정이라고 이미 있는데 진행할거냐고 물어본다.
다른 admin 말고 다른 계정명으로 만들면 나오지 않을 듯 하다.
계정, 비밀번호 입력 후 yes를 누르면 계정이 생성되고 관리자 계정 설명 파일에 아래처럼 내용이 작성된다.
원래 주석처리 되어 있는 부분이 위처럼 활성화가 된다.(내가 만든 계정/비밀번호 해시값)
다시 jboss 재기동 후 관리자 콘솔에 저 계정으로 로그인 하면 된다.
관리자 콘솔에서 deployment?인가 그 메뉴를 통해 war파일을 올리면 배포가 된다.
하지만 난 관리자 콘솔을 이용하지 않고 터미널로 배포했기에 그 부분은 캡처를 못했다.
배포
기본적으로 아래 배포경로에 war파일을 위치시키면 자동으로 인식해서 war파일을 읽어들인다.
/home/계정/app/jboss-eap-7.4/standalone/deployments
war파일 배포 후 8080 포트 호출 시 jboss의 인덱스 페이지가 표시되는데 이를 원치 않으면 설정파일의 아래 부분을 주석처리하면 된다.
서버 로그
tail -f ~/app/jboss-eap-7.4/standalone/log/server.log
standalone모드인 경우 위 로그파일을 찍어보면 된다.
사실상 여기까지만 하면 끝인데 내 경우는 war파일을 배포경로에 위치 시켜도 war파일의 압축이 풀리지 않았기에 특별하게 아래와 같은 방법을 통해 수동 배포 했다.
war파일 업로드 후 jboss 구동하면 war파일이 배포경로에 application명.war라는 폴더가 생기고 그 하위에
관련 폴더, 파일들이 생기는 것으로 알고 있었는데 내 경우는 war파일은 안 풀리고 그냥 application명.war.deployed라는 마커파일만 생겼었다.(ex: admin.war.deployed라는 마커파일)
jboss의 배포 방식은 managed(jboss가 알아서 관리), unmanaged(사용자가 관리) 방식이 있다.
managed 방식은 archive방식만 배포가능
Exploded Archive방식(war파일을 푼 상태로 배포)
내 경우는 Exploded Archive 방식이고 순서는 아래와 같다.
마커파일 생성
touch admin.war.deployed
배포경로에 마커파일 생성(배포상태를 의미하는 파일), 원래는 배포 후 자동으로 생성된다.
여기선 배포됨을 의미하는 .deployed로 만든다.
war파일명의 폴더 생성
애플리케이션.war라는 폴더를 생성 후 그 하위에 웹 소스들을 복붙한다.
jboss 재구동
이제 jboss를 재구동한다.(내 경우는 이렇게 해서 배포가 되었다.)
그 후 배포해야 될 war파일이 2개라서 구글링 하다가 아래처럼 standalone 폴더를 복사 해서
동일하게 하나 더 만들고 포트 등을 변경 후 start.sh을 아래처럼 수정해서 배포에 성공했다.
#admin.war
-Djboss.server.base.dir=/home/dev1/app/jboss-eap-7.4/standalone
#portal.war
-Djboss.server.base.dir=/home/dev1/app/jboss-eap-7.4/standalone2
그런데 위 옵션처럼 standalone 경로를 설정하니 pid가 2개가 올라가는 문제가 생겨 아래처럼 시작 쉘을 변경했다.
소스 수정 시 이제 admin.war폴더 밑의 파일들을 교체후 재구동하면 된다.
전체 start.sh
#!/bin/sh
#vm 옵션
JAVA_OPTS="-Dglobals.profiles.active=dev"
echo "admin start."
#jboss start(vm 옵션 전달, 표준 출력, 에러 무시)
nohup ./standalone.sh -Djboss.server.base.dir=/home/dev1/app/jboss-eap-7.4/standalone $JAVA_OPTS 1>/dev/null 2>&1 &
# 프로세스가 올라가는 동안 pid를 찾아서 pid를 찾으면 파일로 저장 후 반복문 종료
while true; do
#pid 찾는다.
if ps aux | grep "java" | grep -v grep | grep "standalone" > /dev/null; then
#마지막 pid를 변수에 치환
latest_pid=$(ps aux | grep "java" | grep -v grep | awk '{print $2}' | sort -n | tail -n 1)
#pid 파일로 저장
echo $latest_pid > admin_pid.txt
break
fi
# 1초 대기 후 재시도
sleep 1
done
#로그 출력
tail -f ../standalone/log/server.log
역시 기록을 통해 복기하니까 그리 어렵지 않은데 처음 시도 했을 때는 삽질을 역시 많이 했다.
역시 기록을 해야 다음 번 시도 시 시간이 많이 단축된다.
위 과정은 jboss 배포의 정석 방법은 아니고 구글링 해 파편화 된 정보를 통해 배포한 것이다.
개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.
틀린 점 있을 경우 댓글 부탁드립니다.
2023.12.30 - [IT/DevOps] - [WAS] jboss eap 7.4 ssl 적용 (feat. openssl)
'IT > DevOps' 카테고리의 다른 글
[DevOps] CentOS 8 JenKins 설치(feat. CI, CD) (37) | 2024.05.01 |
---|---|
[DevOps] CentOS7 설치부터 jdk, mysql, tomcat 연동까지 과정 (55) | 2024.04.25 |
[WAS] jboss eap 7.4 ssl 적용 (feat. openssl) (22) | 2023.12.30 |
[linux] linux start, stop shell template (24) | 2023.12.30 |
[linux] 리눅스(CentOS) 방화벽 해제 (22) | 2023.12.30 |