목표
AWS EC2 인스턴스 생성 후 EC2 내부에서 Spring Boot 서버를 실행 하는것이 최종 목표입니다.
CI/CD 인프라 시스템을 구축하는것이 아닙니다. (단순 EC2 단일 배포)
- 배포시 유의할 부분
- 고정 IP 주소를 사용합니다. (탄력적 IP : 이부분 설정을 넘기셔도 됩니다.)
- 터미널에서 SSH 클라이언트를 통해 EC2에 접속합니다.
- Git 방식이 아닌, FileZila 를 통해 프로젝트를 이동합니다.
- 프리티어(무료)를 이용합니다.
- 사전 필요 작업
- AWS 계정 생성.
- pem 키 발급.
- FileZila(for Mac) 프로그램 설치. (파일전송)
- jar 파일 build
- AWS Region 설정 (Asia/Seoul)
- AWS Console 우측 상단에서 설정 가능!
목차
- 보안그룹 설정
- EC2 인스턴스 생성
- 고정주소(탄력적 IP) 설정
- SSH 클라이언트로 EC2 접속.
- Java 설치
- 프로젝트 폴더 이동(복사) - FileZilla
- Spring Boot 서버 실행.
1. AWS - 보안 그룹 설정
- 보안 그룹이란? AWS 에서 사용할 수 있는 방화벽 설정 개념이다.
- EC2의 경우 SSH의 접속을 허용 한다던가, RDS의 경우 Local, EC2에서만 접근이 가능하다던지의 개념이다.
- 2가지의 용어만 알아도 보안그룹을 이해하는데 쉽다.
- 인바운드(InBound) : 외부 -> EC2 내부(로 접속 허용)
- 아웃바운드(OutBound) EC2 내부 -> 외부
- EC2의 경우 특별한 경우에만 따로 설정한다.
1-1 보안 그룹 생성 및 설정
- AWS / EC2 Management console / 네트워크 및 보안 / 보안 그룹 으로 이동.
- 보안 그룹 생성
- 보안 그룹 상세 설정 - 이름, 설명, 아웃바운드
- 인바운드 설정
- 인바운드의 경우, 외부에서 접근을 허용하는것 이기 때문에 상세 설정이 필요하다.
기본적으로 허용할 IP의 카테고리들이 존재하며, Server port 같은것들은 사용자 지정으로 추가 해줘야 한다.
만약 협업을 해야 한다면, SSH 유형을 추가하고 팀원들의 IP와 port(22)를 추가해줘야 한다.
- SSH 접속을 위한 (SSH), HTTP, HTTPS, Spring Boot 서버 port를 기본적으로 추가 해준다.
2. EC2 인스턴스 생성
2-1 인스턴스 생성
2-2 상세 설정
- 이름 : 생략 가능하나 EC2 를 쉽게 식별하기위해 지정 해준다.
- Ubuntu의 프리티어를 사용 한다.
- 프리티어 라고 표시 된 것들을 선택한다.
- 사전에 만들어 둔 키페어를 선택 해준다.
- 사전에 설정해둔 보안그룹을 선택해준다.
- 프리티어의 경우 30GB 까지 지원된다.
- 설정을 다시 한번 확인 후, 인스턴스 시작을 클릭.
- EC2 가 생성되고 준비되기 까지 조금의 시간이 소요된다.
3. 고정IP (탄력적 IP) - 생략 가능.
- AWS EC2의 경우 인스턴스가 재실행 될때 마다, 퍼블릭 IP가 변경 되기 때문에, IP의 변경이 일어나면 안될 경우 설정 해줘야 한다.
- 과금 요소이기 때문에 (한달에 대략 3천원) 필요한 만큼만 생성 하도록 한다.
3-1 상세 설정 및 연결
- 우측의 탄력적 IP주소 할당 클릭
- 특별한 설정을 하지 않고 할당 하면 된다.
3-2 EC2와 연결
- 할당된 IPv4 의 경우 악의적으로 트래픽을 늘려 과금을 하게 하는 사람이 있다고 한다... 조심하는게 좋을것 같다.
- 인스턴스의 경우 생성했던 EC2의 정보를 선택할 수 있다.
- EC2 인스턴스 정보에 들어가면, 탄력적IP 가 할당 된것을 확인 할 수 있다.
- 퍼블릭 IPv4 주소, 탄력적 IP주소는 같은 값으로 할당된것을 확인 할 수 있다.
4. SSH 클라이언트 연결
- EC2 인스턴스 정보의 우측 상단에 '연결' 클릭.
- 예시에서 친절하게 접속 방법을 알려준다. 복사도 가능하고, 순서대로 따라하면 접속 할 수있다.
4-1 터미널
- 우선 pem 키 파일이 존재하는 곳으로 directory를 이동한다.
4-2 pem 파일 권한 변경
$ chmod 400 swings134.pem
- chmod 400 [pem 파일명].pem
4-3 SSH 접속
- 예시에 나와 있는대로 접속 할 수 있다.
- 접속 방법은 퍼블릭 DNS, 퍼블릭 IP 를 사용해서 접속 할 수 있다.
# 퍼블릭 DNS
$ ssh -i "swings134.pem" ubuntu@[DNS]
# 퍼블릭 IP
$ ssh -i "swings134.pem" ubuntu@[IP]
5. Java 설치
- Spring Boot 서버를 실행 하기 위해서는 Java 설치 및 환경변수 설정을 해야 한다.
5-1 Java 설치
- 아래의 명령어를 순서대로 실행 하도록 한다.
# 1. apt update
$ sudo apt-get update
# 2. java 설치
$ sudo apt-get install openjdk-11-jdk
# 3. java 설치 확인(설치 완료 후)
$ java -version
$ javac -version
5-2 Java 환경 변수 설정
5-2-1 환경변수 확인
# 환경변수 설정 확인
$ echo $JAVA_HOME
- 해당 명령어를 입력 했을 때 아무것도 안뜨는게 정상이다. (환경변수 설정이 안되어있다는 뜻.)
5-2-2 Java 절대경로 확인
$ which java
/usr/bin/java
$ readlink -f /usr/bin/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.amzn2.0.1.x86_64
- 해당 작업은 java가 설치된 절대 경로를 알아 내는 작업이다. (shift + ctrl + c 로 복사해두자.)
5-2-3 vi 편집기를 사용하여 환경변수 설정
$ vi /etc/profile
- 맨 마지막줄로 이동(shift + g) 후 i 를 눌러 insert mode 진입 한뒤 환경 변수 설정을 해준다.
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.amzn2.0.1.x86_64/jre/bin/java
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
- 입력이 끝났다면 esc 누르고, :wq! 입력(저장 후 종료) 커맨드 사용하여 vi 편집기를 종료 한다.
# 환경변수 설정 확인
$ echo $JAVA_HOME
- 커맨드를 입력하여 환경변수 설정 확인.
- java 환경변수가 설정되었음에도 확인을 해보고 싶다면 vi 편집기를 사용하여 Java 코드를 작성하고 실행 해보자.
# 순서대로 진행
# 1. Java 코드 작성
$ vi Hello.java
# 2. vi 편집기 내부
public class Hello {
public static void main(String[] args) {
System.out.println("Hello");
}
}
# 3. Java 실행.
$ javac Hello.java
$ java -cp . Hello
Hello
6. 프로젝트 폴더 이동(복사) - FileZilla
* Local 에서 미리 build 를 진행 합니다!
* git을 사용하지 않고 FileZilla를 사용하여 폴더를 복사합니다.
- 파일 전송 방법
프로젝트 파일을 EC2로 옮기는 방법은 3가지가 존재한다.
- git 을 사용하여 repository를 clone.
- scp 명령어를 통해 복사
- FileZilla 혹은 Putty(Window) 프로그램을 사용하여 전송.
해당 글에서는 3번을 사용 한다. 하지만 2번 scp 명령어를 사용하는 예제를 아래에 적어두겠다.
*scp 명령어는 : ssh 프로토콜 기반으로 SecureCopy 를 뜻한다. (보안으로 안정된 파일/폴더 전송)
# scp -i [키페어위치] -r [보낼폴더/파일위치] [퍼블릭 IPv4 DNS:저장할 위치]
$ scp -i ~/download/key.pem -r ~/Desktop/folder ubuntu@compute.ama~.com:~/home/ubuntu/day
6-1 EC2에 폴더 만들기 및 권한 부여
# 1. 폴더 생성
$ mkdir -m 777 [폴더명]
- 프로젝트를 이동할 폴더를 생성, 읽기,쓰기 권한을 준다(주의!!! 777 모드는 권장되지 않습니다.)
6-2 FIleZilla 연결
- 새로운 사이트를 만들어 준다.
- 만든 사이트 클릭 후 우측의 설정으로 이동.
- 프로토콜: SFTP, 호스트: EC2 퍼블릭 IPv4 DNS 주소
- 로그온 유형: 키파일, 사용자명 입력, 키파일 위치 연결
- 연결
6-3 파일 전송
- 파일 질라 기준 왼쪽이 Local, 우측이 EC2 이다.
- 이동할 파일을 선택후, EC2에 파일을 전송한다.
* 시간이 꽤 오래 걸린다, 중간에 작업이 멈추게 된다면 처음부터 다시 해야한다.....
7. Spring Boot 서버 실행
- 사전에 build를 해두었다면, 파일 전송이 종료된 후 빌드 파일이 위치한 곳으로 이동 후 실행.
- nohup 명령어를 사용하여 백그라운드에서 서버를 실행한다. 자세한 사용법은 아래 링크에서 확인해보자.
https://lucas-owner.tistory.com/43
7-1 서버 실행.
$ nohup java -jar test-0.0.1-SNAPSHOT.jar &
7-2 테스트
- 탄력적IP:{port} 로 접근하면 접근이 가능하다.
* 만약 port 를 쓰지 않고 싶다거나 (Client 노출 X) 별도의 Front 프레임워크를 사용해서, 특정 port 로 포워딩 시키고 싶을 경우(front 프레임 워크 port로 무조건 이동 시키고 싶을경우 ex.) port:3000) 아래의 링크를 참조해서 설정하면된다.
https://lucas-owner.tistory.com/42
AWS EC2를 사용하여 배포를 해보았다. 나름 최소한으로 한다고 했어도 해줄게 정말 많은것 같다.
다음엔 RDS (DB: MySQL)까지 연결하여 EC2와 연동을 해보도록 하겠다!
AWS 배포 (2) - RDS 연결 (EC2 - RDS)
https://lucas-owner.tistory.com/45
'AWS' 카테고리의 다른 글
[AWS] RDS 생성 - (EC2 연결, SpringBoot 배포)(2) (0) | 2023.02.16 |
---|---|
[AWS] nohup - EC2 SSH 접속종료시 서버 유지 방법 (0) | 2023.02.15 |
[AWS] EC2 포트 포워딩 (Port forwarding) - 포트연결 (0) | 2023.02.14 |
댓글