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 파일 우클릭 > 속성 > 보안 > 사용자 계정 선택 > 사용 권한을 '읽기 및 실행'과 '읽기' 권한만 허용
- https://taehyeki.tistory.com/224 < 이 방법도 있는 것 같음
- 명령 프롬프트에서 아래 명령어로 접속하면 성공!
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