본문 바로가기

STUDY/AWS

AWS EC2 Instance Spring Boot 프로젝트 배포

AWS 프리티어로 인스턴스 배포기

| 기본적인 인스턴스 세팅은 다른 팀원분이 해주셔서 추후 작업하게 된다면 작성할 것 ..

AWS 세팅하기

  • AWS Region > Seoul 설정

  • 인스턴스 생성
  • 키 페어 생성
    • EC2 인스턴스에 원격으로 접속하기 위해 생성
    • RSA, .pem (OpenSSH와 함께 사용)
  • 네트워크 설정
  • 스토리지 설정
  • 인스턴스 생성 후 보안 그룹 수정
    • 인바운드 규칙(inbound) : 외부에서 EC2나 RDS 등의 내부로 접근할때 사용되는 방화벽 규칙
    • 아웃바운드 규칙(outbound) : EC2나 RDS 등의 내부에서 외부로 접근할때 사용되는 방화벽 규칙
    • 외부에서 EC2에 접속해 서버를 배포해야하기 때문에 인바운드 규칙만 추가
    • 보안그룹 생성

  • Spring boot 기반 서버 -> Custom TCP / 8080 (port) / Anywhere-IPv4 (0.0.0.0/0)
  • 원격 EC2 인스턴스에 접근하기 위해 SSH 설정
  • HTTP, HTTPS 설정
  • PostgreSQL (DB) 설정
  • 인스턴스에 보안 그룹 설정
    • 인스턴스 > Actions > Security > Change Security Groups

SSH 키로 EC2에 접속

  • 인스턴스 > Connect > SSH Client

1. 첫번째 이슈

처음에는 Putty로 접근하려고 했더니 계속 권한이 없다는 에러가 발생
구글링해서 나온 모든 걸 해봤지만 결국 실패 ..
SSH Client 사용해서 접근하기로 결정

 

2. 두번째 이슈

  • SSH Client 접근을 위해 명령 프롬프트에서 chmod 400 *_keypair.pem 실행했더니 윈도우에서는 변경할 수 없는 문제 발생
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for '키 파일.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "키 파일.pem": bad permissions
  • 직접 keypair.pem 이 있는 폴더에서 파일 권한 수정
    • pem 파일 우클릭 > 속성 > 보안 > 사용자 계정 선택 > 사용 권한을 '읽기 및 실행'과 '읽기' 권한만 허용

ssh -i "*_keypair.pem" ubuntu@ec2-*-**-**-***.ap-northeast-2.compute.amazonaws.com

 


 

git clone 및 프로젝트 배포 

EC2에서 프로젝트 git clone 후 실행하는 방법

 

1. git 설치

sudo apt-get install git

 

2. git version 확인

git --version

 

3. ssh key 생성

cd ~/.ssh
ssh-keygen -t rsa -C github@github.com

 

4. id_res.pub 내용 복사

~/.ssh$ cat id_rsa.pub
  • cat 명령어로 나온 내용을 복사 후 github SSH keys에 저장
  • github > Settings > SSH and GPG keys > SSH keys > New SSH key

 

5-1. git clone > SSH 로 나온 주소 복사 후 EC2 인스턴스에서 git clone 

5-2. 수정 후 git push 했을 경우, branch checkout 후 git pull

~/project$ git remote update
~/project$ git checkout origin/develop
~/project$ git pull origin develop
git pull 명령어 실행 시 에러 발생 (cannot open .git/FETCH_HEAD: Permission denied)
$ sudo chown -R $USER .git/ 

 

6. 프로젝트 빌드

~/project$ ls
build  build.gradle  gradle  gradlew  gradlew.bat  settings.gradle  src
~/project$ sudo ./gradlew build
~/project$ cd build/libs
~/project$ ls
*-0.0.1-SNAPSHOT-plain.jar  *-0.0.1-SNAPSHOT.jar
./gradlew build 실행 시 에러 발생 (./gradlew: command not found)
$ sudo chmod +x gradlew

 

7. 실행

sudo nohup java -jar *-0.0.1-SNAPSHOT.jar &
  • nohup 명령어 뒤에 &을 붙이면 백그라운드에서 실행한다는 의미 
  • libs 디렉토리의 nohup.out 파일이 생성되었는지 확인 후 cat 명령어로 로그 확인 가능

 

8. 인스턴스 > Public IPv4 address 주소로 접속

http://*.**.**.***:8080

 

 


 

사용중인 포트 확인 명령어  

$ sudo netstat -nlpt

 


# 참고
https://velog.io/@jonghyun3668/SpringBoot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-EC2-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0
https://victorydntmd.tistory.com/338
https://mik-a.com/68