서론
프론트엔드와 rest api 협업 프로젝트를 진행하고 있어, 백엔드 서버를 배포해야 한다.
github에 있는 프로젝트를 AWS EC2 ubuntu 환경에서
git clone으로 내려받아 jar 파일을 빌드하여 서버를 배포해 보자.
순차적으로
EC2 배포시스템을 수동으로 구성하고,
RDS 생성 및 EC2 연결,
S3 storage 설정,
Jenkins 서버와 Deploy(운영) 서버 두 개를 활용해서 CI/CD 파이프라인 구성을 할 것이다.
이 글의 목차로는 다음과 같다.
- AWS 세팅하기
- 발급받은 ssh 키로 Ec2 우분투 콘솔에 접속하기 (Window putty활용)
- 우분투 콘솔에서 git ssh 연동후 git clone 하기
- 내려받은 파일로 빌드하고 jar 파일 실행시켜 스프링 부트 서버 실행시키기
1. AWS 세팅하기
1-1 AWS Region 설정하기
먼저 AWS 사이트에 접속하고 로그인한 뒤 리전이 서울로 되어있는지 확인한다.
1-2 인스턴스 생성
그 이후 검색창에 EC2 검색 후 EC2 대시보드로 들어가 인스턴스 시작을 눌러 인스턴스 생성
우리가 만들 EC2 인스턴스의 이름을 정해주는 항목으로, 보통 ({애플리케이션}WebServer) 네이밍을 설정한다.
OS는 가장 많은 정보가 제공되어 있으며, 프리티어가 제공하는 Ubuntu 버전으로 결정하였고,
인스턴스 유형은 프리티어를 사용하고 있다면 t2.micro로 설정해야 과금이 안 나간다.
1-3 키 페어 생성하기
EC2 인스턴스에 원격으로 접속하기 위해 필수적으로 필요하기 때문에 생성해줘야 하며,
키 페어는 한번 생성하면 두 번 다시 다운로드할 수 없기 때문에 잘 보관하고 있어야 한다.
키페어 이름을 설정해 준 뒤 키 페어 생성을 눌러 생성된 키 페어를 다운로드하면 된다.
이후 나는 Putty를 사용하여 ubuntu환경에 접속할 것이니. ppk 확장자로 파일을 저장할 것이다.
1-4 네트워크 세팅
보안 그룹은 방화벽에 관한 내용인데 이건 추후에 따로 생성해서 세팅해 줄 예정이니 넘어가자.
보안 그룹 바로 밑에 있는 SSH 트래픽 허용 부분은 EC2 인스턴스를 생성하고,
생성한 인스턴스에 저희가 사용하고 있는 노트북이나 데스크톱(로컬 머신)으로 접속하기 위한 부분이며
이때 SSH 통신을 사용한다.
SSH 통신을 할 때 ip 제한을 어떻게 할 것인지에 관한 내용으로
집에서 고정된 ip로만 접근하시는 분들은
내 ip를 선택해 주시면 되지만, 위치무관(0.0.0.0/0)으로 설정해 놓자.
-> 이 설정도 추후에 보안 그룹 탭에서 변경이 가능
1-5 스토리지 세팅
프리티어는 최대 30 GIB까지 지원해 주므로 30으로 설정해 준다. (옆의 어드밴스드 탭에서 상세 설정이 가능합니다.)
볼륨 유형은 범용 SSD로 선택
만약 Provisioned IOPS SSD (프로비저닝 된 IOPS SSD)를 선택한다면
사용하지 않아도 활성화한 기간만큼 계속 비용이 발생하게 되므로 프리티어를 사용하신다면 주의
1-6 인스턴스 최종 생성
요약이 위 화면과 같다면 인스턴스 시작을 누르고 인스턴스를 생성하면 된다.
1-7 보안 그룹 수정하기
보안그룹이란?
- AWS에서 제공하는 방화벽으로 인바운드 규칙, 아웃바운드 규칙이 존재한다.
- 인바운드 규칙(inbound) : 외부에서 EC2나 RDS 등의 내부로 접근할 때 사용되는 방화벽 규칙
- 아웃바운드 규칙(outbound) : EC2나 RDS 등의 내부에서 외부로 접근할때 사용되는 방화벽 규칙
이제 생성한 인스턴스의 보안 그룹을 수정해 주자.
우리는 EC2에 접속해서 서버를 띄우는 것이 목적이기 때문에 인바운드 규칙만 수정하면 된다.
EC2 메뉴의 네트워크 및 보안 탭의 보안 그룹을 눌러 보안 그룹 세팅 창으로 들어갑니다.
위에서부터 순서대로
- 보안그룹 이름 설정({애플리케이션} WebServerGroup)
- 스프링 부트 기반 서버를 열어줄 것이기 때문에 사용자 지정으로 8080 포트를 설정
- 원격 EC2 인스턴스에 접속할 때 사용되는 ssh 관련 방화벽 설정, ssh는 기본 포트 연결로 22번 포트가 사용됨
- HTTP 연결 시 사용
- HTTPS 연결시 사용
모든 인스턴스 트래픽 주소는 0.0.0.0/0 은 Anywhere-IPv4을 설정하여 모든 ip를 열어두도록 하자.
아웃바운드 규칙은 따로 세팅해주지 않고 기본세팅으로 남기고 넘어가면 된다.
1-8 보안 그룹 설정하기
EC2 콘솔에 들어가 아까 만든 인스턴스를 클릭하고
위쪽의 작업 -> 네트워킹 -> 보안 그룹 변경을 눌러주고
기존의 기본 보안 그룹은 체크 해제 후 방금 만든 보안그룹으로 교체하면 된다.
2. 발급받은 ssh 키로 Ec2 우분투 콘솔에 접속
1. putty 다운 후 설치를 하자.
Download PuTTY: latest release (0.78)
2. sshKey.pem 파일. ppk 확장자 변경 ( 경고창이 뜨면 예를 클릭 )
3. putty 접속
- putty의 Host Name에 연결 정보 입력
- connection -> SSH -> Auth에 Private key file에 Browser 버튼으로 PPK 파일 찾기
- 만일 Auth에 Browser 버튼이 없으면 Auth -> Credentials -> Private key file에 Browser 버튼 있음
- open클릭
나 같은 경우는 open 전에 server save 버튼을 눌러 설정을 지정하고
더블클릭으로 접속(open)하는 방식을 사용했다.
다음과 같은 창이 나왔다면 EC2 ubuntu 콘솔 접속에 성공한 것이다.
3. 우분투 콘솔에서 git ssh 연동후 git clone
정적 파일 배포는 방식이 두 가지가 있는데
- EC2에서 프로젝트 git clone 후 실행하기
- 로컬 머신에서 jar 파일 하여 EC2에 복사 후 실행
우리의 웹프로젝트는 github를 사용하고 있으므로, 1안으로 진행하도록 할 것이다.
3.1 우분투 환경 깃 설치
sudo apt-get install git
위 명령어로 git 설치를 해주자.
git --version
설치를 해줬다면 위 명령어로 설치가 되었나 확인이 가능하다.
3.2 Github SSH KEY 생성
cd ~/.ssh
ssh-keygen -t rsa -C github계정 메일(example@github.com)
그렇다면 .ssh 디렉토리에 id_rsa.pub 파일이 생성되었을 것이다.
이후 cat 명령어로 id_rsa.pub파일을 출력하고 이것을 깃헙 ssh에 저장을 해주어야 한다.
3.3 git clone 하기
이제 git clone을 하기 위한 준비가 끝났다.
깃헙 레포지토리로 이동후 code 버튼 -> ssh 탭을 누르고 나온 주소를 복사하자.
이 복사한 값을 EC2에 접속한 터미널에서 git clone 할 디렉토리에서 실행하면 성공적으로 clone이 끝난다.
git clone 복사한 값
4. 내려받은 파일로 빌드하고 jar 파일 실행시켜 스프링 부트 서버 실행
클론 한 디렉토리에서 gradlew 파일을 실행시켜 jar 빌드파일을 생성해야 한다.
그전에 기본 EC2 환경에는 자바가 설치되어있지 않으므로
sudo apt install openjdk-11-jdk
으로 자바를 설치해준 뒤 빌드를 해야한다.
./gradlew build
빌드가 성공적으로 끝났다면 build -> libs 디렉토리가 새롭게 생기고 jar 파일이 생성된 것을 확인할 수 있다.
4-2 빌드파일 실행
nohup java -jar {애플리케이션}-0.0.1-SNAPSHOT.jar &
다음 명령어로 생성된 jar 파일을 실행해 준다.
여기서 파일이름은 생성된 파일 이름으로 수정하시면 된다.
nohub 명령어 뒤에 &를 붙이면 벡그라운드에서 실행한다는 의미로
EC2 콘솔(ubuntu) 접속을 끊더라도 실행파일을 계속 실행하라는 명령어이다.
스프링 부트가 실행되고 있다는 로그는 nohub.out 파일에 쌓이게 되고
우리는 libs 디렉토리에 nohub.out 파일을 열어 확인할 수 있다.
확인하는 명령어는 다음과 같다.
cat nohup.out
4-2 빌드파일 연결 확인 및 종료
현재 실행된 jar 파일을 끄고 싶다면
jobs
위 명령어로 현재 백그라운드에서 돌아가고 있는 파일을 확인한 뒤
현재 돌아가는 프로세스를 확인하려면
ps -ef | grep java
명령어를 입력한다.
그리고 해당 프로세스를 종료하려면,
kill -9 {프로세스 ID}를 입력해서 종료한다.
5. 브라우저 URL로 접속
AWS 콘솔 창으로 이동한 후 해당 인스턴스의 IP주소 값 복사 뒤에 :8080을 붙여서 접속해 보자.
다음과 같이 화이트 라벨 페이지가 나오면 배포 성공이다.
추가적으로 docs/index.html을 열면 프론트 단과 공유할 swagger api 문서도 확인할 수 있었다.
마무리
이렇게 AWS EC2 세팅부터 간단하게 git clone을 통한 서버 배포를 하여 구조를 파악하였고,
Jenkins를 활용하여 더 쉽게 ci cd 파이프라인을 구성해 보자.
'Project > 협업프로젝트' 카테고리의 다른 글
[협업프로젝트] Jenkins와 Docker로 CI/CD pipeline 구축하기 (2) (2) | 2023.10.31 |
---|---|
[협업프로젝트] Jenkins와 Docker로 CI/CD pipeline 구축하기 (1) (0) | 2023.10.30 |
[협업프로젝트] SpringBoot 프로젝트 EC2, RDS 적용 (0) | 2023.10.30 |
[협업프로젝트] SwaggerUI + Spring RestDocs 로 API 문서화하기 (2) | 2023.10.14 |
[협업 프로젝트] Git Flow, 커밋 컨벤션, Issues 프로젝트 적용하기 (0) | 2023.10.02 |