본문 바로가기
웹 개발

aws ubuntu에 war 배포 방법

by 주식 키우는 개발자 2020. 11. 7.
반응형

오늘은 aws에 war를 배포하는 방법에 대해서 정리해보려고 합니다. 

AWS란 무엇인가?

AWS(amazon web Service) 란 아마존에서 제공하는 클라우드서비스

왜  AWS를 이용할까?

웹 프로젝트를 제작하면 서버를 필요로한다. 내가 알기론 예전엔 컴퓨터를 이용해 직접 서버를 운영했는데 비용적인 측면에서 aws를 사용하는 것 같습니다. 

시스템 구성

크게 클라우드 컴퓨터(AWS)remote gitwar파일이 필요합니다.

  1. AWSlinux(인스턴스) 생성하기
  2. linuxjava jdk tomcat 버전을 알맞게 설치하기
  3. legarcy 프로젝트라면 war파일을 linux의 tomcat에 넣고 tomcat start
  4. boot 프로젝트라면 원격 git 에서 linux로 clone 한 후에 mvvn을 통해서 jar파일로 변환하고 실행

ubuntu tomcat에 war파일 배포하기

1.인스턴스를 생성

 

image

 

image

 

image


 tomcat을 사용할 경우 사용자 지정 TCP 8080포트를 열어주어야 합니다.
위치 무관으로 한 이유는 개발하는 컴퓨터가 바뀔경우 다른 ip도 허용되어야 하기 때문입니다. 실제 할때는 ip를 지정해주는 방식 사용하자 linㅣ
linux를 사용할떄는 SSH로 하면됩니다.

 

 

2. 인스턴스에 접속하기

저는 xshell을 사용했습니다. 이 방법은 윈도우에서 접속하는 방법입니다. 참고 바랍니다. 
실행시켜서 새로만들기를 누르면 아래와 같은 이미지를 볼 수 있습니다.

image

 

image


위에 있는 ip주소를 호스트에 넣으면 됩니다. 

image

위와 같이 하고 생성해주면 됩니다. 

3. 인스턴스에 java jdk 설치하기

일단 명령어 마다 sudo를 붙히지 않을 거라면 sudo su root명령어를 통해 root로 접속해야합니다.
프로젝트에 맞는 jdk를 설치해야하는데 나는 zulu8을 사용했기때문에 zulu8, jre, tomcat8을 설치하려고 합니다.

Azul의 public key등록

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9

Azul package에 대한 정보를 APT저장소에 등록

$ sudo apt-add-repository 'deb http://repos.azulsystems.com/ubuntu stable main'

APT의 가용한 패키지들의 정보 update

$ sudo apt update
$ sudo apt install zulu-11
$ java -version
$ java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-8u212-b03-0ubuntu1.18.04.1-b03)
OpenJDK 64-Bit Server VM (build 25.212-b03, mixed mode)

 

java 설치 확인

$ which javac
/usr/bin/javac
$ readlink -f /usr/bin/javac

java 환경 변수 설정하기
환경 변수를 설정하기 위해서는 profile 폴더로 이동해야합니다. 

nano /etc/profile

root에서 하는것이 아니면 sudo를 붙혀야합니다. 

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin/:$PATH
export CLASS_PATH=$JAVA_HOME/lib/:$CLASS_PATH

추가하고 ctrl + x / y / enter 누르기

리로드를 해야합니다.

$ source /etc/profile

환경변수를 학인하는 명령어

echo $JAVA_HOME
$JAVA_HOME/bin/javac -version
 

4. 인스턴스에 tomcat8 설치하기

apt-get install tomcat8

tomcat 버전확인하는 명령어

/usr/share/tomcat8/bin/version.sh

원래는 방화벽을 변경해주어야한다.(tomcat은 8080포트를 사용하기 때문) 하지만, 처음에 인스턴스를 생성할 때 보안그룹에 추가하였기 때문에 넘어가도됩니다. 

tomcat 실행시키는 명령어

service tomcat8 start

tomcat을 실행시켰다면 `인스턴스ip:8080'으로 접속해서 확인해보겠습니다. 

image

이런 화면이 나오면 성공적으로 설치된 것입니다. 

5. 프로젝트 옮기기

인스턴스에 필요한 것을 모두 설치했습니다. . 그러면 이제 서버에 올려놓고 싶은 프로젝트를 war형식으로 넘겨줄 차례입니다.
우선 프로젝트를 war로 빼놓습니다.
war파일은 노트북이나 데스크탑같은 개인 개발환경에 있을 것입니다. 이것을 인스턴스인 linux에 옮기려면 filezilla가 필요합니다.

image

호스트는 인스턴스 ip를 입력하면 됩니다.

그다음에 war파일을 드래그앤 드롭으로 넣으면 됩니다.


넣어놓고 tomcat이 있는 경로로 mv 명령어를 통해서 옮기면 되기 때문입니다.

이제 여기서 권한 설정으로 골치아팠던 부분입니다.

ls -al

아마 home에 war파일이 있을텐데 이것을 /var/lib/tomcat8/webapps/ 로 옮겨야 합니다.
하지만 권한과 소유가 설정되어 있지 않았습니다.

drwxrwxr-x 4 tomcat8 tomcat8     4096 May 28 14:55 .
drwxr-xr-x 5 root    root        4096 May 28 14:12 ..
drwxr-xr-x 3 tomcat8 tomcat8     4096 May 28 14:10 ROOT
drwxr-x--- 5 tomcat8 tomcat8     4096 May 28 14:55 hmProject
-rwxrwxrwx 1 tomcat8 tomcat8 65357651 May 28 14:35 hmProject.war

위와 같이 war가 tomcat의 소유여야합니다.

파일 이동하는 명령어

$ mv hmProject.war /var/lib/tomcat8/webapps/

아마 permission denied 가 뜰 것입니다.

 

퍼미션 변경하기

chmod [변경될 퍼미션값] [변경할 파일]

소유자 변경하기

chown [변경할 소유자],[변경할 그룹] [변경할 파일]

6. tomcat command

tomcat start/stop

$ sudo service tomcat7 stop
$ sudo service tomcat7 start

tomcat 의 구동상황

$ systemctl status tomcat7.service

테스트

http://서버ip:8080/SocketTest(프로젝트명)/파일이나 url

java설치 참고 사이트
zulu설치 참고 사이트
tomcat 배포참고 사이트
권한 command 참고 사이트

 

aws에 spring 프로젝트와 mysql 연동하기

시스템 구성

aws에 있는 tomcat8war파일을 올려놓고, 같은 aws서버에 mysql을 설치하고 설정해주는 흐름입니다.

1. mysql 설치하기

  apt-get install mysql-server

2. mysql 에 로그인하기

  mysql -u root -p
  비밀번호 

3. aws 에서 인바운드 설정

image

보안그룹에서 3306포트를 열어주어야 한다.

image

mysql을 3306포트에서 사용할 수 있도록 해주는 것입니다.

4. mysql 외부 접속 허용 설정

mysql을 설정할 수 있는 conf로 가기

 cd /etc/mysql/mysql.conf.d
 vi mysqld.cnf
  • vi파일을 수정하는 방법
    i를 누르면 수정가능해짐
    수정한 후에 ctrl + c로 명령모드로 바꿈
    :wq 혹은 :w!를 입력하면 저장됨.

외부 접속 허용 설정해준 후에 mysql 재시작 및 로그인

service mysql restart
mysql -u root -p
  • root 계정 권한 설정
grant all on *.* to 'root'@'3.16.125.37' identified by 'ssafy';
FLUSH PRIVILEGES;

5. mysql work brench 를 이용한 접속 확인하기

image

이슈

  1. 리눅스 mysql에는 한글이 들어가지 않아서 utf8로 테이블을 바꿔주는 것을 해줘야 합니다.
  2. 리눅스에 mysql을 설치했더니 root 권한을 인식하지 못한다. 권한을 다시 줘야합니다 .
grant all on *.* to 'root'@'3.16.125.37' identified by 'ssafy';
FLUSH PRIVILEGES;
  1. 비밀번호를 재수정해주는 코드 ( 필요하진 않은듯)
update mysql.user set plugin = 'mysql_native_password' where User='root';
  1. mysql에서 table이 외래키를 가지고 있을 경우 에러가 발생했는데 해결하지 못했습니다.

tomcat8/webapps 에있는 war 파일 삭제하기

rm ~~.war

'웹 개발' 카테고리의 다른 글

javascript touch event 사용해보기  (0) 2020.11.10
passport-jwt 로 토큰인증하기  (0) 2020.11.07

댓글