사전 준비물
vpc 생성함.
퍼블릭 서브넷 (bastion)생성함.
프라이빗 서브넷 생성함. => mysql 설치해놔야 함.
pem.key로 퍼블릭, 프라이빗 서브넷 비밀번호 알고 있어야함.
애플리케이션의 Jdbcurl을 프라이빗 아이피로 바꿔야 한다.
애플리케이션을 클린 빌드 해놓는다. 테스트 통과가 되지 않으면 테스트를 빼고 빌드 한다.
java open jdk17 설치하기
톰캣 설치하기
sudo wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.105/bin/apache-tomcat-9.0.105.tar.gz
압축 파일을 푼다.
sudo tar -xzf apache-tomcat-9.0.105.tar.gz
푼 압축 파일을 옮겨 실행한다.
sudo mv apache-tomcat-9.0.105 tomcat9
cd /opt 로 가서 설치되었는지 확인한다.
ls 해보면 tomcat9가 다운로드 된 것을 확인할 수 있다.
톰캣을 실행해본다.
sudo /opt/tomcat9/bin/startup.sh
sudo: /opt/tomcat/bin/startup.sh: command not found 라고 뜬다면, 환경변수 설정이 안되었다는 뜻이다.
이제 환경변수 설정을 해준다.
자바 경로가 어디있는지 모르겠다면 다음 명령어를 실행한다.
readlink -f $(which java)
=> /usr/lib/jvm/java-17-openjdk-amd64/bin/java
/etc/profile 파일을 연다.
sudo nano /etc/profile
끝에 자바 경로를 넣어준다.
자바 경로가 어디있는지 모르겠다면 다음 명령어를 실행한다.
readlink -f $(which java)
=> /usr/lib/jvm/java-17-openjdk-amd64/bin/java 이렇게 떳다. (경로 추가할때는 /bin/java 빼기!)
다시 sudo nano /etc/profile을 해서 파일을 수정해준다.
제일 끝줄에 다음을 추가한다.
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 (자신의 경로)
export PATH=$JAVA_HOME/bin:$PATH
컨트롤 오, 엔터, 컨트롤 엑스 해서 저장하고 나온다.
방금 수정한 파일을 적용한다.
source /etc/profile
톰캣을 시작한다. (/opt/tomcat9/bin# 안에 있는 상태)
./startup.sh
(root@image-bastion-nanhee-prod:/opt/tomcat9/bin# ./startup.sh)
빌드된 와르 파일을 퍼블릭 서브넷으로 업로드 하기
애플리케이션 빌드 파일을 퍼블릭 서브넷으로 업로드 한다.
이때 루트에 해도 되고 /opt/tomcat9/webapps에 해도 된다. 톰캣이 어디있는지 중요하다(?)
알아야 할것: pem.key 가 있는 경로 , 자신의 애플리케이션이 있는 경로.
scp -i ~/workspace/gritty-nanhee.pem /Users/nanhee/workspace/private/chill-stock/build/libs/ChillStock-1.0-SNAPSHOT.war root@223.130.156.232:/opt/tomcat9/webapps/ROOT.war
여기서 잠깐!
Tomcat war 파일 배치
톰켓의 war 파일은 자동 배포를 위해 반드시 $CATALINA_HOME/webapps 폴더에 배치해야 한다. 루트 경로에 업로드하면 톰켓이 이를 자동으로 배포하지 않기 때문에, 반드시 톰켓의 webapps 폴더에 업로드하거나 `
톰캣 배포 디렉터리의 역할
톰캣 서버는 기본적으로 설치 디렉터리(예: /opt/tomcat9) 아래의 webapps 폴더를 감시하면서, 그곳에 새 WAR 파일이 복사되면 자동으로 압축을 풀고 배포를 진행한다. 즉, WAR 파일을 여기에 두어야 톰캣이 “새 어플리케이션”으로 인식할 수 있다. 루트(/)나 홈 디렉터리에 올려놓으면 톰캣은 해당 위치를 전혀 참조하지 않기 때문에 배포가 이루어지지 않는다.
권장 배포 방식
- WAR 파일을 바로 서버에 업로드할 때는 scp 나 rsync 같은 명령으로 /opt/tomcat9/webapps/ 폴더로 전송한다.
- 만약 권한 문제(일반 사용자로 접속 시 /opt/tomcat9 아래에 쓰기 불가)가 있으면 사용자 홈 디렉터리에 업로드한 뒤, sudo mv ~/yourapp.war /opt/tomcat9/webapps/ 방식으로 이동한다.
- 이동 후에는 소유권과 권한이 톰캣 프로세스(보통 tomcat 사용자)로 설정되어 있는지 확인한다(sudo chown tomcat:tomcat /opt/tomcat9/webapps/yourapp.war).
다른 위치에 두고 싶다면
톰캣 conf/server.xml 또는 별도의 context.xml에 <Context docBase="/다른/경로/yourapp.war" path="/yourapp"/> 와 같이 직접 경로를 지정해 줄 수도 있다. 하지만 별도 설정 없이 “그냥 복사만”으로 자동 배포를 원한다면 반드시 webapps 폴더를 사용해야 한다.
따라서 우분트 서버의 루트 경로(/)에 WAR 파일을 올려두는 것만으로는 톰캣이 배포를 수행하지 않는다. 톰캣이 설치된 위치의 webapps 폴더에 WAR 파일을 배치해야 한다.
mysql 바인딩 하기
설정파일 열기
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
열면, bind-address가 127.0.0.1 로 되어있음을 알 수 있다.
bind-address 를 0.0.0.0으로 바꾼다.
저장하고 나간다.
Esc 누르고 :wq → Enter
mysql 재시작한다.
sudo systemctl restart mysql
트러블슈팅
퍼블릭 서브닛 -> 프라이빗을 옮기기
퍼블릭 서브넵으로 접속한다.
ssh -i ~/workspace/gritty-nanhee.pem root@223.130.156.232
비밀번호 입력한다.
scp -i ~/workspace/gritty-nanhee.pem \
-o ProxyJump=root@223.130.156.232 \
/Users/nanhee/workspace/private/chill-stock/build/libs/ChillStock-1.0-SNAPSHOT.war \
root@10.0.2.7:/opt/tomcat9/webapps/ROOT.war