리눅스 운영서버 톰캣 WAR 수동 배포 방법 / 소스 복구 방법

운영서버는 root 계정이 아니면 /톰캣경로/webapps 폴더에 접근할 수 없어서 개발서버 배포와 절차가 다릅니다.

이미 운영 중인 프로젝트에 참여한 경우
서버 반영 방법이 다르면 기존 방법을 따르는 것이 가장 좋습니다.

기존 프로젝트 소스 삭제하고 다시 war 풀면 정상 동작하지 않아서 다시 복구해야 하는 경우도 있는데,
운영은 오래 중단되면 안되기 때문에 삭제하지 않고 안전한 방법으로 배포해야 합니다.

Git 프로젝트 운영서버 반영 절차
https://0songha0.github.io/op/2023-12-05-1


운영서버 WAR 반영 전 필수 작업

ROOT 계정으로 전환

sudo su -

대부분의 권한이 root에 있기 때문에 계정을 전환합니다.

기존 소스 백업

백업용 폴더, 반영용 폴더 생성

/home/유저명/bak/날짜_순번
/home/유저명/deploy/날짜_순번

root 계정이 아니면 /톰캣경로/webapps 폴더에 접근할 수 없어서 유저 home에 폴더를 생성합니다.
파일질라로 디렉터리 만들기 하면 됩니다.

기존 프로젝트 소스 백업

cd /톰캣경로/webapps/ROOT또는프로젝트명
cp -r ./* /home/유저명/bak/날짜_순번

프로젝트 크기가 크면 멈춘 것처럼 보일 수 있으나, 기다리면 정상적으로 복사 완료됩니다.
로컬에 날짜 폴더 생성 후 내려받아서 이중 백업해도 좋습니다.
톰캣은 war 압축 해제 후 단건 반영이 없었다면, war 파일만 백업해도 됩니다.

파일질라로 war 업로드

빌드한 war 파일을 /home/유저명/deploy/날짜_순번 폴더에 업로드합니다.

톰캣 실시간 로그 확인

tail -1000f /톰캣경로/logs/catalina.out

대부분의 운영서버는 was 서버가 이중화되어 있기 때문에, 모든 was 서버의 톰캣에 동일하게 배포해야 합니다.
각 서버별로 PuTTY를 하나씩 더 띄워서 로그 열고, URL로 접속하여 어떤 톰캣에 붙었는지 확인 후 그 서버 먼저 반영해서 운영 접속 테스트 시 사용자 요청이 정상적으로 들어오면 다른 서버들에도 반영하는 것이 안전합니다.

하나의 톰캣으로만 요청을 유도하려면, 다른 was 서버의 톰캣들을 죽이는 방법이 있습니다.


운영서버 WAR 수동 배포 방법 (정석)

운영서버는 관리자, 사용자 서비스가 한 프로젝트에 있어도 두 개의 톰캣에 분리하여 각각의 war로 배포하는 것이 좋습니다.
관리자 서비스에 문제가 있어도 사용자 서비스에 영향을 미치지 않게 하기 위함입니다.

톰캣 종료

/톰캣경로/bin/shutdown.sh

톰캣 실행 중 webapps 폴더 안에 war를 올리면 자동으로 압축 해제되니 기존 실행중이던 톰캣 서비스를 종료합니다.
첫 번째 was에 반영 후 정상 로그 확인 전까지는 두 번째 was를 내리면 절대 안 됩니다.

톰캣 폴더에 war 복사

cd /톰캣경로/webapps
cp -r /home/유저명/deploy/날짜_순번/ROOT또는프로젝트명.war ./

ll 명령어로 war 사이즈를 보고 정상 교체되었는지 확인합니다.

war 압축 해제

jar -xvf ROOT또는프로젝트명.war

기존 프로젝트 파일들을 지우지 않고 덮어씌우기 때문에, 삭제된 파일은 직접 삭제해야 합니다.

톰캣 실행

cd /톰캣경로/bin
./startup.sh

톰캣 실행 시 war 파일이 압축 해제된 ROOT또는프로젝트 폴더 소스가 반영됩니다.

단건 반영이 필요한 경우
/톰캣경로/webapps 폴더에 war 파일이 있으면 단건 반영이 안 되니까 war 파일 반영하고 정상 구동 확인 후 war 파일은 백업하고 지운다 합니다.


운영서버 WAR 수동 배포 방법 (편법)

톰캣 실행 중 /톰캣경로/webapps 폴더에 war 파일이 올라오면 바로 같은 이름의 폴더로 풀리기 때문에,
톰캣을 종료하고 war 파일을 옮기는데 시간이 소요되어 사용자가 503 페이지를 오래 볼 수 있습니다.

그래서인지 /톰캣경로/webapps/ROOT또는프로젝트폴더명 폴더 안에 war 파일을 올리는 편법이 있습니다.
이 방법은 war 배포 절차가 좀 더 간소화되며, 압축 해제 명령어도 약간 달라집니다.

기존 프로젝트 폴더 안에 war 복사

cd /톰캣경로/webapps/ROOT또는프로젝트명
cp -r /home/유저명/deploy/날짜_순번/ROOT또는프로젝트명.war ./

ll 명령어로 war 사이즈를 보고 정상 교체되었는지 확인합니다.

톰캣 종료

cd /톰캣경로/bin
./shutdown.sh

첫 번째 was에 반영 후 정상 로그 확인 전까지는 두 번째 was를 내리면 절대 안 됩니다.

war 압축 해제

cd /톰캣경로/webapps/ROOT또는프로젝트명
jar -xvf ROOT또는프로젝트명.war

현재 경로에 war 압축을 해제합니다.
기존 프로젝트 파일들을 지우지 않고 덮어씌우기 때문에, 삭제된 파일은 직접 삭제해야 합니다.

톰캣 실행

cd /톰캣경로/bin
./startup.sh

톰캣 실행 시 war 파일이 압축 해제된 ROOT또는프로젝트 폴더 소스가 반영됩니다.


백업한 프로젝트 소스 복구 방법

프로젝트 war 복구

톰캣 종료 후 유저 Home에 백업했던 war를 복사하여 압축 풀고 재실행 합니다.

정석 방법 war 복구

cd /톰캣경로/webapps
cp -r /home/유저명/bak/날짜_순번/ROOT또는프로젝트명.war ./
jar -xvf ROOT또는프로젝트명.war

편법 방법 war 복구

cd /톰캣경로/webapps/ROOT또는프로젝트폴더명
cp -r /home/유저명/bak/날짜_순번/ROOT또는프로젝트명.war ./
jar -xvf ROOT또는프로젝트명.war

프로젝트 폴더 복구

톰캣이 종료된 상태에서 프로젝트 폴더 내 파일들을 지우고, 백업했던 파일들을 옮겨옵니다.
별도의 단건 반영이 없었다면, war 파일만 가져와서 다시 압축해제해도 됩니다.

정석 방법 프로젝트 폴더 복구

cd /톰캣경로/webapps
cp -r /home/유저명/bak/날짜_순번/* ./

편법 방법 프로젝트 폴더 복구

cd /톰캣경로/webapps/ROOT또는프로젝트폴더명
cp -r /home/유저명/bak/날짜_순번/* ./

로컬에 백업했던 프로젝트 폴더 복구
파일질라로 대용량 폴더를 업로드하면 너무 오래 걸리기 때문에 반디집으로 tar 압축 후 올리고,
/톰캣경로/webapps 폴더에 옮긴 뒤 아래 명령어로 압축을 푸는 것이 좋습니다.

mkdir ROOT또는프로젝트폴더명
tar -xvf ROOT또는프로젝트폴더명.tar -C ./ROOT또는프로젝트폴더명

Leave a comment