IT/DevOps

[linux] linux jboss eap 7.4 install, setting/ deploy

알 수 없는 사용자 2023. 12. 30.

리눅스에 jboss를 설치해서 웹 애플리케이션 배포한 경험을 기록한다.

설치환경: redhat 8.8 64 bit

설치경로: /home/계정/app 하위

설치모드: standalone


jboss는 standalone, domain 모드가 있는데 standalone모드는 단일 인스턴스로 각각 관리하는거고

domain모드는 여러개의 인스턴스를 도메인이라는 그룹으로 관리하는 걸 의미한다.(내가 이해한바)

jboss eap 설치파일 다운로드(로그인 필요)

 

JBoss Enterprise Application Platform | Red Hat Developer

Modular, cloud-ready Java EE 8 platform with APIs and development frameworks for quickly developing secure and scalable Java EE applications.

developers.redhat.com

압축해제

설치경로에 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 배포의 정석 방법은 아니고 구글링 해 파편화 된 정보를 통해 배포한 것이다.


개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.

틀린 점 있을 경우 댓글 부탁드립니다.

 

[linux] linux start, stop shell template

목차 start.sh jboss service를 구동하는 쉘 예시다. 서비스 구동 시 vm 옵션을 전달해서 백그라운드로 실행하고(표준 출력, 에러 무시) pid를 파일로 저장한다.(kill할 때 사용) #!/bin/sh #vm 옵션 JAVA_OPTS="-Dg

yaga.tistory.com

 

[WAS] jboss eap 7.4 ssl 적용 (feat. openssl)

목차 jboss eap 7.4버전에서 openssl을 적용한 경험을 기록한다. openssl 키/인증서 생성 사전에 openssl 패키지는 설치되어 있어야 함 openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 365 -out server.crt java

yaga.tistory.com

 

[DevOps] CentOS 8 Jenkins CI, CD 환경 구축(feat. eGovCI)

목차이번엔 전자정부프레임워크의 서버용 개발환경을 이용해서 CI, CD를 구축했다.다음엔 저번에 설치한 GitLab과 새로 설치한 Jenkins로 처음부터 연동하는 것도 포스팅 예정이다. [DevOps] CentOS 8 Jen

yaga.tistory.com

댓글