[AWS] Ubuntu22.04 환경 EC2에서 스프링부트 런칭하기
서버개발

[AWS] Ubuntu22.04 환경 EC2에서 스프링부트 런칭하기

Ubuntu 환경 구축

기존에 AWS에서 Linux환경에서만 만들어보다가, Ubuntu 22.04 환경에서 만드니 큰 문제가 생겼다.

아무리 인바운드 규칙에 HTTP 포트(80)를 넣어도 ssh만 될 뿐, HTTP로는 접속이 되지 않는다..(curl, url 등등)

지속적으로 Connection refused가 뜨며, linux로만 만들었어서 큰 혼란에 빠졌다. AWS를 잘못 배운건지, user data를 안 넣어서 그런건지 security group을 잘못 지정했는지 몰라서 해결하는데 시간이 걸렸다..ㅠㅠ

 

일단 ubuntu에 들어오면 sudo apt-get upgrade를 진행한다

apt가 apt-get upgrade 방식으로 새로운 버젼에 대해서 알게되면, 장비에 존재하는 패키지의 새로운 버전을 fetch한다.

$ sudo apt-get upgrade
$ sudo apt-get install openjdk-11-jdk
$ sudo apt-get upgrade

 

위의 Ubuntu에서 Connection refused 원인은 ubuntu내에 apache가 깔려있지 않아서 http포트를 받을 수 없던 것이였다.

다음 명령어를 통해 아파치2를 설치할 수 있다. (apache대신 nginx 설치를 추천합니다.)

/* 둘중 하나만 설치해야한다. */

// apache
$ apt-get install apache2

//nginx
$ sudo apt install nginx
$ sudo service nginx start 
$ sudo service nginx status

 

그리고 netstat을 조회하면 http 포트로 접속 가능한 지 확인이 가능하다.

// netstat이 동작하지 않을 경우
$ sudo apt-get install net-tools

// 조회
$ netstat -nlpt

 

스프링부트를 실행하기 위한 톰캣도 위와 유사한 방식으로 설치한다

톰캣이 필요하다면 설치하도록 하자

 

톰캣이 8080포트를 기본적으로 사용해서 스프링 부트 실행 시 문제가 발생할 수 있다.

그때를 위해서 포트를 변경하는 것도 작성하였다.

$ sudo apt-cache search tomcat | grep tomcat9
$ sudo apt-get install tomcat9

$ netstat -nlpt

// 여기부터는 tomcat port 변경
$ cd /etc/tomcat9
$ ls -al
$ sudo chmod 646 server.xml
$ nano server.xml

// 내리다보면 port="8080"을 원하는 포트번호로 수정해준다
// ctrl+x, y, enter로 나와준다
$ cat server.xml
$ sudo service tomcat9 restart
$ sudo chmod 320 server.xml

 

톰캣도 무사히 설치되었다.

 

기존에 들어가지지 않던 http방식으로 EC2에 접속할 수 있게되었다. 

 

Spring boot Project 서버로 옮기기

이제 스프링부트에서 build를 통해 프로젝트의 jar파일을 만들고, 이것을 private git repository에 push한다.

이전 블로그 글을 참고해서 서버에서 RSA키를 생성하고, 공개키를 Github의 Settings > SSH and GPG keys > SSH keys에 추가한다.

그러면 이제 EC2에서 private repository를 clone할 수 있게 된다. 원하는 폴더에 가서 설치해주면 된다.

RSA키 생성은 아래 글을 참고하면 된다.

 

[AWS] EC2 instance 접속 / RSA키 생성(미완성) / 공유그룹

환경 : AWS에서 EC2-Ubuntu22.04 사용 생성 시 기존에 있는 key나 혹은 새로운 키를 pem파일로 생성해둔다. 생성이 완료되면 체크 후 Connect를 눌러 접속한다. 그리고 public ip를 외우고 우측 하단에 Connect..

mumomu.tistory.com

 

Ubuntu EC2에서 스프링 프로젝트 배포하기

git clone을 하고나면 해당 위치에 .jar파일이 복사되는데 이를 실행시켜줄 때 만약 profile이 있다면 다르게 실행해야한다.

아래의 상황에 맞게 하나만 실행하면 된다.

// 일반적으로 jar 실행하기
$ java -jar 파일이름.jar

// profile에 맞게 실행하기
// 본인은 application-local.yml에 넣어놨어서 위의 것으로 실행이 되지 않았다
$ nohup java -jar -Dspring.profiles.active=local "jar파일" &

// 위의 두개는 cli를 끄게되면 꺼지게 된다
// &를 붙이면 백그라운드로 실행이 되고, nohup을 붙이면 nohup.output으로 로그를 볼 수 있다
// 백그라운드로 jar 실행시키기
$ java -jar 파일이름.jar &

// 다른 포트로 열기
$ java -jar -Dserver.port="포트번호"

// 백그라운드 프로세스 종료 방법
// 조회방법 1 - 8080포트 PID에 나와있다.
$ netstat -nlpt 
// 조회방법 2
$ ps auxf
// 조회방법 3
pgrep -f jar

$ kill -9 "PID"

 

익숙한 문구가 나오며 정상적으로 실행되었다.

그러나 아직 프로젝트에서 수행한 api들은 조회가 되질 않는다. 프로젝트가 8080포트로 열렸는데, 8080포트를 통한 접근에 대한 인바운드 규칙을 추가하지 않았기 때문이다. 8080포트로 들어오는 인바운드 규칙을 추가해줘야 api조회가 가능하다.

그렇기 때문에 url접속 시 에도 "Elastic IP":8080/api 형태로 포트를 붙여주어야한다.

이것을 입력하지 않아도 접속을 하려면 포트포워딩을 해야한다.

security group의 인바운드 규칙 추가
적용한 스웨거 및 rest api가 잘 동작한다.

기본적으로는 배포 완료되었고, 포트포워딩에 대해 소개하고자 한다.

글에서 소개했던 apache2에서는 포트포워딩이 왜인지 모르겠지만 비 작동하여 nginx를 설치하였다. 

위에서 설치했다면 구글링하여 apache2 삭제 후 nginx를 설치해야한다.

 

포트 포워딩(:80 to :8080)

포트포워딩은 기본적으로 들어오는 HTTP의 80포트를 서버 내부에서 8080포트로 변경해주어 스프링 부트 어플리케이션을 포트를 입력하지 않아도 실행할 수 있도록 돕는다. 

netfilter와 iptables 등 설치되지 않았다면 설치하고 진행하면 된다.

nginx의 경우에는 vi /etc/nginx/sties-available/default에서 location '/'를 작성해주면 되는데 그것은 다른 블로그를 찾아보길 바란다.

// 80 to 8080 redirect
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

// 중복되서 입력되거나 이미 존재하는 리다이렉트 포트가 있을 경우 삭제
$ sudo iptables -t nat -D PREROUTING {삭제할 번호}

// 조회
$ sudo iptables -t nat -L --line-numbers

// 저장
$ sudo netfilter-persistent save

// 다시 로드
$ sudo netfilter-persistent start

// 재부팅 시 사라지지 않도록 설정
$ sudo sh -c "iptables-save > /etc/ufw/iptables.rules"
$ sudo vi /etc/network/interfaces
// 하단에 추가
pre-up iptables-restore < /etc/ufw/iptables.rules

포트를 입력하지 않았다

배포 완료!

참고 블로그

 

ubuntu] aws에 프로그램 배포하기

aws란 아마존이 제공하는 웹 클라우드 서비스이다. Iass 기반으로, 인프라를 제공해주는 사이트이다. (비슷한 맥락으로 cafe24가 있는데, 이 사이트 경우에는 paas로 플랫폼을 제공함) https://aws.amazon.c

itstudy-mary.tistory.com

 

리눅스 아파치, HTTP 웹 서버 설치 방법

리눅스에서 아파치 서버를 설치하면 HTTP 서버를 동작시킬 수 있습니다. HTTP는 80포트를 사용하고 웹서버라고 생각하면 됩니다. 웹서버는 두가지 뜻을 가지고 있습니다. 하드웨어 웹서버 : 웹서버

dany-it.tistory.com

 

#aws ec2 오류 #aws ec2 http 오류 #ubuntu http 오류 #ubuntu 접속안됌 #ec2 port 80 connection refused #ubuntu port80 설치법 #ubuntu 스프링부트 띄우는 법 #우분투 http오류 #aws 인바운드 규칙 했는데 안됌