이번 항목에서는 실제 외부 IP가 접속하도록 클라우드 서버에 war파일을 배포를 하는 법을 정리해보겠습니다.
배포환경
클라우드 호스팅 서비스는 GCP를 기준으로 하고 VM의 운영체제는 우분투 20.04이고 JDK는 17버전이고 아파치 톰캣은 9.0.98버전이고 SQL은 MySQL 8.0.41 기준으로 배포합니다.
개발환경 상세
| 환경 | 사용 | 버전 |
|---|---|---|
| OS | ubuntu 20.04 | |
| Server | Apache Tomcat v9.0 | |
| Language | JDK: JavaSE-17 | |
| DB | mysql-8.0.41 |
VM 인스턴스 생성하기
프로젝트 선택버튼을 클릭합니다.
새 프로젝트버튼을 눌러줍니다.
프로젝트 이름을 정해주고 위치는 상관안하셔도 됩니다. 그리고 만들기버튼을 클릭합니다.
위에서 만든 프로젝트로 들어갑니다.
Computer Engine 버튼을 눌러줍니다.
사용버튼을 눌러줍니다.
인스턴스 만들기버튼을 클릭합니다.
이름을 지어주고 리전은 us-central1(아이오와), 영역은 us-central-a로 설정합니다.
OS 및 스토리지 항목에 들어가서 변경버튼을 눌러줍니다.
운영체제는 Ubuntu, 버전은 Ubuntu 20.04 LTS로 해줍니다.
HTTP 트래픽 허용이랑 HTTPS 트래픽 허용 두 개의 체크박스를 선택해줍니다.
모든 Cloud API에 대한 전체 액세스 허용 라디오 버튼을 체크해주고 만들기버튼을 누릅니다.
연결 컬럼의 SSH버튼을 눌러줍니다.
이 화면이 뜨면 VM 생성과 접속이 잘 된 것입니다!
다시 홈 화면으로 돌아간다음 VPC 네트워크버튼을 클릭합니다.
방화벽항목을 클릭합니다.
방화벽 규칙 만들기버튼을 클릭합니다.
이름은 아무거나 해도 상관 없지만, 대상, 소스범위, 프로토콜(TCP)를 8080으로 허용하는 건 다 지켜주시고 “만들기” 눌러줍니다.
우분트 기본 패키지 다운로드, 설정
sudo apt upgrade
sudo apt update
우분트의 기본 패키지들을 다운 받아 줍니다.
Java(JDK)
https://www.oracle.com/kr/java/technologies/downloads/archive/
위의 링크에서 본인의 실행환경과 맞는 JDK를 선택하는게 최고입니다. 이 글에서는 일단 JDK 17버전으로 설치를 하겠습니다.
wget https://download.oracle.com/java/17/archive/jdk-17.0.12_linux-x64_bin.tar.gz
sudo tar -xvzf jdk-17.0.12_linux-x64_bin.tar.gz
리눅스에 호환되는 JDK를 설치하고 압축을 풀어줍니다.
wget https://download.oracle.com/java/17/archive/jdk-17.0.12_linux-x64_bin.tar.gz
sudo tar -xvzf jdk-17.0.12_linux-x64_bin.tar.gz
sudo mkdir -p /usr/lib/jvm
sudo mv jdk-17.0.12 /usr/lib/jvm/
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17.0.12/bin/java 1
sudo update-alternatives --config java
java -version
JDK는 보통 /usr/lib/jvm 폴더 밑에 위치하게 하는 관습이 있으므로 /usr/lib 폴더 밑에 jvm 폴더를 만들어주고 그 곳에다가 JDK를 위치시켜줍니다. java -version 쳤을 때 자바 버전이 잘 나오면 설치가 잘 된 것입니다.
sudo apt-get install openjdk-17-jdk
openjdk도 설치를 해줍니다. 중간에 “y” 누르는 부분 있습니다.
sudo apt-get install openjdk-17-jdk
Tomcat
https://tomcat.apache.org/whichversion.html
위의 링크에서 본인의 실행환경과 맞는 Tomcat을 선택하는게 최고입니다. 이 글에서는 일단 tomcat 9버전으로 설치를 하겠습니다.
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.99/bin/apache-tomcat-9.0.99.tar.gz
tar -xvzf apache-tomcat-9.0.99.tar.gz
tomcat을 설치하고 압축풀어줍니다.
cd ~/
nano .bashrc #아래 꺼 맨 밑에 복사 붙여넣기
CATALINA_HOME="~/tomcat/apache-tomcat-9.0.99"
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
CATALINA_HOME="~/tomcat/apache-tomcat-9.0.99"
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export JRE_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
source ~/.bashrc
시스템의 환경변수를 설정합니다.
CATALINA_HOME="~/tomcat/apache-tomcat-9.0.99"
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
CATALINA_HOME="~/tomcat/apache-tomcat-9.0.99"
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export JRE_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
이 부분은 bashrc 파일을 열고 맨 아랫줄에 붙여넣어줍니다.
cd apache-tomcat-9.0.99/bin
vi ~/apache-tomcat-9.0.99/bin/setenv.sh
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export JRE_HOME=/usr/lib/jvm/java-17-openjdk-amd64
CATALINA_PID="/run/tomcat.pid"
이번에는 톰캣 부분에서 환경변수를 설정해줍니다.
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export JRE_HOME=/usr/lib/jvm/java-17-openjdk-amd64
CATALINA_PID="/run/tomcat.pid"
이 부분을 복사 붙여넣기 해줍니다. vi 편집기에서 저장 후 나가려면 ESC 한번 누르고 :wq입니다.
cd apache-tomcat-9.0.99/bin
vi ~/apache-tomcat-9.0.99/bin/setenv.sh
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export JRE_HOME=/usr/lib/jvm/java-17-openjdk-amd64
CATALINA_PID="/run/tomcat.pid"
이번에는 톰캣 부분에서 환경변수를 설정해줍니다.
데이터베이스(MySQL)
sudo apt-get install mysql-server
MySQL을 깔아줍니다. 우분투에서는 기본 패키지에 MySQL이 내장 되어있으니 그걸 이용하면 편리합니다. 중간에 “y” 눌러줍니다.
sudo systemctl start mysql
sudo systemctl enable mysql
MySQL 서버를 시작해주고 서버 시작을 자동적으로 유지해줍니다.
sudo apt-get install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql
sudo mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1111';
GRANT GRANT OPTION ON *.* TO 'root'@'localhost';
FLUSH PRIVILEGES;
CREATE USER 'apple'@'localhost' IDENTIFIED BY '1111';
GRANT ALL PRIVILEGES ON *.* TO 'apple'@'localhost';
FLUSH PRIVILEGES;
exit
일단 “root” 계정으로 들어가서 일반 사용자를 만들어주고 권한을 부여해야합니다. 일반 사용자 이름은 여러분들이 로컬에서 웹 프로젝트 만들 적에 썼던 유저이름과 비밀번호로 해줘야합니다!!! 저는 “apple”이 유저 이름이고 “1111”이 비밀번호입니다.
sudo mysql -u apple -p
CREATE DATABASE gapi;
USE gapi;
// #create, insert 구문 스크립트 복붙
해당 유저이름으로 데이터베이스 만들고 웹 프로젝트 할 적에 해놨던 create,insert 스크립트 복사,붙여넣기해줍니다.
Github 이용하기
war파일을 VM에 올리기 위해 git 레파지토리를 만들고 git clone 하는 방식을 사용할 것 입니다. 그러므로 지금부터는 여러분들이 github계정을 가지고 있다고 가정하고 진행할 것이니 github계정이 없으시다면 계정을 먼저 만들고 진행해주세요.
cd ~/
sudo apt install git
git --version
cd ~/.ssh
ssh-keygen -t rsa -C 'trumanjinhwan@gmail.com' #본인 깃허브계정 이메일
cat id_rsa.pub
sh-keygen -t rsa -C 'trumanjinhwan@gmail.com'
이거 한 다음에 뭐 입력해야 될 것 처럼 나오지만 그냥 아무것도 입력안하고 엔터 키 눌러도 되니까 한 3번 정도는 그냥 엔터 키만 치셔도 됩니다. 그리고
cat id_rsa.pub
이거 한 다음 나오는 거 메모장 같은 곳에다가 복사 붙여넣기 해줍니다. 저로 예를 들면
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDWptUKblKCs8QkWYUzU0za/rlv+S5xxSUm2MuVvrZ6DJEN/bh6lSSLh3/IWe3s4Fc6ZNTnA9EcvJKFV+LlrTewLJVLJ1
ya1jhNKEqVn8HEW1d7aHk+cUhdqrH94U8vKyloKt8XXOZU75yPykIM2Lfd8AHjSjL4+DqN12+qQzS0lZ7yYDNfjqEVoe/SARtdlZ9WVX7hjIwGHVsOY8Wwfeynob6R8uJRM
PhBt1fX3E39KZTKcU/CzVoDX33aa+j971OB0+23OPqdslpuHgzcd5HBtog6zKtk+afYP7Q+g0OL3MqipLBGZTXvC3OGl9OFykfg1w8TrmLB7RVYLjg1pIXIYW5AOmzHcCb4g1
WjQRy1pdYDDq6OSzLDadY6MFmOjGWJbzj/TJQgC23HAGbvlvRlJh716V9s2plj3CQoBFR+qXzWM2c8xxqcuZ8xOV/d4zwgezc6bExkKccYzKixy7YNbujOtYoFPV8I45o6JkPX
ax/Z8F6EDMfSYNtFkmAz2ws= trumanjinhwan@gmail.com
이런식으로 나옵니다.
깃허브 들어가서 우측 상단에 프로필 -> Settings -> SSH and GPG keys -> New SSH key 복사한 SSH 키 붙여넣어봅시다 .
깃 레파지토리를 생성해줍니다.
깃 레파지토리에 war파일 올려줄겁니다.
해당 war파일을 선택 후 커밋 해줍니다.
깃 레파지토리 주소를 복사 해줍니다.
cd ~/
git clone https://github.com/trumanjinhwan/myserver.git
cd myserver
cp Project4team_PMS.war /home/trumanjinhwan/apache-tomcat-9.0.99/webapps/
cd ~/apache-tomcat-9.0.99/webapps
깃 클론 해주고 war파일을 webapps폴더 밑에 복사시켜줍니다.
#서버 켜기
sudo sh /home/trumanjinhwan/apache-tomcat-9.0.99/bin/startup.sh
#서버 끄기
sudo sh /home/trumanjinhwan/apache-tomcat-9.0.99/bin/shutdown.sh
서버를 켜고 끄기는 명령어는 위의 2개입니다.
이런식으로 서버 배포에 성공했습니다!